Micropython Xbee-如何获取Xbee序列号并将其转换为字符串?
我正在使用Xbee3 pro和micropython。我正在尝试将设备序列号转换为字符串。这是代码Micropython Xbee-如何获取Xbee序列号并将其转换为字符串?,python,python-3.x,xbee,micropython,Python,Python 3.x,Xbee,Micropython,我正在使用Xbee3 pro和micropython。我正在尝试将设备序列号转换为字符串。这是代码 import xbee from time import sleep serial = xbee.atcmd("SL") serial = serial.decode("utf-8") while True: print("Sending broadcast data >> %s" % serial) try: xbee.transmit(xbe
import xbee
from time import sleep
serial = xbee.atcmd("SL")
serial = serial.decode("utf-8")
while True:
print("Sending broadcast data >> %s" % serial)
try:
xbee.transmit(xbee.ADDR_BROADCAST, serial)
print("Data sent successfully")
except Exception as e:
print("Transmit failure: %s" % str(e))
sleep(2)
数据传输成功,但我只得到三个难看的字符,无法读取
结果:
serial = xbee.atcmd("SL")
print(serial)
是
我真的只需要将'A\x92\xa4\xbf'转换为4192A4BF。我相信这应该可以:
'.join('{:02x}).xbee.atcmd(“SL”)中x的格式(x).upper())
您正在获取字节数组的每个字节(
表示…
)并将其格式化为两个大写十六进制字符('{:02x}.format().upper()
),然后将它们连接在一起,中间没有任何内容('.join()
)。我相信这应该可以:
'.join('{:02x}).xbee.atcmd(“SL”)中x的格式(x).upper())
您正在获取字节数组的每个字节(
代表x in…
)并将其格式化为两个大写十六进制字符('{:02x}.format().upper()
),然后将它们连接在一起,中间没有任何内容('.join()
)。盯着这些字符看了一段时间后,我意识到\x是一个分隔符。如果只是删除\x,则最终会得到A92a4bf,这是用A替换41时的序列号。是否存在大写字母a=41的协议?可能与41是“a”的十六进制表示有关。实际结果可能是'\x41\x92\xa4\xbf'
,程序只是将第一个十六进制代码转换为'A'
,因为'\x'
是十六进制指示符。或者类似的情况……如果您打开Digi为配置Xbee而分发的XTCU问题,则低序列号为:4192A4BF@GeorgeBou我不确定您是否正确理解Python字符串-\x
是Python在打印字符串时如何在字符串中表示不可打印值的一部分,字符串中没有文本\
或x
字符。OP的错误是首先尝试将其解码为字符串-在盯着字符看了一段时间后,我意识到\x是一个分隔符。如果只是删除\x,则最终会得到A92a4bf,这是用A替换41时的序列号。是否存在大写字母a=41的协议?可能与41是“a”的十六进制表示有关。实际结果可能是'\x41\x92\xa4\xbf'
,程序只是将第一个十六进制代码转换为'A'
,因为'\x'
是十六进制指示符。或者类似的情况……如果您打开Digi为配置Xbee而分发的XTCU问题,则低序列号为:4192A4BF@GeorgeBou我不确定您是否正确理解Python字符串-\x
是Python在打印字符串时如何在字符串中表示不可打印值的一部分,字符串中没有文本\
或x
字符。OP的错误是首先尝试将其解码为字符串——看,是的,这看起来不错,不依赖于任何其他库。可能值得一提的是,询问者不应该试图按照其原始代码对UTF-8的响应进行解码,它不是UTF-8编码的字符串,它只是一个由四个字节值组成的序列。我应该对此发表评论,但选择直接获取xbee.atcmd()
的返回值。我猜想某些ATSL
值会触发异常,因为它们不是有效的UTF-8序列。(感谢您在我的回答中修复了代码。)是的,这看起来不错,不依赖于任何其他库。可能值得一提的是,询问者不应该试图按照其原始代码对UTF-8的响应进行解码,它不是UTF-8编码的字符串,它只是一个由四个字节值组成的序列。我应该对此发表评论,但选择直接获取xbee.atcmd()
的返回值。我猜想某些ATSL
值会触发异常,因为它们不是有效的UTF-8序列。(感谢您在我的回答中修改了代码。)
'A\x92\xa4\xbf'