clasa RTC – ceas în timp real

Clasa RTC controlează periferiul de ceas în timp real integrat pe cip al MCU-ului, care păstrează ora reală peste reseturi.

Pe camerele OpenMV Cam cu STM32, machine.RTC și pyb.RTC se referă la același obiect de bază.

Exemplu de utilizare:

import machine

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

Constructori

class machine.RTC(id: int = 0)

Returnează singletonul RTC. id este acceptat pentru compatibilitate între porturi, dar numai 0 este valid pe porturile acceptate de OpenMV (fiecare cameră are un singur RTC).

Metodele de mai jos sunt grupate în funcție de porturile OpenMV care le expun.

Metode disponibile pe toate porturile OpenMV

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

Obține sau setează data și ora curentă.

Fără argument, returnează valoarea curentă sub forma unui tuplu cu 8 elemente (year, month, day, weekday, hour, minute, second, subseconds).

Cu un singur argument de tip tuplu cu 8 elemente, setează RTC-ul la acea valoare.

weekday este 1 = luni până la 7 = duminică pe STM32 și 0 = luni până la 6 = duminică pe mimxrt. subseconds este partea fracționară a secundei, în unități de 1/256 de secundă pe STM32; pe mimxrt și alif este întotdeauna 0.

doar STM32 + mimxrt

init(datetime: tuple) None

Inițializează RTC-ul.

Pe portul mimxrt (OpenMV Cam RT1062), datetime este obligatoriu și folosește tuplul cu 8 elemente (year, month, day, weekday, hour, minute, second, subseconds).

Pe camerele OpenMV cu STM32, init() nu acceptă niciun argument: (re)pornește periferiul RTC, lăsând neschimbată data / ora curentă.

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

Obține sau setează offsetul de calibrare al RTC-ului (folosit pentru a compensa eroarea de frecvență a cristalului).

Intervalul acceptat și unitățile lui value sunt specifice hardware-ului – valoarea este scrisă direct în registrul de trim al RTC-ului din MCU. Consultați manualul de referință STM32 / i.MX RT relevant pentru codificarea exactă.

doar STM32

info() int

Returnează starea de pornire a RTC-ului împachetată ca un întreg pe 32 de biți.

Cei 16 biți inferiori indică numărul de milisecunde de care a avut nevoie RTC-ul pentru a porni la cea mai recentă inițializare. Bitul 0x10000 este setat atunci când oscilatorul LSE (low-speed external) a eșuat și RTC-ul a recurs la LSI (RC intern). Bitul 0x20000 este setat atunci când RTC-ul a fost inițializat din nou la pornire (în loc să continue de la pornirea anterioară).

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

Programează o întrerupere periodică de trezire.

timeout_ms este perioada în milisecunde. RTC-ul se declanșează la fiecare timeout_ms și poate trezi MCU-ul din machine.lightsleep() / machine.deepsleep(). Transmiteți None pentru a dezactiva temporizatorul de trezire.

callback este invocat din IRQ-ul de trezire; transmiteți None pentru a nu instala niciun callback (trezirea se va declanșa totuși și va trezi MCU-ul).

doar mimxrt + alif

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

Armează alarma RTC. id selectează canalul de alarmă (folosiți ALARM0). time este fie un număr întreg de milisecunde în viitor, fie un tuplu datetime. Transmiteți repeat=True pentru a o re-arma automat după fiecare declanșare (valid doar atunci când time este un număr de milisecunde).

Pe alif este acceptată doar forma cu număr de milisecunde.

doar mimxrt

alarm_left(alarm_id: int = 0, /) int

Returnează numărul de milisecunde rămase până când se declanșează alarma identificată prin alarm_id.

alarm_cancel(alarm_id: int = 0, /) None

Anulează o alarmă armată anterior.

cancel(alarm_id: int = 0, /) None

Alias depreciat pentru alarm_cancel(), păstrat pentru compatibilitate retroactivă. Programat pentru eliminare în MicroPython 2.0.

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

Înregistrează un callback pentru alarma RTC.

trigger trebuie să fie ALARM0 – singura sursă de IRQ acceptată. handler este invocat cu instanța RTC atunci când se declanșează alarma. hard=True înregistrează un gestionar de întrerupere hardware (fără alocare pe heap în callback). wake este acceptat pentru compatibilitate între porturi, dar nu are niciun efect.

Constante

ALARM0: int

Identificator pentru singurul canal de alarmă al RTC-ului. Se transmite către alarm(), alarm_left(), alarm_cancel() și argumentul trigger al irq(). Doar portul mimxrt.