3.28. Ceas în timp real

Ceasul în milisecunde al microcontrolerului – cel din spatele lui time.ticks_ms() și al subsistemului de temporizare – numără timpul scurs de la pornire. Ceasul în timp real (RTC) este hardware separat care urmărește timpul de perete – an, lună, zi, oră, minut, secundă – și continuă să ruleze peste reseturi și actualizări de firmware. Pe camerele cu o baterie de backup conectată la alimentarea RTC-ului, acesta supraviețuiește și pierderii totale de alimentare.

RTC-ul este ceea ce folosește o cameră implementată pentru a:

  • Marca temporal intrările din jurnal și imaginile salvate cu o dată reală.

  • Ritma sarcinile de lungă durată care nu ar trebui să devieze pe parcursul săptămânilor sau lunilor.

3.28.1. Clasa machine.RTC

machine.RTC este un singleton – un singur RTC per cameră, fără id necesar:

from machine import RTC

rtc = RTC()

Data și ora curente se află în datetime(). Apelarea ei fără argumente returnează un tuplu cu 8 elemente:

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

Câmpurile sunt (year, month, day, weekday, hour, minute, second, subseconds). Pentru a seta ceasul, transmite înapoi un tuplu cu 8 elemente de aceeași formă:

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

Camera continuă să numere din acel punct. La un reset soft, timpul continuă neîntrerupt; la un ciclu complet de alimentare, RTC-ul revine la ora sa implicită, cu excepția cazului în care o baterie de backup îl menține alimentat.

3.28.2. Când să setezi RTC-ul

RTC-ul nu are nicio modalitate încorporată de a ști ce oră este la pornire. Trei modele comune îl setează:

  • Dintr-o sursă de timp de rețea. Camerele care pornesc pe WiFi pot prelua ora cu ntptime și o pot scrie în RTC la pornire.

  • De la o gazdă prin USB. Un script însoțitor de pe un laptop transmite ora curentă atunci când camera este conectată.

  • De la un cip RTC extern alimentat cu baterie. Un IC RTC dedicat (adesea pe un shield, cu propria baterie tip nasture) ține mai bine timpul pe termen lung decât RTC-ul de pe cip și poate fi citit la pornire pentru a inițializa datetime().

Unele aplicații nu au nevoie niciodată să seteze RTC-ul. O buclă cu ciclu de funcționare de tipul „trezește-te la fiecare 60 de secunde și fă o citire” se preocupă doar de intervalele scurse, pe care time.ticks_ms() și modelele de repaus temporizat din Moduri de consum redus și de repaus le gestionează fără a consulta vreodată valoarea de timp de perete a RTC-ului.