当串口上没有收到char时,Raspberry Pi卡住了

时间:2014-05-19 18:02:28

标签: python raspberry-pi serial-communication

我正在使用连接到我的RPI的XBee模块,两者之间建立串口通信,问题是如果XBee没有数据存在我的代码被卡住,有没有解决这个问题,我试过超时但是没有成功。

代码:

ser = serial.Serial (
port = "/dev/ttyAMAO",
baudrate = 9600,
parity = serial.PARITY_NONE,
stopbits = serial,STOPBITS_ONE,
bytesize = serial.EIGHTBITS,
timeout = 0
)

ser = serial.Serial("/dev/ttyAMAO")

for c in ser.read():
l.append(c)

1 个答案:

答案 0 :(得分:0)

ser.read()

是一个阻止调用,最好检查是否有任何内容可以先读取

if ser.inWaiting(): #only true if there is data waiting to be read
   for c in ser.read():
          ....

或者如果你希望你的串行线程与你的主程序并行运行(即,根本不阻止用户界面......)你应该看看像twisted或asyncio这样的东西

虽然通常使用串行连接,但您正在使用某些需要双向通信的设备,通常是通过对串行设备的查询启动的,并且您确实希望在获得响应之前实际阻止。我通常会上课来为我处理这个

class MySerial:
    def __init__(self,port,baudrate):
       self.ser = serial.Serial(port,baudrate)
    def query(cmd,terminal_char="\r"):
       self.ser.write(cmd)
       return ''.join(iter(ser.read,terminal_char))

s = MySerial("COM9",11200)
result = s.query("get -temp\r")
print result

这将累积整个响应,直到收到指定的终端字符