我使用pyserial通过UART在两个Raspberry pi之间进行写入和读取
Raspberry pi 1:向Raspberry pi 2发送数据
while 1:
ser=serial.Serial('/dev/ttyAMA0')
if not ser.isOpen():
ser.open()
msg=raw_input('RPi 1 send:')
ser.write(msg)
ser.close()
Raspberry pi 2:从Raspberry pi 1接收数据
while 1:
ser=serial.Serial('/dev/ttyAMA0' ,timeout=0)
if not ser.isOpen():
ser.open()
data=ser.read(1024)
if data.__len__()>0:
print 'RPi 2 receive:',data
ser.close()
我运行两个代码。
并发送数据
RPi 1 send : Hello
并接收数据
RPi 2 receive : Hello
但是如果RPi 1发送的数据超过8个字符
例如
RPi 1 send : Hello Raspberry pi NO.2
结果是
RPi 2 receive: Hello Ra
RPi 2 receive: spberry
RPi 2 receive: pi NO.2
这是我的问题。因为我希望它像这样收到
(RPi 2收到:Hello Raspberry pi NO.2)#show只有一行。
如果再次发送(更多8个字符),它将显示在一个新行中。
在一行中加入什么代码?或其他方式这样做? :)
答案 0 :(得分:3)
使用ser.read
阅读时,您只是阅读已经存在的内容
缓冲区,或等待字符到达缓冲区。您指定的大小
是接收的最大字符数,但它可能比你少得多
经历。
您有2个简单的解决方案:
ser.readline
并在字符串中添加终结符(如\ n)在这两种情况下,请在打开时指定超时(例如1秒) 串行线,如果远程端,则返回对代码的控制 因任何原因不发送任何内容。
希望它有所帮助。
答案 1 :(得分:1)
我喜欢这样做
delim = "\x00"
ser.write(msg+delim)
delim = "\x00"
recvd = "".join(iter(lambda:ser.read(1),delim))
print recvd