2017-08-11 150 views
0

我想使用Digi XStick2 ZB作为一个ZigBee传感器和执行器(温度和湿度,接触传感器,漏水,电源插头等)的ZigBee控制器(通过USB连接,并作为串行接口在/dev/ttyUSB0上可见) 。换句话说,我正在寻找配置网状网络并与传感器/执行器进行通信的方式。通过xbee.send()发送的命令的协议是什么?

我发现python xbee并写了一个简单的Python脚本的USB记忆棒进行通信:

#!/usr/bin/python 
import serial 
import time 
from xbee import ZigBee 

def print_data(data): 
    print "Data received:", data 

serial_port=serial.Serial('/dev/ttyUSB0', 9600) 
zbee = ZigBee(serial_port, callback=print_data) 

print "Sending some command" 
zbee.send("at", frame='A', command='MY', parameter=None) 
print "Waiting..." 
while True: 
    try: 
     time.sleep(0.001) 
    except KeyboardInterrupt: 
     break 

zbee.halt() 
serial_port.close() 

它的工作原理,我得到我的命令的一些反应:

$ ./test.py 
Sending some command 
Waiting... 
Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x00\x00', 'command': 'MY', 'id': 'at_response'} 

但我可以” t找到关于使用的协议的任何内容(即,我可以发送的消息的内容) - 是否有一些我可以使用的命令参考或协议定义?

另外,有没有一种更简单的方法(更高级别的库?)通过USB棒控制传感器?

回答

0

像往常一样,我找到了答案,询问后不久......我看起来像XBee ZB型支持两种模式:

要报价:

这个例子演示了AT模式下的XBee操作。 AT模式是 与“透明”模式的代名词。在AT模式下,任何发送至 XBee模块的数据都会立即发送至内存中由 目标地址标识的远程模块。当模块处于AT模式时,用户或主机微控制器可以配置 ,方法是先将模块 置于命令模式,然后通过UART端口发送预定义的AT命令 。当您不需要经常更改目标地址,或者您有一个非常简单的网络或简单的点对点通信时,此模式非常有用。对于涉及到节点与多个目标交谈的较大网络 ,API模式更有用 。在API模式下,不是串行发送AT命令,而是组装包含目标地址的数据包。 API模式 允许您更快地更改目标地址,因为不需要输入命令模式 。如果 用户需要更改远程模块的配置,则API模式也很有用。这个 项目专注于AT模式操作。

文章包含链接的文档两种模式:https://eewiki.net/download/attachments/24313921/XBee_ZB_User_Guide.pdf?version=1&modificationDate=1380318639117&api=v2


一份简短的工作比如现在是:

#!/usr/bin/python 
import serial 
import time 
from xbee import ZigBee 

def print_data(data): 
    print "Data received:", data 

serial_port=serial.Serial('/dev/ttyUSB0', 9600) 
xbee = ZigBee(serial_port, callback=print_data) 

xbee.send("at", frame='A', command='SH', parameter=None) 
xbee.send("at", frame='A', command='SL', parameter=None) 
while True: 
    try: 
     time.sleep(0.001) 
    except KeyboardInterrupt: 
     break 

xbee.halt() 
serial_port.close() 

输出:

Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x00\x01\x02\x03', 'command': 'SH', 'id': 'at_response'} 
Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x04\x05\x07\x07', 'command': 'SL', 'id': 'at_response'} 

这检索串口控制器的编号(在这种情况下为01020304050607)。

希望它可以帮助别人。