在我的项目中,有一个 Raspberry Pi Zero W,通过串行 TX/RX 线(通过 5 - 3.3V 逻辑电平转换器)与 Arduino Pro Micro 链接。开机时,Arduino 开始通过串口发送“你在吗”命令,直到 Pi 完成启动并启动一个侦听串口的 python 程序,它回复“是”。然后 Arduino 继续发送带有传感器数据的定期更新。
出于某种尚未理解的原因,Arduino 可以断开连接并重新启动,而 Pi 仍在运行。connection.in_waiting
并且,出于某种原因,Python 端的连接以一种在读取时不会引发异常的方式被切断。
import serial
import time
ser = serial.Serial('/dev/serial0')
ser.baudrate = 9600
cmd = b''
while True:
time.sleep(1)
print(ser.is_open)
while ser.in_waiting:
ch = ser.read()
if ch == b'\n':
print('New command:', cmd)
cmd = b''
ser.write(b'OK\n')
continue
else:
cmd = cmd + ch
我已经用这个简单的代码进行了测试,但是在我的测试中,如果我断开 Arduino 并将其重新连接,则ser.is_open
永远不会False
,并且旧连接也适用于重新连接的 Arduino。因此,不幸的是,当数据在断开连接后停止出现时,我无法完全复制连接丢失的情况。但是,为了进一步调查,我想添加一些监控代码,将串行断开事件记录在文件中。但是有办法吗?如果 connection.is_open 始终为真,即使没有连接 Arduino,那么如何检测是否没有连接?