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

如何修复树莓派4B GPS模块的UnicodeDecodeError错误

修复串口GPS模块的解码与解析错误问题

修复后的代码

import serial
import pynmea2
import datetime

ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=0.5)

while True:
    try:
        # 直接读取字节数据,避免自动解码报错
        line_bytes = ser.readline()
        # 解码时忽略无效字节,清理空白字符
        line = line_bytes.decode('utf-8', errors='ignore').strip()
        
        # 只处理标准NMEA语句(以$开头)
        if not line.startswith('$'):
            continue
            
        msg = pynmea2.parse(line)
        
        if msg.sentence_type == 'GGA':
            ts = datetime.datetime.now()
            lat = msg.latitude
            lon = msg.longitude
            alt = msg.altitude
            gps = f"{ts}|{lat}|{lon}|{alt}"
            print(gps)
    
    except serial.SerialException as e:
        print(f'设备错误: {e}')
        break
    # 捕获解码和解析错误,跳过无效行继续运行
    except (UnicodeDecodeError, pynmea2.ParseError):
        continue

修改说明

  • 替换TextIOWrapper:放弃自动解码的文本包装器,直接读取字节数据,手动解码时通过errors='ignore'忽略无效字节,避免解码崩溃。
  • 过滤无效数据:只处理以$开头的标准NMEA语句,直接跳过模块初始化阶段发送的乱码或非标准字节。
  • 补充异常捕获:新增对UnicodeDecodeError和pynmea2.ParseError的捕获,遇到无效数据时直接跳过当前行,程序不会中断,持续等待有效GPS数据。
  • 优化字符串拼接:用f-string替代传统拼接方式,代码更简洁易读。

内容的提问来源于stack exchange,提问作者Pedro Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:10:20