从Arduino转Python:十六进制地址常量的正确声明方法求助
Python中十六进制常量的正确声明方式
你在Python里错误地将十六进制地址声明为了列表类型,这和Arduino里#define定义的单值常量逻辑完全不同——串口发送时会把列表当作多元素序列处理,自然会导致数据错误。
正确的声明方式是直接将其定义为单个整数(Python中0x开头的写法本身就表示十六进制整数,和C/Arduino里的逻辑一致):
adrram = 0x00 adrtemp = 0x03
如果你的串口发送函数(比如pySerial的write方法)需要字节类型的数据,可以把整数转换为单字节:
# 方式1:用bytes()转换 ser.write(bytes([adrram])) # 方式2:用to_bytes()指定字节序 ser.write(adrram.to_bytes(1, byteorder='big'))
举个完整的串口发送示例:
import serial # 初始化串口(根据你的树莓派串口端口调整) ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1) # 声明十六进制地址常量 adrram = 0x00 adrtemp = 0x03 # 发送adrram对应的字节 ser.write(bytes([adrram])) ser.close()
内容的提问来源于stack exchange,提问作者Cezar-Bogdan Rusu
相关产品推荐
相关产品推荐

