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

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

我正在使用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字节?

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
投票

documentation

[定义为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()

© www.soinside.com 2019 - 2024. All rights reserved.