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ą
ntptimei 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.