xbee.remote_at无效

时间:2016-09-06 04:41:44

标签: python serial-port xbee zigbee

我正在使用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没有工作?
  • 为什么我没有得到任何输出?
  • 我该如何解决问题?

非常感谢。

2 个答案:

答案 0 :(得分:0)

    仅当escaped=True设置为2(转义API模式)而不是1(API模式)时,才会
  1. ATAP
  2. 您确定自己的模块是否相互加入,并且您没有看到本地设备的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也可以。