从多个XBee Series 2B EndPoints接收数据

时间:2013-10-16 16:03:21

标签: python raspberry-pi xbee zigbee

我正在开发一个涉及XBee 2B系列无线电的项目,可以使用一些建议来确定数据包来自哪个终端设备。该设置包括在Raspberry Pi Model B上运行的Python 2.7应用程序。

Python-XBee 2.1.0文档声明: ZigBee设备扩展了这种行为,包括自动解析“ND”,节点发现,AT命令响应。 ND AT响应的参数字段将采用以下格式:

{"source_addr": two bytes,
"source_addr_long": eight bytes,
"node_identifier": string,
"parent_address": two bytes,
"device_type": one byte,
"status": one byte,
"profile_id": two bytes,
"manufacturer": two bytes,
}

我认为这意味着ZigBee的I / O示例消息包含上述参数字段。

source_addr ==终点无线电的16位MY参数?

可以获得:

ser = serial.Serial('/dev/ttyUSB0', 9600)
xbee = ZigBeer(ser)
myID = xbee.source_addr

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为I / O示例是对远程ATIO命令的响应,因此它们将遵循远程AT响应的格式,并包含短地址和长地址。

在XBee模块上,短地址为ATMY,长地址为ATSHATSL的组合。我不知道python-xbee是否足以说明它们存储在ZigBee对象中的位置。

其他信息:

节点发现与发送I / O样本不同。当主机将ATND发送到其本地XBee时,XBee模块发送广播发现消息并将响应传递回主机。主机可以解析地址的响应和远程模块的“节点标识符”(ATNI字符串)。

通过此地址列表,主机可以向远程节点发送ATIO命令并解析响应。

我不熟悉Python-XBee库,因此我不知道它是如何实现节点发现,管理节点表以及向发现的节点发送“远程AT命令”。

答案 1 :(得分:1)

xbee数据包是一个字典

from xbee import ZigBee 
import serial

ser = serial.Serial('/dev/ttyAMA0', 9600)
xbee_conn=ZigBee(ser)
xbee_conn.at(command='ND')
while True:
    try:
        packet = xbee.wait_read_frame()
        print packet
    except KeyboardInterrupt:
        break
ser.close()

要获取数据,请将其作为dict访问:

source_address_long = packet['parameter']['source_addr_long']

希望这有帮助。