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

Adafruit GPS breakout输出非NMEA编码字节的Python解码问询

解决Adafruit GPS模块串口读取乱码问题

问题分析

你读取到的乱码字节流,核心原因大概率是串口参数不匹配或读取逻辑适配问题:虽然你确认波特率为9600,但Adafruit部分GPS模块默认波特率是115200而非9600;另外,串口数据位、停止位、奇偶校验的配置如果和模块不一致,也会导致输出乱码。同时readline()依赖换行符,若GPS输出的终止符不是预期的\n,也会造成不完整读取引发乱码。

解决方案

1. 匹配GPS模块的标准串口参数

Adafruit GPS模块通用默认参数:

  • 波特率:115200(部分老型号为9600)
  • 数据位:8
  • 停止位:1
  • 奇偶校验:无

修改代码的串口初始化逻辑,优先尝试115200波特率:

import serial

n = 0
# 明确配置所有串口参数,匹配GPS模块默认值
ser = serial.Serial(
    port='COM2',
    baudrate=115200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_1,
    bytesize=serial.EIGHTBITS,
    timeout=0.5
)

while n < 10:
    data = ser.readline()
    n += 1
    print(n)
    # 用ASCII解码,忽略无效字符(NMEA协议为ASCII编码)
    try:
        decoded_data = data.decode('ascii', errors='ignore')
        print(decoded_data, flush=True)
    except Exception as e:
        print(f"解码错误: {e}", flush=True)

ser.close()

2. 硬件与连接验证

  • 检查GPS模块供电是否稳定,供电不足会直接导致输出乱码
  • 用串口调试工具(如PuTTY、串口助手)直接连接COM2,设置对应波特率,查看是否能输出$GPGGA等标准NMEA语句:
    • 若调试工具也乱码,说明波特率或硬件连接有问题
    • 若调试工具正常,再回到代码排查读取逻辑

3. 优化读取逻辑适配NMEA终止符

NMEA协议的语句终止符通常是\r\n,可替换readline()为read_until()指定终止符,避免不完整读取:

# 替换原readline语句,指定NMEA标准终止符
data = ser.read_until(b'\r\n')

关键提示

正常解码后应该能看到类似$GPGGA,123519,4807.038,N,00114.323,W,1,08,0.9,545.4,M,46.9,M,,*47的标准NMEA语句。若仍乱码,可通过AT指令修改GPS模块的波特率,使其与代码配置一致。

内容的提问来源于stack exchange,提问作者Stuart Stahl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:32:21