Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Micropython Xbee-如何获取Xbee序列号并将其转换为字符串?_Python_Python 3.x_Xbee_Micropython - Fatal编程技术网

Micropython Xbee-如何获取Xbee序列号并将其转换为字符串?

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

我正在使用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(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'