我正在使用python-xbee和Python 3.7将API命令从Beaglebone Black上连接到UART1的XBee发送到远程XBee。两者都是版本1 Pro型号。
我的远程XBee(我要向其发送命令的那个地址)具有以下地址:
SH=0013A200
SL=40DD7DCD
当我使用64位地址的低位提交命令时
xbee.remote_at(dest_addr='\x40\xDD\x7D\xCD', command='0x17', parameter=D0_LOW, frame_id='A')
我收到错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\xdd' in position 1: ordinal not in range(128)
我的代码如下:
from xbee import XBee from serial import Serial
PORT = '/dev/ttyO1' BAUD = 9600
Send 0x17 AT command with parameter 04 for low (off), 05 for high (on)
D0=4 Low
D0=5 High
D0_LOW = 4 D0_HIGH = 5
ser = Serial(PORT, BAUD)
xbee = XBee(ser)
xbee.remote_at(dest_addr='\x40\xDD\x7D\xCD', command='0x17', parameter=D0_LOW, frame_id='A')
Wait for and get the response
print(xbee.wait_read_frame())
ser.close()
我的问题是,当已知上下字节且未使用任何控制器时(仅点对点),dest_addr的正确格式是什么?
如果我更改地址以使用十六进制(例如\ 0x40 \ 0xDD \ 0x7D \ 0xCD,则错误消息为
The data provided for 'dest_addr' was not 2 bytes long
是否需要将地址格式化为ASCII 2字节?
我认为您可能会遇到问题,因为您的dest_addr
是常规的python字符串,而不是字节字符串。您应该尝试以下操作。
xbee.remote_at(dest_addr=b'\x40\xDD\x7D\xCD', command='0x17', parameter=b'\x04', frame_id='A')
[定义为api_responses的xbee.ieee.XBee(或XBee ZB设备的xbee.zigbee.ZigBee)中可以找到所有受支持的数据帧及其各自字段的列表。
也许您可以使用help(xbee.ieee.XBee)
或help(xbee.zigbee.ZigBee)
作为方法及其参数的列表。
我还在该页面上看到了一个source_addr_long
,因此也许您可以为dest_addr_long
呼叫指定一个remote_at()
。