2014-03-12 38 views
1

我有一个问题,这个库: https://code.google.com/p/python-xbee/超时中缺少的XBee API Python库

有没有超时的xbee.wait_read_frame()功能。

我正在测试一个信号的所有串行端口,但如果我不能试一试就没有办法做到这一点。

在没有编辑库的情况下,在Python中升级这个函数有没有可能性? 或者图书馆内部有小的变化?

ports_available = [] 

for port in range(0,20): 
    try: 
     ser = serial.Serial(port, 9600) 
     ports_available.append(port) 
     ser.close() 
    except: 
     pass 

print(ports_available) 

for port in ports_available: 
     ser = serial.Serial(port, 9600) 
     bee = ZigBee(ser) 
     bee.at(command=b"MY") 
     print(bee.wait_read_frame()) #<---------- 
     ser.close() 

回答

1

看起来你需要使用documentation第3页中描述的异步模式。除非数据帧包含接收它的串行端口的参数,否则可能会非常棘手。如果没有,您将无法将数据连接到接收它的端口。

import serial 
import time 
from xbee import XBee 

serial_port = serial.Serial('/dev/ttyUSB0', 9600) 

def print_data(data): """ 
    This method is called whenever data is received 
    from the associated XBee device. Its first and 
    only argument is the data contained within the 
    frame. 
    """ 
    print data 

xbee = XBee(serial_port, callback=print_data) 

while True: 
    try: 
     time.sleep(0.001) 
    except KeyboardInterrupt: 
     break 

xbee.halt() 
serial_port.close() 
+0

这正是我所需要的,谢谢 – w5e