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.