ESP-12F使用MicroPython设置RTC时钟后时间偏多约19小时问题咨询
问题核心原因
1. RTC入参顺序不匹配
ESP系列的MicroPython固件中,machine.RTC().datetime()方法的入参元组存在两种常见格式,你当前传入的参数顺序和固件要求的格式不一致,会导致时间参数错位:
- 官方标准ESP端口格式要求:
(年, 月, 日, 星期, 时, 分, 秒, 亚秒) - 部分旧版/定制固件格式要求:
(年, 月, 日, 时, 分, 秒, 星期, 年积日)
你构造的时间元组(2021, 11, 21, 23, 42, 0, 6, 325)是按第二种格式编写的,如果你的固件是第一种标准格式,会把你填写的小时值23错误识别为星期参数,后续的分、秒等参数全部错位,最终计算出错误的时间。
2. 时区转换偏移
utime.localtime()方法默认会将RTC存储的UTC时间转换为本地时区时间,如果你的固件默认配置了非零时区偏移,就会出现你看到的19小时左右的时间差。
解决步骤
先确认RTC本身存储的时间是否正确
设置完时间后直接执行print(machine.RTC().datetime())读取RTC原始值,如果输出和你预设的时间一致,说明RTC设置本身没问题,是utime.localtime()的时区转换导致的偏差。这种情况你可以直接读取RTC原始值使用,或者将固件默认时区修改为UTC+0即可消除偏移。如果RTC原始值就存在错误,调整入参顺序适配你的固件
如果你使用的是官方标准ESP固件,将设置代码调整为如下格式即可:
import utime import machine # 元组顺序:年、月、日、星期、时、分、秒、亚秒,星期填0-6即可,亚秒无特殊需求填0 rtc_time = (2021, 11, 21, 6, 23, 42, 0, 0) machine.RTC().datetime(rtc_time) # 验证结果 print(machine.RTC().datetime())
内容的提问来源于stack exchange,提问作者akoel
相关产品推荐
相关产品推荐

