我正在使用连接到我的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)
答案 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
这将累积整个响应,直到收到指定的终端字符