我试图使用python获取XBee网络(API模式)的数据,所以我使用python-xbee库和AT&#ND;#'尝试发现所有XBee单元的命令(我将仅为下面的ND命令粘贴我的代码):
#!/usr/bin/python
from xbee import ZigBee
import serial
ser = serial.Serial('COM7', 9600)
xbee = ZigBee(ser)
xbee.at(command='ND')
xbeeAddrs = []
while True:
try:
newXBeeR = xbee.wait_read_frame()
print newXBeeR
xbeeAddrs.append(newXBeeR['parameter']['source_addr_long'])
except KeyboardInterrupt:
break
ser.close()
但是没有响应消息,代码在等待帧时挂起。
对于最简单的测试,我使用带有7段显示器的Arduino Uno连接的XBee Router API板,以及使用sparkfun uart board连接到计算机的XBee Coordinator API板。
其他AT命令正常工作,但我需要在发送命令之前发现所有可能的XBee路由器单元。如果我使用X-CTU软件,发现功能将完美无缺......
我该怎么办? 非常感谢,
更新
在评论中解决......
答案 0 :(得分:1)
将xbee = ZigBee(ser)
更改为xbee = ZigBee(ser, escaped=true)
说明:默认情况下,API帧不会被转义,即zigbee / xbee对象在ATAP1模式下运行。对于实际设备(协调器)可能不是这种情况。因此,一个修复是在创建xbee / zigbee对象时传递escaped = true参数或将设备配置为ATP1模式
xbee = ZigBee(ser)
应为xbee = ZigBee(ser, escaped=true)