class RTC – orologio in tempo reale

La classe RTC controlla la periferica orologio in tempo reale integrata nell’MCU, che mantiene l’ora di sistema attraverso i reset.

Sulle OpenMV Cam STM32, machine.RTC e pyb.RTC fanno riferimento allo stesso oggetto sottostante.

Esempio di utilizzo:

import machine

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

Costruttori

class machine.RTC(id: int = 0)

Restituisce il singleton RTC. id è accettato per compatibilità tra le porte, ma solo 0 è valido sulle porte supportate da OpenMV (ogni cam ha un solo RTC).

I metodi seguenti sono raggruppati in base alle porte OpenMV che li espongono.

Metodi disponibili su tutte le porte OpenMV

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

Ottiene o imposta la data e l’ora correnti.

Senza argomenti, restituisce il valore corrente come una tupla a 8 elementi (year, month, day, weekday, hour, minute, second, subseconds).

Con un singolo argomento tupla a 8 elementi, imposta l’RTC a quel valore.

weekday è 1 = lunedì fino a 7 = domenica su STM32, e 0 = lunedì fino a 6 = domenica su mimxrt. subseconds è la parte frazionaria del secondo in unità di 1/256 di secondo su STM32; su mimxrt e alif è sempre 0.

solo STM32 + mimxrt

init(datetime: tuple) None

Inizializza l’RTC.

Sulla porta mimxrt (OpenMV Cam RT1062) datetime è obbligatorio e utilizza la tupla a 8 elementi (year, month, day, weekday, hour, minute, second, subseconds).

Sulle OpenMV cam STM32, init() non accetta argomenti: (ri)avvia la periferica RTC, lasciando invariata la data / ora corrente.

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

Ottiene o imposta l’offset di calibrazione dell’RTC (usato per compensare l’errore di frequenza del cristallo).

L’intervallo accettato e le unità di value sono specifici dell’hardware – il valore viene scritto direttamente nel registro di trim RTC dell’MCU. Vedere il relativo manuale di riferimento STM32 / i.MX RT per la codifica esatta.

solo STM32

info() int

Restituisce lo stato di avvio dell’RTC impacchettato come intero a 32 bit.

I 16 bit bassi indicano il numero di millisecondi che l’RTC ha impiegato per avviarsi all’ultimo boot. Il bit 0x10000 è impostato quando l’oscillatore LSE (low-speed external) si è guastato e l’RTC è ricaduto sull’LSI (RC interno). Il bit 0x20000 è impostato quando l’RTC è stato inizializzato ex novo all’avvio (anziché continuare dal precedente accensione).

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

Pianifica un interrupt di risveglio periodico.

timeout_ms è il periodo in millisecondi. L’RTC si attiva ogni timeout_ms e può risvegliare l’MCU da machine.lightsleep() / machine.deepsleep(). Passare None per disabilitare il timer di risveglio.

callback viene invocato dall’IRQ di risveglio; passare None per non installare alcun callback (il risveglio si attiverà comunque e risveglierà l’MCU).

solo mimxrt + alif

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

Arma l’allarme dell’RTC. id seleziona il canale dell’allarme (usare ALARM0). time è un numero intero di millisecondi nel futuro, oppure una tupla datetime. Passare repeat=True per ri-armarlo automaticamente dopo ogni attivazione (valido solo quando time è un conteggio in millisecondi).

Su alif è supportata solo la forma con conteggio in millisecondi.

solo mimxrt

alarm_left(alarm_id: int = 0, /) int

Restituisce il numero di millisecondi rimanenti prima che l’allarme identificato da alarm_id si attivi.

alarm_cancel(alarm_id: int = 0, /) None

Annulla un allarme precedentemente armato.

cancel(alarm_id: int = 0, /) None

Alias deprecato di alarm_cancel(), mantenuto per retrocompatibilità. Previsto per la rimozione in MicroPython 2.0.

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

Registra un callback per l’allarme dell’RTC.

trigger deve essere ALARM0 – l’unica sorgente IRQ supportata. handler viene invocato con l’istanza RTC quando l’allarme si attiva. hard=True registra un gestore di interrupt hardware (nessuna allocazione di heap nel callback). wake è accettato per compatibilità tra le porte ma non ha effetto.

Costanti

ALARM0: int

Identificatore per l’unico canale di allarme dell’RTC. Passare a alarm(), alarm_left(), alarm_cancel() e all’argomento trigger di irq(). Solo porta mimxrt.