我有一个非常简单的设置:连接到RaspberryPi串口(/ dev / ttyAMA0)的arduino(实际上是RFM12Pi)。 arduino接受以下格式的字符串:data;像:
我正在尝试使用python脚本在收到“INFO”消息时发送该消息(即串行控制台中出现INFO行),但是无效。
这是python脚本:
import serial
import time
ser = serial.Serial(port='/dev/ttyAMA0',
baudrate=115200, )
print ser
while(True):
line = ser.readline()
print line.rstrip()
if "INFO" in line:
w_len = ser.write('2,216;')
print "Wrote: %s" % w_len
非常简单,但不起作用。看起来错误的字符被发送到串口,或者某些东西被缓冲......
#python serial_listener.py
Serial<id=0xb6c72fd0, open=True>(port='/dev/ttyAMA0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
[2] INFO
Wrote: 6
ACK sent
[2] INFO
Wrote: 6
ACK sent
[2] INFO
Wrote: 6
ACK sent
[2] INFO
Wrote: 6
ACK sent
有时它看起来像是发送了一些内容,但却是垃圾值:
Wrote: 6
ACK sent
[2] 0
这让我疯了!我已经测试了几乎我能想象的任何东西,在打开它时更改串口属性,在发送后添加flush(),flushInput和flushOutput,然后发送...和nothig。当然这可以使用控制台:
miniterm.py -b115200 /dev/ttyAMA0
--- Miniterm on /dev/ttyAMA0: 115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
[2] INFO
ACK sent
[2] 240
[SEND] ACK
它自身的字符串(“2,240;”)未显示,但“[2] 240”表示显而易见:它将向节点“2”发送“240”。
有什么想法吗?我不知道它是否与python字符编码或whatelse有关。
修改 它在arduino代码和python脚本上都将速度改为38400。另外,我必须在发送响应后添加延迟(time.sleep(0.2))