我使用的是 python-xbee 和Python 3.7来发送API命令,从Beaglebone Black上连接到UART1的XBee到远程XBee。两者都是第一版的专业型号。
我的远程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')
从 文件:
在xbee.ieee.XBee(或xbee.zigbee.ZigBee的XBee ZB设备)中可以找到所有支持的数据帧及其各自字段的列表,定义为api_responses。
也许您可以使用 help(xbee.ieee.XBee)
或 help(xbee.zigbee.ZigBee)
乃至 help(xbee.remote_at)
)的方法和参数列表。
我还看到一个 source_addr_long
在该页面上,也许您可以指定一个 dest_addr_long
为您 remote_at()
呼叫。
答案如下:
remote_xbee='40DD7DCD'
frame_id = b'\x01'
#For D0 Off
xbee.remote_at(dest_addr_long=remote_xbee,command='D0',parameter='\x04', frame_id=frame_id)