- 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/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!