使用 UART 在 2 Raspberry Pi 之间通信

Communicate between 2 Raspberry Pi with UART

我想通过 UART 通信将数据从一个 pi 发送到另一个。第一个 Raspberry 型号是 Raspberry Pi 4,第二个是 Raspberry Pi 3。要进行此通信,我以这种方式连接两个 Raspberry 引脚:

Pi 4 -> Pi 3

Tx -> Rx

Rx -> Tx

Ground -> Ground

我已经按照 link: https://iot4beginners.com/raspberry-pi-configuration-settings/ 的步骤在树莓派配置上激活了两个 Pis 串行连接。为了写入和发送数据,我创建了下一个 python 程序:

import time
import serial

ser = serial.Serial(
        port='/dev/ttyS0', #Replace ttyS0 with ttyAM0 for Pi1,Pi2,Pi0
        baudrate = 9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.SEVENBITS)
counter=0
while True: 
    ser.write(str.encode(str(counter))) 
    time.sleep(1) 
    counter += 1

为了读取和打印接收到的数据,我创建了下一个程序:

import time
import serial

ser = serial.Serial(
        port='/dev/ttySO', #Replace ttyS0 with ttyAM0 for Pi1,Pi2,Pi0
        baudrate = 9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.SEVENBITS
)
counter=0

while 1:
    x = ser.readline()
    print(x)

最后,当我 运行 阅读程序时,我得到了下一个错误:

Traceback (most recent call last):
  File "serial_read.py", line 14, in <module>
    x = ser.readline()
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 501, in read
    'device reports readiness to read but returned no data '
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

我是 Raspberry 通信的新手,如果有任何建议,我将不胜感激。

Python 2.7 正式失效,所以我建议使用 Python3 - 特别是对于像你这样的新项目。

所以,而不是 运行 你的脚本:

python3 YourScript.py

您可以在开头放置适当的 shebang,这样它会自动使用您想要的正确 Python 版本:

#!/usr/bin/env python3

import ...

然后使脚本可执行:

chmod +x YourScript.py

现在您可以运行它:

./YourScript.py

很高兴它将使用 Python3,即使其他人使用它也是如此。


我认为,实际问题是接收端的 readline() 正在寻找您未发送的换行符。所以我会尝试添加一个:

ser.write(str.encode(str(counter) + '\n')) 

就我个人而言,我发现 f-strings 比旧的 %.format() 更容易,所以也许试试:

ser.write(str.encode(f'{counter}\n'))