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 的牆上時鐘值。