- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个串行 Python 程序,Linux 环境(Raspbian/Raspberry Pi),它通过 USB 转串行适配器使用串行端口。我需要处理用户拔下 USB 适配器然后重新插入的情况。
问题是,在重新连接时,ttyUSB0 变成了 ttyUSB1 因此不再找到该端口。但是,如果我停止 Python 程序(键盘中断)并再次拔下并重新插入 USB 适配器,则端口将返回到 ttyUSB0(这样我就可以重新开始)。这只有在 Python 程序停止时才会发生。
我在触发器模式下测试了该程序(它似乎可以正常工作)以便在不再找到 ttyUSB0 时使用 ttyUSB1 ,反之亦然,使用 ttyUSB0 以防 ttyUSB1 不再找到,等等,但这对我来说似乎是一个奇怪的解决方案。
有没有更好的方法来强制 pySerial “忘记”它曾经连接到 ttyUSB0 以防出现错误并在程序仍在运行时将当前端口释放到系统?
这是一个有效的触发器测试程序:
import serial
import time
p = "/dev/ttyUSB0"
while True:
error_flag = False
try:
s = serial.Serial(port=p, baudrate=9600, bytesize=8, parity="N", stopbits=1, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None)
except Exception as e:
error_flag = True
if "ttyUSB0" in str(e):
p = "/dev/ttyUSB1"
print ("port is now", p)
elif "ttyUSB1" in str(e):
p = "/dev/ttyUSB0"
print ("port is now", p)
else:
print (e) # none of the above
# if not error_flag, do whatever, etc.
time.sleep(1)
最佳答案
您可以尝试创建一个 udev将创建 symbolic link 的规则到那个 USB 设备,然后你就可以使用像 /dev/myUSB 这样的东西,它对于那个特定的 USB 设备总是保持不变。
首先,您需要找到 USB 驱动器的一些标识信息。输入 lsusb
应该会显示一些如下所示的信息:
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International
在此示例中,0403 是供应商 ID,6001 是产品 ID。
创建一个名为 99_usbdevice.rules 的文件(我认为名称不重要,重要的是目录):
sudo nano /etc/udev/rules.d/99_usbdevices.rules
请注意,上面的目录可能特定于 Raspbian。
将下面的行复制/粘贴到文件中并保存:
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="myUSB"
重启 Raspberry Pi 或拔下 USB 并重新插入。现在应该有一个 /dev/myUSB 条目,您可以像使用 ttyUSB# 条目一样使用它。
关于python - 使用 pySerial 在 Python 下重新连接到 USB 端口时,如何避免在 ttyUSB0 和 ttyUSB1 之间切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48356223/
我有 2 个 USB 设备连接到树莓派, CP2108 USB 转串口转换器,有 4 个端口,当我连接到 usb 时,我得到 4 个 ttyUSBx EC25 GSM 调制解调器,同样适用于此情况。当
我有两个 usb-> 串行适配器,都是 ftdi,我们将它们命名为 ftdiA 和 ftdiB。该设备(在本例中为 raspberry pi,但它有点无关紧要)有 2 个 USB 端口,我们将它们命名
我在 Linux 的守护进程中使用端口时遇到问题。我使用 fcntl.h 中的 open 就像 serHandle_ = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY)
我一直在 cubieboard 上使用 3G 适配器来连接互联网。我已经安装了 usb_modeswitch ,它基本上将加密狗从 USB 存储模式切换到 USB 调制解调器模式。我验证了启动后切换会
我刚开始使用我的 Raspberry Pi,我有一个项目,我想从 USB 端口读取数据。我安装了Java JDK8并编写了编译运行的程序。但是我收到/dev/ttyUSB1 不存在的消息。 我只有一根
我有一个程序,当计算机运行时,该程序将始终运行。它通过 USB 设备与串行接口(interface)连接。有时,当计算机打开时,该设备可能不存在。 我的问题是确认设备文件何时存在的好方法。我可以创建一
我有一个 USB 到 RS485 转换器连接到我的 linux 盒子: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port 目前正在使用
我正在为一个项目使用 Go,并通过串行端口 (ttyusb) 将数据传输到嵌入式设备。在快速和“大”传输期间,我注意到传输的数据与我想要发送的值不匹配。 我尝试了各种可用的库,最后它们都使用系统调用进
我的程序需要访问ttyUSB没有root权限。 我尝试用 chmod 777 /dev/ttyUSB0 更改它如您所知,当我重新启动时,此权限更改为默认值。如何为此配置我的 udev rules.d?
以下日志来自 TeraTerm,一个用于 windows 的终端仿真器。我想通过以下方式从我的 Linux 中的 ttyUSB0 获取日志。 [Thu Apr 14 15:08:14.410 2016
我在 Raspbian 上运行一个自定义 C++ 程序,它会每隔一段时间重新启动它的 USB 端口。但是,我注意到/dev/USB* 枚举在电源循环之间不一致,需要能够处理这个问题。 是否有任何优雅的
我有 USB 产品的供应商和产品代码:0403:6001 我想知道如何轻松地将 lsusb 命令的结果与 /dev/ttyUSB* 上的设备确定联系起来 lsusb 给我 Bus 001 Device
AM 有一个 C 程序,它使用系统列出/dev/ttyUSB* 设备,我如何将它们存储在数组中并进行处理。 #include #include int main() { system("l
我有一个设备不断地将一些数据爆破到通过 USB 连接到我的 PC 的 FTDI 中。我想使用简单的 bash 脚本将数据记录到 CSV 文件中。 当我 cat/dev/ttyUSB0 时,我得到了一些
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
获取 Linux 系统上所有可用串行端口/设备列表的正确方法是什么? 也就是说,当我遍历/dev/中的所有设备时,如何以经典的方式判断哪些是串口,即那些通常支持波特率和RTS/CTS流量的设备控制?
想在 Advanced Tomato 固件下将 gsm 调制解调器(华为 E160G)连接到路由器 ASUS RT-N18U。但是不知道在dongle配置文件dongle.conf中指定了什么usb设
问题 我现在不得不使用一个相当尴尬的 API,坚持由我提供设备的地址,通过 USB 端口链接,格式为 通讯* .然而,在 Ubuntu 我正在使用并且必须使用的机器,如果我插入此设备,它将自动分配一个
我正在尝试访问已经运行的特权 docker 容器中的串行端口(作为用户),但我收到“权限被拒绝”错误,而权限应该正确设置。作为最小的可重现示例(假设串行设备连接到/dev/ttyUSB0): # st
我是一名优秀的程序员,十分优秀!