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

Python3新手求助:GPS传感器时间戳生成报AttributeError错误

解决GPS时间戳获取的AttributeError问题

嘿,这个错误其实很好定位——你的GPS模块还没成功获取到有效的UTC时间数据,所以gps.timestamp_utc是None对象,自然没法访问tm_mon这类属性啦。下面给你一步步拆解解决思路:

1. 先给代码加个安全检查,避免None报错

在访问timestamp_utc的属性之前,先判断它是否有效,这样能避免崩溃还能给出明确提示:

import time

def gpstsRead():
    # 先检查GPS是否返回了有效时间
    if not gps.timestamp_utc:
        return "GPS_NO_FIX"  # 返回标记,方便后续处理
    
    # 生成适配MySQL的DATETIME格式(YYYY-MM-DD HH:MM:SS)
    gps_ts = '{:04}-{:02}-{:02} {:02}:{:02}:{:02}'.format(
        gps.timestamp_utc.tm_year,
        gps.timestamp_utc.tm_mon,
        gps.timestamp_utc.tm_mday,
        gps.timestamp_utc.tm_hour,
        gps.timestamp_utc.tm_min,
        gps.timestamp_utc.tm_sec,
    )
    return gps_ts

2. 确保GPS模块完成信号定位

Adafruit GPS模块需要接收到足够的卫星信号才会返回有效时间,在调用gpstsRead()之前,一定要先等模块完成定位:

# 初始化GPS对象后,先等待定位
while not gps.has_fix:
    gps.update()
    print("等待GPS定位...")
    time.sleep(1)

# 定位成功后再获取时间戳
gps_ts = gpstsRead()

注:第一次启动GPS模块可能需要3-5分钟(甚至更久),如果在室内信号差的地方,可能需要移到开阔区域测试。

3. 验证GPS模块的基础连接

如果还是拿不到有效时间,先排查模块本身的连接是否正常:

  • 确认串口波特率、串口号和模块匹配(Adafruit GPS常用9600或115200波特率)
  • 用简单代码测试模块是否输出NMEA数据:
    while True:
        gps.update()
        # 打印原始NMEA语句,看模块是否在工作
        if gps.nmea_sentence:
            print(gps.nmea_sentence)
        time.sleep(0.5)
    

4. 适配MySQL存储的小优化

既然要存到MySQL,建议直接生成YYYY-MM-DD HH:MM:SS格式的字符串(上面代码已经改了),这样可以直接插入数据库的DATETIME类型字段。另外,数据库的插入时间戳可以让MySQL自动处理:

  • 给数据库表加一个insert_time字段,类型设为TIMESTAMP,默认值设为CURRENT_TIMESTAMP,这样插入数据时会自动记录当前时间,不用你手动生成。

内容的提问来源于stack exchange,提问作者Major Hooters

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:24:44