3.28. Orologio in tempo reale

Il clock al millisecondo del microcontrollore – quello dietro a time.ticks_ms() e al sottosistema dei timer – conta il tempo trascorso dall’avvio. L”orologio in tempo reale (RTC) è un hardware separato che tiene traccia dell’ora del calendario – anno, mese, giorno, ora, minuto, secondo – e continua a funzionare attraverso reset e aggiornamenti del firmware. Sulle cam con una batteria di backup cablata all’alimentazione dell’RTC, sopravvive anche a una perdita totale di alimentazione.

L’RTC è ciò che una camera installata sul campo usa per:

  • Marcare temporalmente le voci di log e le immagini salvate con una data reale.

  • Cadenzare attività a lunga durata che non dovrebbero andare alla deriva nell’arco di settimane o mesi.

3.28.1. La classe machine.RTC

machine.RTC è un singleton – un solo RTC per camera, senza bisogno di id:

from machine import RTC

rtc = RTC()

La data e l’ora correnti risiedono in datetime(). Chiamandolo senza argomenti restituisce una tupla di 8 elementi:

>>> rtc.datetime()
(2026, 5, 27, 4, 14, 30, 15, 0)

I campi sono (year, month, day, weekday, hour, minute, second, subseconds). Per impostare l’orologio, passa una tupla di 8 elementi della stessa forma:

rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))

La camera continua a contare da quel punto. A un reset soft il tempo prosegue senza interruzioni; a un ciclo completo di alimentazione l’RTC torna al suo orario predefinito a meno che una batteria di backup non lo mantenga alimentato.

3.28.2. Quando impostare l’RTC

L’RTC non ha alcun modo integrato per sapere che ora è all’avvio. Tre schemi comuni lo impostano:

  • Da una sorgente temporale di rete. Le cam che si avviano collegate al WiFi possono recuperare l’ora con ntptime e scriverla nell’RTC all’avvio.

  • Da un host tramite USB. Uno script companion su un laptop invia l’ora corrente quando la cam viene collegata.

  • Da un chip RTC esterno con batteria di backup. Un IC RTC dedicato (spesso su uno shield, con la propria pila a bottone) mantiene il tempo a lungo termine meglio dell’RTC integrato nel chip e può essere letto all’avvio per inizializzare datetime().

Alcune applicazioni non hanno mai bisogno di impostare l’RTC. Un ciclo a ciclo di lavoro fisso del tipo «risvegliati ogni 60 secondi ed effettua una lettura» si preoccupa solo degli intervalli trascorsi, di cui si occupano time.ticks_ms() e gli schemi di sospensione temporizzata in Modalità a basso consumo e di sospensione senza mai consultare il valore dell’ora del calendario dell’RTC.