use*_*439 5 python serial-port usbserial pyserial
这个问题的解决方案可能非常简单,但我不熟悉动态地与设备连接.我正在做的是我正在制作一个python可执行代码,因此用户不必在他们的计算机或任何类型的python解释器上闲置,这意味着我不知道该设备将插入哪个USB端口至.该程序需要能够打开与通过串行转换为USB转换器连接的设备的连接.如何确定哪个连接设备是打开端口的正确设备?我正在使用pySerial与设备进行交互.任何帮助将不胜感激.
无论您如何配置设备,在某些时候您可能不得不询问用户端口在哪里,或者轮询所有串行设备以获得已知响应.(虽然轮询有它的缺陷,所以请继续阅读!).与USB设备不同,当您连接普通的串行设备时,操作系统不会知道供应商/设备ID.
首先,您需要找到串行端口.这是一个可能有用的问题:在Python中枚举串行端口的跨平台方法是什么(包括虚拟端口)?.
一旦有了串行端口列表,就可以询问用户是否知道使用哪一个.如果他们这样做,问题解决了!
如果他们不这样做,您可以提供轮询所有串行设备的一些数据,您知道这些数据会从您的设备产生一定的响应.请记住,如果用户连接了其他串行设备,那么"hello"字节串实际上可能是某些其他设备的自毁序列!因此,您应该警告用户轮询可能会干扰其他设备,并且在您执行此操作之前始终提示它们.
在不了解您的代码的情况下(例如,您正在使用的是什么通信框架;如果您在控制台中执行此操作,或者您正在使用GUI工具包等),则无法说明编写此代码的最佳方法可能.在最简单的情况下,您可以遍历所有串行设备,发送问候语并检查响应.(您也可以并行执行此操作:为问候语循环一次,然后再次循环以检查缓冲区中的内容.如果您想要获得更多的花哨,请使用正确的库.)
附注:您可能能够解决这个问题,如果你有一个内置的转换器,你可以设置为供应商/设备ID,但转换仍然会被任何现代操作系统可以自动检测和枚举串行端口; 你不会直接把它作为USB设备.有可能找出哪个端口与哪个ID相关,但我从未尝试过这样做.但是如果你不是那个选择转换器的人(例如,如果它是用户提供的电缆),这种方法就没用了.