pyserial:错误的字符写入arduino

时间:2014-08-07 18:41:02

标签: python arduino pyserial

我有一个非常简单的设置:连接到RaspberryPi串口(/ dev / ttyAMA0)的arduino(实际上是RFM12Pi)。 arduino接受以下格式的字符串:data;像:

  • 2250;
  • 5800;

我正在尝试使用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))

0 个答案:

没有答案