Python 3.13.2串口发送含十六进制值的字典命令问题
解决Python串口发送含ASCII扩展字符AT命令的问题
核心问题分析
你当前代码里的命令字典存储的是字符串,但串口通信要求发送字节流(bytes类型),字符串中的十六进制转义字符(比如\xC7)无法直接被串口正确解析,必须先转换为对应的字节数据。
正确实现方式
方式1:直接定义字节串(推荐)
把命令字典内容直接定义为bytes类型,精准控制每个字节的数值:
commands = { "cmd_a": b'AT\r', "cmd_b": b'AT+HTTPINIT\xAE\r', "cmd_c": b'AT+CGMM\xC7\xB4\r', } cmd_to_send = commands.get("cmd_c") if cmd_to_send: comport.write(cmd_to_send) # 直接发送字节流
方式2:字符串编码转换
如果坚持用字符串存储命令,需指定latin-1编码转换为字节(该编码能完整映射0-255的所有字节,不会丢失扩展ASCII字符信息):
commands = { "cmd_a": 'AT\r', "cmd_b": 'AT+HTTPINIT\xAE\r', "cmd_c": 'AT+CGMM\xC7\xB4\r', } cmd_to_send = commands.get("cmd_c") if cmd_to_send: comport.write(cmd_to_send.encode('latin-1'))
关键注意事项
- 串口通信底层基于字节传输,必须确保发送数据是
bytes类型,而非字符串。 - 避免使用UTF-8等编码,这类编码会把扩展ASCII字符转换成多字节数据,导致微控制器接收错误。
- 确认
comport是已正确初始化的串口对象(比如通过pyserial库的Serial类创建)。
内容的提问来源于stack exchange,提问作者BEsmart
相关产品推荐
相关产品推荐

