有一个串行阅读问题让我疯了。当前设置是连接到RaspberryPi(标准USB连接)的Arduino。尝试从 / dev / ttyACM0
中读取Arduino通过串口发送到Raspberry的串行信息当尝试非常基本的监控时,原始读取:
$ (stty raw; cat) < /dev/ttyACM0
RFBee ready to receive!
: 03 Packet: 80 0F EA 1D D9 00 F3 15 FF FF RSSI: -60 LQI: 30 Error: 7 Next: 64 Packets: 4
RFBee ready to receive!
Index: 00 Packet: E0 0E F2 C6 01 02 B1 91 FF FF RSSI: -60 LQI: 2F Error: 7 Next: 64 Packets: 1
Index: 01 Packet: 50 0D E7 FF 73 04 56 C4 FF FF RSSI: -60 LQI: 2F Error: 7 Next: 64 Packets: 2
Index: 02 Packet: 80 0D F6 1D D8 0C 11 BE FF FF RSSI: -61 LQI: 2F Error: 7 Next: 64 Packets: 3
Index: 03 Packet: 20 0D E7 D4 C1 86 AC CA FF FF RSSI: -61 LQI: 2E Error: 7 Next: 64 Packets: 4
Index: 04 Packet: E0 0D EF C6 03 0C FA CE FF FF RSSI: -61 LQI: 2F Error: 7 Next: 64 Packets: 5
Index: 00 Packet: 50 0B DF FF 71 06 74 4B FF FF RSSI: -60 LQI: 2E Error: 0 Next: 64 Packets: 6
Index: 01 Packet: 80 0B EA 1D D8 06 29 E4 FF FF RSSI: -60 LQI: 2E Error: 0 Next: 64 Packets: 7
Index: 02 Packet: 70 0A F8 AC 03 8C D4 16 FF FF RSSI: -61 LQI: 2E Error: 0 Next: 64 Packets: 8
这一切似乎都或多或少都有效(除了准备接收线路的双RFBee),然后接着并逐行打印数据。 Minicom以同样的方式工作,读取数据,一切都很好。
使用PySerial,使用以下代码:
#!/usr/bin/python -u
import serial
while True:
with serial.Serial('/dev/ttyACM0', 115200) as ser:
line = ser.readline()
if line != '':
print(line)
它只打印出这些行:
$ python davis_collect.py
B DF CA FF FF RSSI: -60 LQI: 2E Error: 0 Next: 64 Packets: 9
RFBee ready to receive!
RFBee ready to receive!
RFBee ready to receive!
RFBee ready to receive!
RFBee ready to receive!
因此它首先捕获缓冲区的任何部分,但由于某种原因,它无法停止打印那条漂亮的线条。
添加一些基本信息:在我的笔记本上试过,PySerial工作了。串行通信也可以通过RasPi工作,因为它可以通过标准实用程序读取。
Python3输出:
python3 davis_collect.py
b'RFBee ready to receive!\r\n'
b'RFBee ready to receive!\r\n'
b'RFBee ready to receive!\r\n'
b'RFBee ready to receive!\r\n'
b'RFBee ready to receive!\r\n'
到目前为止,没有找到类似的东西。任何想法,链接? (首先发布在这里,如果我需要添加一些东西,请你,更有经验的人,留下建议)
答案 0 :(得分:0)
我是正式的白痴,正如上面提到的gre_gor(感谢头部的踢),循环被调用并且每次都连接到串口。
这对您通常遇到的大多数机器都不会造成问题,但由于RasPi上的默认设置 - 缓冲区处理 - 每次连接后都会在循环中读取第一行。
足以说明,使用(注意我连接后的无限循环):
#!/usr/bin/python -u
import serial
with serial.Serial('/dev/ttyACM0', 115200) as ser:
while True:
line = ser.readline()
if line != '':
print(line)
相反,产生了预期的结果。我补充说:Doh! - 显然!