python-选择串行端口

时间:2018-11-26 21:34:12

标签: python arduino raspberry-pi

使用Arduino将数据发送到Raspberry Pi。尽管这是一个正在开发的项目,但最终产品可能不是真正的案例。但是我发现自己在电脑和RPI之间交换了来自Arduino的USB电缆,并交换了第四根电缆。在RPI上,每次将电缆插入和取出时,USB连接的端口都会更改。像增量一样工作。现在端口号是ttyACM4,但是我今天从ttyACM1开始。在/dev/下,先前的所有三个连接ttyACM1-3均被删除。

因此,要确保我在Python代码中使用了正确的串行端口,有没有办法确保在启动serial.Serial时使用的端口正确?

那么,是否有一种更简单的方法来保存两个硬件主应用程序代码并进行串行握手,并使RPI通过serial.tools.list_ports测试其所有连接?

1 个答案:

答案 0 :(得分:0)

我通过检查os的可用端口来解决此问题,然后将第一个可用的端口用作我的串行端口。您的应用程序可能需要一些调整,例如要检查哪些端口以及检查它们的顺序。

#!/usr/bin/python
import os,serial

#add ports you want to check to this list, in the order you want them checked:
serial_ports=['/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyACM0','/dev/ttyACM1']

serial_port=""
for x in serial_ports:
   #print 'trying ',x
   if os.popen('ls '+x+' >/dev/null 2>&1 ; echo $?').read().strip()=='0':
      serial_port=x   
      break;         #stop checking, we found one

#if you want to see all ports available, you need to adjust the code here 
#and make a decision as to which port to use

baud=9600
if len(serial_port)>1:
   self.ser = serial.Serial(serial_port, baud, timeout=0)
else:
   print 'No serial ports found'