使用 XBee Python 库的 dest_addr 的正确格式是什么?

问题描述 投票:1回答:1

我使用的是 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字节吗?

python pyserial xbee
1个回答
0
投票

我想你可能会遇到一些问题,因为你的...。dest_addr 是一个常规的 python 字符串,而不是一个字节字符串。 你应该试试下面的方法。

xbee.remote_at(dest_addr=b'\x40\xDD\x7D\xCD', command='0x17', parameter=b'\x04', frame_id='A')

0
投票

文件:

在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() 呼叫。


0
投票

答案如下:

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)
© www.soinside.com 2019 - 2024. All rights reserved.