如何解决如何获取USB到串行地址?
问题
Pyserial:USB串行设备具有不同的地址,具体取决于我将其安装到台式机(Catalina)还是笔记本电脑(High Sierra):
ser = serial.Serial('/dev/cu.usbserial',9600) #OSX High-Sierra
ser = serial.Serial('/dev/cu.usbserial-1D120',9600) #OSX Catalina
是否有使用通配符的方法? /dev/su.usbseria*
。目标是一行代码可以处理两种情况。
感谢您对为何附加-1D120
的任何见识。
参考
示例
import serial.tools.list_ports
#Find USB Port
def find_port(): #Finds which port the arduino is plugged into
ports = list(serial.tools.list_ports.comports())
for p in ports:
if '0403' in p[2]: #unique to Osepp Uno (arduino clone)
return p[0]
假设目标字符串(正则表达式)的格式为:
/dev/cu.usbserial **************
如何修改上面的代码片段以捕获并返回USB串行设备?
解决方案:检索USB到串行地址并打开端口
YMMV :请注意算法限制。尤其是捕获字符串:如果发现(捕获)了多个实例,则将返回最后一个捕获列表项 =>它可能是也可能不是预期的目标字符串。
import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
#print(p[0]) #p[0] => target string
if 'usbserial' in p[0]: #OSX: Trap usbserial device /dev/cu.usbserial-1D120
serAddr=p[0]
if 'ttyUSB' in p[0]: #Ubuntu :Trap usbserial device /dev/ttyUSB0
serAddr=p[0]
ser = serial.Serial(serAddr,9600) # Open port at 9600 baud
可以添加用于检查Windows COM端口的第三个未经测试的陷阱:
import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
#print(p[0]) #p[0] => target string
if 'usbserial' in p[0]: #OSX: Trap usbserial device /dev/cu.usbserial-1D120
serAddr=p[0]
if 'ttyUSB' in p[0]: #Ubuntu :Trap usbserial device /dev/ttyUSB0
serAddr=p[0]
if 'COM' in p[0]: #Windows :Trap usbserial device COM3 COM7 etc.
serAddr=p[0]
如果有人验证(测试)Windows陷阱,请更新此帖子和/或评论。
解决方法
注意:这个答案是从问题中剪下来的,并正确发布在这里。
检索USB转串口地址并打开端口
YMMV:注意算法限制。尤其是捕获字符串:如果找到(捕获)多个实例,将返回最后一个捕获的列表项 => 它可能是也可能不是预期的目标字符串。
import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
#print(p[0]) #p[0] => target string
if 'usbserial' in p[0]: #OSX: Trap usbserial device /dev/cu.usbserial-1D120
serAddr=p[0]
if 'ttyUSB' in p[0]: #Ubuntu :Trap usbserial device /dev/ttyUSB0
serAddr=p[0]
ser = serial.Serial(serAddr,9600) # Open port at 9600 baud
可以添加第三个未经测试的用于检查 Windows COM 端口的陷阱:
import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
#print(p[0]) #p[0] => target string
if 'usbserial' in p[0]: #OSX: Trap usbserial device /dev/cu.usbserial-1D120
serAddr=p[0]
if 'ttyUSB' in p[0]: #Ubuntu :Trap usbserial device /dev/ttyUSB0
serAddr=p[0]
if 'COM' in p[0]: #Windows :Trap usbserial device COM3 COM7 etc.
serAddr=p[0]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。