xbee.remote_at 不工作
xbee.remote_at not working
我正在使用 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
不起作用?
- 为什么我没有得到任何输出?
- 我该如何解决这个问题?
非常感谢。
escaped=True
仅当您将 ATAP
设置为 2(转义 API 模式)而不是 1(API 模式)时才有效。
- 您确定您的模块已相互连接,并且您没有看到来自本地设备的
ATND
响应吗?确保您使用的是远程模块的地址。
remote_at 需要非零 frame_id 到 return 响应。 运行:
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='\xff\xfe
替换 dest_addr='a\xd4'
也有效。
我正在使用 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
不起作用? - 为什么我没有得到任何输出?
- 我该如何解决这个问题?
非常感谢。
escaped=True
仅当您将ATAP
设置为 2(转义 API 模式)而不是 1(API 模式)时才有效。- 您确定您的模块已相互连接,并且您没有看到来自本地设备的
ATND
响应吗?确保您使用的是远程模块的地址。
remote_at 需要非零 frame_id 到 return 响应。 运行:
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='\xff\xfe
替换 dest_addr='a\xd4'
也有效。