【问题标题】:Detect Arduino port in Python [duplicate]在Python中检测Arduino端口[重复]
【发布时间】:2011-09-23 19:22:35
【问题描述】:

我正在使用 Arduino 在 Windows XP 上使用 Python 2.7 进行传感,但 USB 到串行端口转换的非静态特性让我很头疼。使用物理串行端口,对端口位置进行硬编码是没有问题的,但是 Arduino 会根据对象实例化时插入或未插入的内容来移动。在 Python 中有什么方法可以让我在每个对象初始化期间获取端口地址并将其传递给 PyVISApySerial

【问题讨论】:

  • 什么操作系统,Python版本,pyserial版本?你试过什么?什么不工作?细节,伙计!
  • 添加了关于版本和操作系统的内容,但是任何版本的 pyvisa 或 pyserial 需要作为位置输入的只是像“COM3”这样的文本字符串。

标签: python usb serial-port arduino


【解决方案1】:

我也建议握手,但反过来做。 在启动程序之前,只需阅读所有串行端口的输入即可。当你打开设备时,你可以让它发送类似 ON 信号的东西。当您的代码检测到该端口上的 ON 信号时,请进行握手。

【讨论】:

    【解决方案2】:

    在 pySerial 中,有一种非常隐蔽的方法可以检查所有串行端口上的 VID/PID(至少在 Windows 上)。 只需在端口属性中找到Arduino的VID/PID,然后将其放入python代码中即可。

    当然,如果您连接了多个 Arduino(相同的 VID/PID),这将不起作用

    import serial.tools.list_ports
    
    for port in list(serial.tools.list_ports.comports()):
        if port[2].startswith('USB VID:PID=1234:5678'):
            #here you have the right port
    

    【讨论】:

      【解决方案3】:

      我建议使用握手信号并扫描所有端口。例如,将“whoru”从您的 python 脚本发送到 arduiono,并在 arduiono 上有代码,当它在串行端口上检测到“whoru”时,它会以“arduino”响应。这样,你扫描端口,发送握手,当你得到正确的响应时,你就知道 arduino 在哪个端口上。

      【讨论】:

      • 这会扰乱其他端口上的设备,因为他们会得到他们不知道含义的输入。我正在使用的其中一个设备是一台糟糕的设备,但没有什么比这更好的了。如果它收到一个坏信号,它会锁定,重置它的唯一方法是完全拔掉它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多