třída RTC – hodiny reálného času

Třída RTC ovládá vestavěnou periferii hodin reálného času MCU, která udržuje skutečný čas i přes resety.

Na OpenMV Cam s STM32 odkazují machine.RTC a pyb.RTC na stejný podkladový objekt.

Příklad použití:

import machine

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

Konstruktory

class machine.RTC(id: int = 0)

Vrátí singleton RTC. id je akceptováno z důvodu kompatibility mezi porty, ale na portech podporovaných OpenMV je platná pouze hodnota 0 (každá kamera má jeden RTC).

Níže uvedené metody jsou seskupeny podle toho, které porty OpenMV je zpřístupňují.

Metody dostupné na všech portech OpenMV

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

Získá nebo nastaví aktuální datum a čas.

Bez argumentu vrátí aktuální hodnotu jako 8-tici (year, month, day, weekday, hour, minute, second, subseconds).

S jediným argumentem v podobě 8-tice nastaví RTC na tuto hodnotu.

weekday je 1 = pondělí až 7 = neděle na STM32 a 0 = pondělí až 6 = neděle na mimxrt. subseconds je zlomková část sekundy v jednotkách 1/256 sekundy na STM32; na mimxrt a alif je vždy 0.

pouze STM32 + mimxrt

init(datetime: tuple) None

Inicializuje RTC.

Na portu mimxrt (OpenMV Cam RT1062) je datetime povinné a používá 8-tici (year, month, day, weekday, hour, minute, second, subseconds).

Na OpenMV kamerách s STM32 nepřijímá init() žádný argument: (znovu) spustí periferii RTC a ponechá aktuální datum / čas beze změny.

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

Získá nebo nastaví kalibrační odchylku RTC (používá se ke kompenzaci chyby frekvence krystalu).

Akceptovaný rozsah a jednotky hodnoty value závisí na hardwaru – hodnota se zapisuje přímo do trimovacího registru RTC MCU. Přesné kódování najdete v příslušném referenčním manuálu STM32 / i.MX RT.

pouze STM32

info() int

Vrátí zabalený stav spuštění RTC jako 32bitové celé číslo.

Spodních 16 bitů udává počet milisekund, které RTC potřebovalo ke spuštění při posledním bootu. Bit 0x10000 je nastaven, když selhal oscilátor LSE (low-speed external) a RTC se vrátilo k LSI (interní RC). Bit 0x20000 je nastaven, když bylo RTC při bootu nově inicializováno (namísto pokračování z předchozího zapnutí).

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

Naplánuje periodické přerušení pro probuzení.

timeout_ms je perioda v milisekundách. RTC se spouští každých timeout_ms a může probudit MCU z machine.lightsleep() / machine.deepsleep(). Předáním None časovač probuzení zakážete.

callback je volán z IRQ probuzení; předáním None neinstalujete žádný callback (probuzení se přesto spustí a probudí MCU).

pouze mimxrt + alif

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

Nastaví alarm RTC. id vybírá kanál alarmu (použijte ALARM0). time je buď celočíselný počet milisekund v budoucnosti, nebo n-tice s datem a časem. Předáním repeat=True se alarm automaticky znovu nastaví po každém spuštění (platné pouze, když je time počet milisekund).

Na alif je podporována pouze forma s počtem milisekund.

pouze mimxrt

alarm_left(alarm_id: int = 0, /) int

Vrátí počet milisekund zbývajících do spuštění alarmu identifikovaného pomocí alarm_id.

alarm_cancel(alarm_id: int = 0, /) None

Zruší dříve nastavený alarm.

cancel(alarm_id: int = 0, /) None

Zastaralý alias pro alarm_cancel(), zachovaný kvůli zpětné kompatibilitě. Naplánováno k odstranění v MicroPython 2.0.

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

Zaregistruje callback pro alarm RTC.

trigger musí být ALARM0 – jediný podporovaný zdroj IRQ. handler je volán s instancí RTC, když se alarm spustí. hard=True registruje obslužnou rutinu hardwarového přerušení (žádná alokace haldy v callbacku). wake je akceptováno z důvodu kompatibility mezi porty, ale nemá žádný účinek.

Konstanty

ALARM0: int

Identifikátor jediného kanálu alarmu RTC. Předejte metodám alarm(), alarm_left(), alarm_cancel() a argumentu trigger metody irq(). Pouze port mimxrt.