首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过xbee.send()发送命令的协议是什么?

通过xbee.send()发送命令的协议是什么?
EN

Stack Overflow用户
提问于 2017-08-11 11:09:45
回答 1查看 911关注 0票数 0

我想使用Digi XStick2 ZB (通过USB连接并作为/dev/ttyUSB0上的串行接口)作为一组ZigBee传感器和执行器(温湿度、接触传感器、漏水、电源插头,.)的ZigBee控制器。换句话说,我正在寻找配置mesh网络和与传感器/执行器通信的方法。

我找到了python xbee,并编写了一个简单的python脚本来与USB接口通信:

代码语言:javascript
运行
复制
#!/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()

它起作用了,我得到了我的命令的一些回应:

代码语言:javascript
运行
复制
$ ./test.py 
Sending some command
Waiting...
Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x00\x00', 'command': 'MY', 'id': 'at_response'}

但是我找不到关于所使用的协议(即我可以发送的消息的内容)的任何信息--我是否可以使用一些命令引用或协议定义?

或者,是否有更简单的方法(更高级别的库)?通过USB接口控制传感器?

EN

回答 1

Stack Overflow用户

发布于 2017-08-11 11:43:54

和往常一样,我问完后不久就找到了答案.我看上去XBee ZB支持两种模式:

引用如下:

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

文章包含指向两种模式的文档的链接:Guide.pdf?version=1&modificationDate=1380318639117&api=v2

下面是一个简短的例子:

代码语言:javascript
运行
复制
#!/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()

输出:

代码语言:javascript
运行
复制
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)。

希望它能帮到别人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45633767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档