3.28. リアルタイムクロック

マイクロコントローラーのミリ秒クロック(time.ticks_ms() やタイマーサブシステムの背後にあるもの)は、ブートからの経過時間をカウントします。リアルタイムクロック(RTC)は別のハードウェアで、実時間(年、月、日、時、分、秒)を追跡し、リセットやファームウェア更新をまたいで動き続けます。RTC電源にバックアップバッテリーが配線されたカメラでは、完全な電源喪失も乗り越えて動作し続けます。

RTCは、配備されたカメラが次の用途に使います。

  • ログエントリや保存した画像に、実際の日付のタイムスタンプを付ける。

  • 数週間から数か月にわたってドリフトすべきでない長時間タスクのペースを保つ。

3.28.1. machine.RTCクラス

machine.RTC はシングルトンです。カメラごとにRTCは1つで、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には、ブート時に現在時刻を知るための組み込みの手段がありません。設定する一般的なパターンは3つあります。

  • ネットワークの時刻ソースから。 WiFiで起動するカメラは、ntptime で時刻を取得し、起動時にRTCへ書き込めます。

  • USB経由でホストから。 ラップトップ上のコンパニオンスクリプトが、カメラを接続したときに現在時刻をプッシュします。

  • バッテリーバックアップ付きの外部RTCチップから。 専用のRTC IC(多くの場合、独自のコイン電池を備えたシールド上にあります)は、オンチップのRTCより長期的に正確な時刻を保ち、ブート時に読み取って datetime() の初期値を与えられます。

アプリケーションによっては、RTCを設定する必要がまったくないものもあります。「60秒ごとに復帰して測定する」というデューティサイクル化されたループは経過間隔だけを気にしますが、これは time.ticks_ms()低消費電力モードとスリープモード のタイマースリープパターンが、RTCの実時間値を一切参照することなく処理します。