在Python中检测Arduino端口

9 投票
3 回答
4184 浏览
提问于 2025-04-17 02:57

我在Windows XP上用Python 2.7和Arduino进行传感器的使用,但USB转串口的特性让我很头疼。用物理串口时,直接写死端口位置没问题,但Arduino的端口会根据插入的设备不同而变化,这让我在创建对象时很困扰。有没有什么办法让我在Python中每次初始化对象时都能获取到端口地址,然后把它传给PyVISA或者pySerial

3 个回答

0

我建议使用一个握手信号,并扫描所有的端口。比如,你可以从你的Python脚本发送一个“whoru”到Arduino,然后在Arduino上写一段代码,当它在串口上检测到“whoru”时,就回复“arduino”。这样,你就可以扫描所有端口,发送握手信号,当收到正确的回复时,就知道Arduino在哪个端口上了。

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
2

我也建议使用握手,不过反过来做。 在你开始程序之前,先从所有的串口读取输入。当你打开设备时,可以让它发送一个类似“开启”的信号。当你的代码在那个端口检测到“开启”信号时,再进行握手。

撰写回答