【问题标题】:Identifying serial/usb device python识别串口/usb设备python
【发布时间】:2012-08-01 00:23:58
【问题描述】:

这个问题的解决方案可能很简单,但我对动态连接设备并不熟悉。我正在做的是我正在制作一个 python 可执行代码,所以用户不必在他们的计算机上或任何类型的 python 解释器上有空闲,这意味着我不知道设备将插入哪个 USB 端口至。该程序需要能够打开与通过串行到 USB 转换器连接的设备的连接。如何确定哪个连接的设备是打开端口的正确设备?我正在使用 pySerial 与设备进行交互。任何帮助将不胜感激。

【问题讨论】:

  • 什么USB转串口转换器?它是设备内置的,还是用户需要找到自己的 USB 转串口转换器才能使用?他们可以将设备直接插入串行端口吗?
  • 它将在 Windows XP 上运行。当我说 USB 转串口转换器时,设备的电缆是串行的,但我被告知设备将连接到适配器以将其插入 USB 端口。

标签: python serial-port pyserial usbserial


【解决方案1】:

无论您如何配置您的设备,在某些时候您可能不得不询问用户端口在哪里,或者轮询所有串行设备以获取已知响应。 (尽管轮询有它的陷阱,所以请继续阅读!)。与 USB 设备不同,当您连接普通的旧串行设备时,操作系统不会知道供应商/设备 ID。

首先你需要找到串口。这是一个可能有帮助的问题:What is the cross-platform method of enumerating serial ports in Python (including virtual ports)?

获得串行端口列表后,您可以询问用户是否知道要使用哪一个。如果他们这样做了,问题就解决了!

如果他们不这样做,您可以提议使用您知道会从您的设备产生特定响应的一些数据轮询所有串行设备。请记住,如果用户连接了其他串行设备,您的“hello”字节字符串实际上可能是其他设备的自毁序列!因此,您应该警告用户轮询可能会干扰其他设备,并始终在您这样做之前提示他们。

如果不了解您的代码的更多信息(例如,您正在使用什么通信框架,如果有的话;您是在控制台中执行此操作还是使用 GUI 工具包等),不可能说出最好的方法编码这可能是。在最简单的情况下,您可以遍历所有串行设备,发送问候语并检查响应。 (您也可以并行执行此操作:为问候语循环一次,然后再次循环以检查缓冲区中的内容。如果您想要比这更花哨,请使用适当的库。)


旁注:如果您有一个可以设置供应商/设备 ID 的内置转换器,那么您可能可以解决这个问题,但是转换器仍将被任何现代操作系统自动检测并枚举为串行端口;您将无法直接与它作为 USB 设备交谈。可以确定哪个端口与哪个 ID 对应,但我从未尝试过这样做。但是,如果您不是选择转换器的人(例如,如果它是用户提供的电缆),则这种方法是无用的。

【讨论】:

  • 谢谢!我可以遍历所有设备,在此过程中不会连接任何其他可能受到伤害的设备。
  • @user1161439 - 只要你确定:P
【解决方案2】:

这是我用来识别像 Arduino 这样的串行 USB 转换器设备的方式。 它检查设备描述的“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])

【讨论】:

    【解决方案3】:

    我认为解决探测未知设备问题的唯一方法是让设备不断发送未经请求的“你好”响应。那就是您可以连接到所有串行设备并收听“你好”。连接和收听串行设备不应该搞砸。

    缺点是这些消息会使串行流混乱。你可以有一个“我现在在这里,stfu”命令,但你只能连接一次。

    FTDI 芯片有一种识别方法,但您必须使用它们的库来访问数据。

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 2011-11-05
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多