3.28. Часы реального времени¶
Миллисекундные часы микроконтроллера – те, что стоят за time.ticks_ms() и подсистемой таймеров, – отсчитывают время, прошедшее с момента загрузки. Часы реального времени (RTC) – это отдельное оборудование, которое отслеживает астрономическое время – год, месяц, день, час, минуту, секунду – и продолжают работать между сбросами и обновлениями прошивки. На камерах с резервной батареей, подключённой к питанию RTC, они переживают и полную потерю питания.
Развёрнутая камера использует RTC для того, чтобы:
Помечать записи журнала и сохранённые изображения реальной датой.
Задавать ритм долго выполняющимся задачам, которые не должны уходить от графика на протяжении недель или месяцев.
3.28.1. Класс machine.RTC¶
machine.RTC – это синглтон: один RTC на камеру, id не нужен:
from machine import RTC
rtc = RTC()
Текущие дата и время находятся в datetime(). Вызов без аргументов возвращает кортеж из 8 элементов:
>>> rtc.datetime()
(2026, 5, 27, 4, 14, 30, 15, 0)
Поля – это (year, month, day, weekday, hour, minute, second, subseconds). Чтобы установить часы, передайте обратно кортеж из 8 элементов той же формы:
rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))
Камера продолжает отсчёт с этой точки. При программном сбросе время продолжается непрерывно; при полном цикле питания RTC возвращается к своему времени по умолчанию, если резервная батарея не поддерживает его питание.
3.28.2. Когда устанавливать RTC¶
У RTC нет встроенного способа узнать, который час, при загрузке. Его устанавливают по трём распространённым шаблонам:
Из сетевого источника времени. Камеры, поднимающиеся в WiFi, могут получить время с помощью
ntptimeи записать его в RTC при запуске.С хоста по USB. Сопутствующий скрипт на ноутбуке передаёт текущее время, когда камера подключена.
С внешней микросхемы RTC с резервной батареей. Выделенная микросхема RTC (часто на шилде, со своей таблеточной батарейкой) держит долговременное время лучше, чем встроенный RTC, и может быть прочитана при загрузке для инициализации
datetime().
Некоторым приложениям вообще никогда не нужно устанавливать RTC. Цикл с рабочим циклом «просыпаться каждые 60 секунд и снимать показание» заботится только о прошедших интервалах, которые time.ticks_ms() и шаблоны таймированного сна в Режимы пониженного энергопотребления и сна обрабатывают, ни разу не обращаясь к астрономическому значению RTC.