这个问题的解决方案可能是非常简单的,但我是新来与动态的设备接口。 我在做什么是我在做一个python可执行代码,因此用户不必在其计算机或任何种类的Python解释器,这意味着我不知道哪个USB端口的设备将被插入的空闲至。 程序需要能够打开到通过串行到USB转换器连接的设备的连接。 我怎样才能确定哪个连接的设备是正确的设备打开一个端口? 我使用pySerial与设备交互。 任何帮助将不胜感激。
Answer 1:
不管你如何配置你的设备,在某些时候,你很可能将不得不问其中端口是用户,或轮询所有串行设备为已知的响应。 (查询有它的缺陷的,所以阅读!)。 不像USB设备,有可能是由当你连接一个普通老式串行设备已知OS没有供应商/设备ID。
首先,你需要找到串行端口。 这里有一个问题,可能会帮助: 什么是在Python枚举串行端口(包括虚拟端口)的跨平台的方法? 。
一旦你有串行端口的列表,你可以询问用户是否知道使用哪一个。 如果他们这样做,问题就解决了!
如果他们不这样做,你可以提供给查询了一些数据,你知道会产生从你的设备一定的响应中的所有串口设备。 但请记住,如果用户有其他串口设备连接,你的“你好”的字节串实际上可能是一些其他的设备自毁序列! 因此,你应该提醒的是轮询可能干扰其他设备,并始终促使他们这样做之前用户。
不知道更多关于你的代码(例如什么通讯科框架,如果有的话,你使用。你在控制台做这个还是你使用GUI工具包等),这是不可能说什么是最好的实现代码可能。 在最简单的情况下,可以刚过所有串口设备的环路,发送问候和检查响应。 (:为问候一次循环,再次循环检查什么的缓冲区。如果你要获得比这更花哨,使用正确的库也可以做到这一点并行。)
附注:您可能能够解决这个问题,如果你有一个内置的转换器,你可以设置为供应商/设备ID,但转换仍然会被任何现代操作系统可以自动检测和枚举串行端口; 你不会得到直接对话,以它作为一个USB设备。 这可能是可以找出哪些端口与ID去,但我从来没有尝试这样做。 但是,如果你不是一个谁得到挑转换器(例如,如果它是一个用户提供的电缆)这种做法是没用的。
Answer 2:
这是我用来标识类似的Arduino串行USB conveter设备的方式。 它检查设备描述的“USB”字符串。
import serial as ser
import serial.tools.list_ports as prtlst
global COMs
COMs=[]
def getCOMs():
global COMs
pts= prtlst.comports()
for pt in pts:
if 'USB' in pt[1]: #check 'USB' string in device description
COMs.append(pt[0])
Answer 3:
我能想到让周围的探测未知设备的问题的唯一方法是让设备连续发送未经请求的“你好”回应。 这是你可以连接到所有串口设备,并听取了“打着招呼”。 连接和听串行设备不应该永远搞砸了。
缺点是你有这些邮件塞满了你的串行数据流。 你可以有一个“我现在就在这里,STFU”的命令,但那么你只能连接到它一次。
FTDI芯片具有的识别方法,但你必须使用自己的库来访问数据。