多串口树莓派 Python 程序

Posted

技术标签:

【中文标题】多串口树莓派 Python 程序【英文标题】:Multi Serial Raspberry Pi Python Program 【发布时间】:2019-06-01 01:25:52 【问题描述】:

我正在使用 Raspberry Pi(Kunbus 的 Revolution Pi)通过串行通信 (usb) 控制多个 arduino。我想知道是否可以一次控制/与多个串行端口通信。我知道多串行 aruduino,例如 MultiSerialMega,允许您列出 Serial.begin(9600);和 Serial1.begin(9600);一次与多个通信,这在 Raspberry Pi 上是否存在?就目前而言,我切换了端口,但是一旦我这样做,在另一个 arduino 上运行的程序就会停止。

总结一下:我可以在 python 中与 MultiSerialMega 中的三个串口进行通信吗?

谢谢, 列维

我尝试只添加一个,例如 MultiSerialMega 的示例,但这不起作用(不足为奇)

import serial
import time

while True:
    ser = serial.Serial("/dev/ttyACM0")
    steps = int(input("How many steps?")
    ser.write(b'%d' %steps)
    ser = serial.Serial("/dev/ttyACM1")
    steps = int(input("How many steps?")
    ser.write(b'%d' %steps)

我现在只是在玩步进电机,但是一旦我切换串行端口,程序就会结束/电机停止移动。

【问题讨论】:

【参考方案1】:

据我了解,您想写入连接到您的 Rpi 的多个串行端口。您应该能够使用任意数量的端口来执行此操作,就像使用具有多个硬件 UART 的 Arduino 一样。

试试这个:

import serial
import time
import sys
ser1 = serial.Serial("/dev/ttyACM0")
ser2 = serial.Serial("/dev/ttyACM1")
while True:

    steps = input("How many steps for serial 1? (press q to quit")
    if steps == "q" or steps == "Q":
        ser1.close()
        ser2.close()
        sys.exit()
    else:
        ser1.write(int(steps))

    steps = input("How many steps for serial 2? (press q to quit)")
    if steps == "q" or steps == "Q":
        ser1.close()
        ser2.close()
        sys.exit()
    else:
        ser2.write(int(steps))

编辑:如果您碰巧有太多的 Arduino,以至于您用完了 USB 端口来连接它们,您可以考虑切换到 RS485,它是多点的,因此您最多可以连接 32 个串行设备(您的 Arduino)连接到 Rpi 上的单个串行端口。另见link

【讨论】:

以上是关于多串口树莓派 Python 程序的主要内容,如果未能解决你的问题,请参考以下文章

36 树莓派串口通信

树莓派python串口收发数据

树莓派串口问题

串口数据交互(树莓派)

树莓派 | 串口03 - 使用串口方式远程登陆树莓派终端

树莓派启动:for Mac