3.28. Zegar czasu rzeczywistego

Milisekundowy zegar mikrokontrolera – ten stojący za time.ticks_ms() i podsystemem liczników czasu – liczy czas, który upłynął od startu. Zegar czasu rzeczywistego (RTC) to osobny sprzęt, który śledzi czas zegara ściennego – rok, miesiąc, dzień, godzinę, minutę, sekundę – i działa nieprzerwanie przez resety oraz aktualizacje oprogramowania układowego. Na kamerach z baterią podtrzymującą podłączoną do zasilania RTC przetrwa on także całkowity zanik zasilania.

RTC jest tym, czego wdrożona kamera używa, aby:

  • Oznaczać znacznikami czasu wpisy w dzienniku i zapisane obrazy rzeczywistą datą.

  • Wyznaczać tempo długotrwałych zadań, które nie powinny dryfować przez tygodnie lub miesiące.

3.28.1. Klasa machine.RTC

machine.RTC jest singletonem – jeden RTC na kamerę, nie potrzeba identyfikatora:

from machine import RTC

rtc = RTC()

Bieżąca data i godzina znajdują się w datetime(). Wywołanie tej metody bez argumentów zwraca 8-elementową krotkę:

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

Pola to (year, month, day, weekday, hour, minute, second, subseconds). Aby ustawić zegar, przekaż z powrotem 8-elementową krotkę o tym samym kształcie:

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

Kamera kontynuuje odliczanie od tego punktu. Przy miękkim resecie czas jest kontynuowany bez przerwy; przy pełnym cyklu zasilania RTC wraca do swojego domyślnego czasu, chyba że bateria podtrzymująca utrzymuje jego zasilanie.

3.28.2. Kiedy ustawić RTC

RTC nie ma wbudowanego sposobu, aby wiedzieć, która jest godzina podczas startu. Ustawiają go trzy popularne wzorce:

  • Z sieciowego źródła czasu. Kamery, które uruchamiają się z WiFi, mogą pobrać czas za pomocą ntptime i zapisać go do RTC przy starcie.

  • Z hosta przez USB. Towarzyszący skrypt na laptopie przesyła bieżący czas, gdy kamera zostaje podłączona.

  • Z zewnętrznego układu RTC z baterią podtrzymującą. Dedykowany układ scalony RTC (często na nakładce, z własną baterią pastylkową) utrzymuje lepiej czas długoterminowy niż wbudowany RTC i może zostać odczytany przy starcie, aby zainicjować datetime().

Niektóre aplikacje nigdy nie muszą w ogóle ustawiać RTC. Pętla o cyklicznym współczynniku wypełnienia typu „wybudź się co 60 sekund i wykonaj odczyt” dba jedynie o interwały, które upłynęły, a tym zajmują się time.ticks_ms() i wzorce uśpienia z odmierzaniem czasu opisane w Tryby niskiego poboru mocy i uśpienia, bez nigdy odwoływania się do wartości zegara ściennego RTC.