如何用Python的serial.write()发送十六进制帧AA68030100000000000000001655?
解决Python serial.write发送十六进制帧的问题
你当前的写法是将字符串字符以UTF-8编码发送,比如字符'A'对应的ASCII码是0x41,所以发送字符串"AA"会得到两个0x41字节,这和你需要的十六进制值0xAA不符。
正确的做法是先把十六进制字符串转换成字节对象,再通过serial.write()发送:
完整帧发送示例
self.raw = "AA68030100000000000000001655" # 将十六进制字符串转为字节对象 frame_bytes = bytes.fromhex(self.raw) # 发送字节帧 bus.write(frame_bytes)
单个十六进制字节发送示例
如果只需要发送0xAA,可以直接用:
# 方式1:直接使用字节字面量 bus.write(b'\xAA') # 方式2:通过fromhex转换 bus.write(bytes.fromhex("AA"))
bytes.fromhex()会自动将每两个连续字符解析为一个十六进制数,转换成对应的字节,完美匹配你需要的{AA}{68}...{55}发送格式。
内容的提问来源于stack exchange,提问作者Joan Guillo
相关产品推荐
相关产品推荐

