我正在使用python-xbee来处理XBee模块(Python 2.7)。我有一个XBee(协调器)通过串口直接连接到我的笔记本电脑和另一个独立的(端点)。我可以使用at
命令轻松与他们通信,但我无法使用remote_at
与他们通信。
当我跑步时
import serial
from xbee.zigbee import ZigBee
import time
PORT = '/dev/ttyUSB0'
BAUD_RATE = 9600
def print_xbee_data(data):
print(data)
serial_port = serial.Serial(PORT, BAUD_RATE)
# For some reason escaped=True does not work
xbee = ZigBee(serial_port, escaped=True, callback=print_xbee_data)
xbee.send('at', frame='a', command='nd', parameter=None)
# Delay: to wait to keep the thread running to receive the response(s)
time.sleep(5)
输出结果为:
{'status': '\x00', 'frame_id': '\x01', 'parameter': {'status': '\x00', 'source_addr': 'a\xd4', 'parent_address': '\x00\x00', 'profile_id': '\xc1\x05', 'source_addr_long': '\x00\x13\xa2\x00@0\xbd@', 'device_type': '\x02', 'node_identifier': ' ', 'manufacturer': '\x10\x1e'}, 'command': 'ND', 'id': 'at_response'}
但是当我跑步时(我正在使用转义和未转义的地址格式以确定)
xbee.remote_at(dest_addr=b'a\xd4', command='MY')
xbee.remote_at(dest_addr=b'\x61\xd4', command='MY')
xbee.send('remote_at',
frame_id='A',
dest_addr_long='\x00\x13\xa2\x00@0\xbd@',
dest_addr='a\xd4',
options='\x02',
command='D0',
parameter='\x02')
xbee.send('remote_at',
frame_id='A',
dest_addr_long='\x00\x13\xa2\x00\x40\x30\xbd\x40',
dest_addr='\x61\xd4',
options='\x02',
command='D0',
parameter='\x02')
time.sleep(5)
我没有输出。
escaped=True
没有工作?非常感谢。
答案 0 :(得分:0)
escaped=True
设置为2(转义API模式)而不是1(API模式)时,才会ATAP
。ATND
响应?确保您使用的是远程模块的地址。答案 1 :(得分:0)
remote_at需要非零frame_id来返回响应。运行:
xbee.remote_at(dest_addr='\x61\xd4', command='MY', frame_id='A')
,输出为:
{'status': '\x00', 'source_addr': '\x00\x00', 'source_addr_long': '\x00\x13\xa2\x00@\n\x05\xab', 'frame_id': 'A', 'command': 'MY', 'parameter': '\x00\x00', 'id': 'remote_at_response'}
虽然状态正常('status': '\x00'
),但上述命令没有按我们想要的那样做。这里'source_addr_long': '\x00\x13\xa2\x00@\n\x05\xab'
是本地XBee(协调员)的地址。为了使命令能够执行我们想要的操作(将MY
命令发送到远程设备),我们必须指定64位地址(长)。因此,正确的命令是:
xbee.remote_at(dest_address_long='\x00\x13\xa2\x00@0\xbd@', dest_addr='a\xd4', command='MY', frame_id='A')
用dest_addr='a\xd4'
替换dest_addr='\xff\xfe
也可以。