3.28. Realtimeklok

De milliseconde-klok van de microcontroller – die achter time.ticks_ms() en het timersubsysteem zit – telt de verstreken tijd sinds het opstarten. De realtimeklok (RTC) is afzonderlijke hardware die de kloktijd bijhoudt – jaar, maand, dag, uur, minuut, seconde – en blijft draaien over resets en firmware-updates heen. Op cams met een backupbatterij die op de RTC-voeding is aangesloten, overleeft hij ook volledig stroomverlies.

De RTC is wat een ingezette camera gebruikt om:

  • Logvermeldingen en opgeslagen afbeeldingen van een echte datumstempel te voorzien.

  • Langlopende taken te doseren die over weken of maanden niet mogen afwijken.

3.28.1. De machine.RTC-klasse

machine.RTC is een singleton – één RTC per camera, geen id nodig:

from machine import RTC

rtc = RTC()

De huidige datum en tijd staan in datetime(). Het aanroepen zonder argumenten geeft een 8-tuple terug:

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

De velden zijn (year, month, day, weekday, hour, minute, second, subseconds). Om de klok in te stellen, geef je een 8-tuple van dezelfde vorm terug:

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

De camera blijft vanaf dat punt verder tellen. Bij een soft reset loopt de tijd ononderbroken door; bij een volledige stroomcyclus valt de RTC terug op de standaardtijd, tenzij een backupbatterij hem van stroom blijft voorzien.

3.28.2. Wanneer de RTC instellen

De RTC heeft geen ingebouwde manier om bij het opstarten te weten hoe laat het is. Drie veelvoorkomende patronen stellen hem in:

  • Vanuit een netwerktijdbron. Cams die op WiFi opstarten kunnen de tijd ophalen met ntptime en deze bij het opstarten naar de RTC schrijven.

  • Vanuit een host via USB. Een begeleidend script op een laptop pusht de huidige tijd wanneer de cam wordt aangesloten.

  • Vanuit een externe RTC-chip met backupbatterij. Een dedicated RTC-IC (vaak op een shield, met een eigen knoopcel) houdt de tijd op lange termijn beter bij dan de on-chip RTC en kan bij het opstarten worden uitgelezen om datetime() te initialiseren.

Sommige applicaties hoeven de RTC helemaal nooit in te stellen. Een lus met arbeidscyclus die “elke 60 seconden ontwaakt en een meting doet” geeft alleen om verstreken intervallen, die time.ticks_ms() en de getimede-slaappatronen in Energiebesparende en slaapmodi afhandelen zonder ooit de kloktijdwaarde van de RTC te raadplegen.