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)

我没有输出。

非常感谢。

  1. escaped=True 仅当您将 ATAP 设置为 2(转义 API 模式)而不是 1(API 模式)时才有效。
  2. 您确定您的模块已相互连接,并且您没有看到来自本地设备的 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' 也有效。