【问题标题】:python - choosing serial portpython - 选择串口
【发布时间】:2018-11-26 21:34:11
【问题描述】:

使用 Arduino 将数据发送到 Raspberry Pi。虽然这是一个正在开发的项目,但这可能不是最终产品的真实情况。但我发现自己在我的计算机和 RPI 之间交换了 Arduino 的 USB 电缆和第四个。在 RPI 上,每次我将电缆进出时,USB 连接的端口都会发生变化。像增量一样工作。现在端口号是ttyACM4,但我今天从ttyACM1 开始。在/dev/ 下,所有三个先前的连接ttyACM1-3 都被删除。

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

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

【问题讨论】:

  • 我会先尝试让设备有一个稳定的名称,然后再循环通过所有端口。 udev 是命名开发节点的东西。您可以尝试编写自己的用于命名串行端口节点的规则,或者可能已经有一条规则填充/dev/serial/by-{id,path}/,这对于您的目的来说可能足够稳定。每次重新连接设备时,您可能需要关闭并重新打开端口。如果这不起作用,请尝试通过端口循环。

标签: python arduino raspberry-pi


【解决方案1】:

我通过检查操作系统的可用端口解决了这个问题,然后将第一个可用端口用作我的串行端口。您的应用程序可能需要进行一些调整,以检查哪些端口以及检查它们的顺序。

#!/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'

【讨论】:

    猜你喜欢
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多