3.28. 实时时钟

微控制器的毫秒时钟——即 time.ticks_ms() 和定时器子系统背后的那个——记录的是自启动以来经过的时间。实时时钟(RTC)是独立的硬件,跟踪的是挂钟时间——年、月、日、时、分、秒——并在复位和固件更新之间持续运行。在将备用电池接到 RTC 电源的摄像头上,它还能在完全断电后继续工作。

已部署的摄像头使用 RTC 来:

  • 为日志条目和保存的图像打上真实日期的时间戳。

  • 为不应在数周或数月内发生漂移的长期运行任务进行节奏控制。

3.28.1. machine.RTC 类

machine.RTC 是单例——每个摄像头只有一个 RTC,无需 id:

from machine import RTC

rtc = RTC()

当前的日期和时间存放在 datetime() 中。不带参数调用它会返回一个 8 元组:

>>> rtc.datetime()
(2026, 5, 27, 4, 14, 30, 15, 0)

各字段为 (year, month, day, weekday, hour, minute, second, subseconds)。要设置时钟,则传回一个形状相同的 8 元组:

rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))

摄像头会从该时间点继续计时。软复位时时间不间断地持续;完全断电重启时,除非备用电池为 RTC 持续供电,否则它会回退到默认时间。

3.28.2. 何时设置 RTC

RTC 没有内置方式知道启动时是几点。有三种常见模式来设置它:

  • 从网络时间源设置。 能联上 WiFi 的摄像头可以用 ntptime 获取时间,并在启动时写入 RTC。

  • 从通过 USB 连接的主机设置。 笔记本电脑上的配套脚本会在摄像头插入时推送当前时间。

  • 从带电池备份的外部 RTC 芯片设置。 专用的 RTC IC(通常在扩展板上,自带纽扣电池)比片上 RTC 能更好地保持长期走时,并可在启动时读取以为 datetime() 提供初始值。

有些应用根本不需要设置 RTC。一个按占空比工作的"每 60 秒唤醒一次并读取一次数据"的循环只关心经过的时间间隔,而 time.ticks_ms()低功耗与睡眠模式 中的定时睡眠模式无需查询 RTC 的挂钟值即可处理这一点。