class RTC -- リアルタイムクロック

RTC クラスは、MCUのオンチップのリアルタイムクロックペリフェラルを制御します。これはリセットをまたいで実時刻を保持します。

STM32のOpenMV Camでは、machine.RTCpyb.RTC は同じ基盤オブジェクトを参照します。

使用例:

import machine

rtc = machine.RTC()
rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))
print(rtc.datetime())

コンストラクタ

class machine.RTC(id: int = 0)

RTC シングルトンを返します。id はクロスポート互換性のために受け付けられますが、OpenMVが対応するポートでは 0 のみが有効です(各カメラには1つのRTCがあります)。

以下のメソッドは、どのOpenMVポートが公開しているかによってグループ化されています。

すべてのOpenMVポートで利用可能なメソッド

datetime(datetimetuple: tuple | None = None, /) tuple | None

現在の日付と時刻を取得または設定します。

引数なしの場合、現在の値を8要素のタプル (year, month, day, weekday, hour, minute, second, subseconds) として返します。

8要素のタプルを1つの引数として指定すると、RTCをその値に設定します。

weekday はSTM32では1 = 月曜日から7 = 日曜日まで、mimxrtでは0 = 月曜日から6 = 日曜日までです。subseconds はSTM32では1秒の小数部分で、単位は1/256秒です。mimxrtおよびalifでは常に 0 です。

STM32 + mimxrt のみ

init(datetime: tuple) None

RTCを初期化します。

mimxrtポート(OpenMV Cam RT1062)では datetime が必須で、8要素のタプル (year, month, day, weekday, hour, minute, second, subseconds) を使用します。

STM32のOpenMV Camでは init() は引数を取りません。RTCペリフェラルを(再)起動し、現在の日付/時刻はそのまま維持します。

calibration(value: int | None = None, /) int | None

RTCのキャリブレーションオフセット(水晶振動子の周波数誤差を補正するために使用)を取得または設定します。

value の許容範囲と単位はハードウェア固有です。値はMCUのRTCトリムレジスタに直接書き込まれます。正確なエンコーディングについては、該当するSTM32 / i.MX RTのリファレンスマニュアルを参照してください。

STM32 のみ

info() int

パックされたRTC起動ステータスを32ビット整数として返します。

下位16ビットは、直近のブート時にRTCの起動にかかったミリ秒数を示します。ビット0x10000は、LSE(低速外部)発振器が故障し、RTCがLSI(内部RC)にフォールバックしたときに設定されます。ビット0x20000は、(前回の電源投入から継続するのではなく)ブート時にRTCが新たに初期化されたときに設定されます。

wakeup(timeout_ms: int | None, callback: Callable[[RTC], None] | None = None, /) None

定期的なウェイクアップ割り込みをスケジュールします。

timeout_ms はミリ秒単位の周期です。RTCは timeout_ms ごとに発火し、machine.lightsleep() / machine.deepsleep() からMCUを起こすことができます。ウェイクアップタイマーを無効にするには None を渡します。

callback はウェイクアップIRQから呼び出されます。コールバックをインストールしない場合は None を渡します(ウェイクアップは引き続き発火し、MCUを起こします)。

mimxrt + alif のみ

alarm(id: int, time: int | tuple, *, repeat: bool = False) None

RTCアラームをアームします。id はアラームチャンネルを選択します(ALARM0 を使用します)。time は将来のミリ秒数を表す整数、またはdatetimeタプルのいずれかです。各発火後に自動的に再アームするには repeat=True を渡します(time がミリ秒のカウントである場合にのみ有効です)。

alifではミリ秒カウント形式のみ対応しています。

mimxrt のみ

alarm_left(alarm_id: int = 0, /) int

alarm_id で識別されるアラームが発火するまでの残りミリ秒数を返します。

alarm_cancel(alarm_id: int = 0, /) None

以前にアームしたアラームをキャンセルします。

cancel(alarm_id: int = 0, /) None

alarm_cancel() の非推奨のエイリアスで、後方互換性のために残されています。MicroPython 2.0での削除が予定されています。

irq(*, trigger: int = ALARM0, handler: Callable[[RTC], None] | None = None, wake: int = 0, hard: bool = False) None

RTCアラームのコールバックを登録します。

triggerALARM0 でなければなりません。これが対応している唯一のIRQソースです。handler はアラームが発火したときに RTC インスタンスを引数として呼び出されます。hard=True はハード割り込みハンドラを登録します(コールバック内でのヒープ割り当てなし)。wake はクロスポート互換性のために受け付けられますが、効果はありません。

定数

ALARM0: int

RTCの単一アラームチャンネルの識別子。alarm()alarm_left()alarm_cancel()、および irq()trigger 引数に渡します。mimxrtポートのみ。