You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:57:02