class RTC – часы реального времени

Класс RTC управляет встроенным периферийным устройством часов реального времени микроконтроллера, которое сохраняет астрономическое время между сбросами.

На STM32 OpenMV Cam machine.RTC и pyb.RTC ссылаются на один и тот же базовый объект.

Пример использования:

import machine

rtc = machine.RTC()
rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))
print(rtc.datetime())

Конструкторы

class machine.RTC(id: int = 0)

Возвращает синглтон RTC. id принимается для совместимости между портами, но на поддерживаемых OpenMV портах допустимо только значение 0 (каждая камера имеет один RTC).

Приведённые ниже методы сгруппированы по тому, какие порты OpenMV их предоставляют.

Методы, доступные на всех портах OpenMV

datetime(datetimetuple: tuple | None = None, /) tuple | None

Получить или установить текущую дату и время.

Без аргумента возвращает текущее значение в виде кортежа из 8 элементов (year, month, day, weekday, hour, minute, second, subseconds).

С одним аргументом - кортежем из 8 элементов - устанавливает RTC в это значение.

weekday - это 1 = понедельник по 7 = воскресенье на STM32 и 0 = понедельник по 6 = воскресенье на mimxrt. subseconds - дробная часть секунды в единицах 1/256 секунды на STM32; на mimxrt и alif она всегда равна 0.

только STM32 + mimxrt

init(datetime: tuple) None

Инициализировать RTC.

На порту mimxrt (OpenMV Cam RT1062) datetime обязателен и использует кортеж из 8 элементов (year, month, day, weekday, hour, minute, second, subseconds).

На STM32 OpenMV Cam init() не принимает аргументов: он (повторно) запускает периферийное устройство RTC, оставляя текущую дату / время без изменений.

calibration(value: int | None = None, /) int | None

Получить или установить смещение калибровки RTC (используется для компенсации ошибки частоты кварца).

Допустимый диапазон и единицы измерения value зависят от оборудования – значение записывается напрямую в регистр подстройки RTC микроконтроллера. Точную кодировку см. в соответствующем справочном руководстве STM32 / i.MX RT.

только STM32

info() int

Возвращает упакованный статус запуска RTC в виде 32-битного целого числа.

Младшие 16 бит дают количество миллисекунд, которое потребовалось RTC для запуска при последней загрузке. Бит 0x10000 устанавливается, когда генератор LSE (внешний низкоскоростной) дал сбой и RTC переключился на LSI (внутренний RC). Бит 0x20000 устанавливается, когда RTC был заново инициализирован при загрузке (а не продолжил работу с предыдущего включения питания).

wakeup(timeout_ms: int | None, callback: Callable[[RTC], None] | None = None, /) None

Запланировать периодическое прерывание пробуждения.

timeout_ms - период в миллисекундах. RTC срабатывает каждые timeout_ms и может пробудить микроконтроллер из machine.lightsleep() / machine.deepsleep(). Передайте None, чтобы отключить таймер пробуждения.

callback вызывается из IRQ пробуждения; передайте None, чтобы не устанавливать функцию обратного вызова (пробуждение всё равно сработает и разбудит микроконтроллер).

только mimxrt + alif

alarm(id: int, time: int | tuple, *, repeat: bool = False) None

Взвести будильник RTC. id выбирает канал будильника (используйте ALARM0). time - это либо целое число миллисекунд в будущем, либо кортеж datetime. Передайте repeat=True для автоматического повторного взведения после каждого срабатывания (допустимо только когда time - количество миллисекунд).

На alif поддерживается только форма с количеством миллисекунд.

только mimxrt

alarm_left(alarm_id: int = 0, /) int

Возвращает количество миллисекунд, оставшихся до срабатывания будильника, идентифицируемого alarm_id.

alarm_cancel(alarm_id: int = 0, /) None

Отменить ранее взведённый будильник.

cancel(alarm_id: int = 0, /) None

Устаревший псевдоним alarm_cancel(), сохранён для обратной совместимости. Запланирован к удалению в MicroPython 2.0.

irq(*, trigger: int = ALARM0, handler: Callable[[RTC], None] | None = None, wake: int = 0, hard: bool = False) None

Зарегистрировать функцию обратного вызова для будильника RTC.

trigger должен быть ALARM0 – единственный поддерживаемый источник IRQ. handler вызывается с экземпляром RTC при срабатывании будильника. hard=True регистрирует обработчик аппаратного прерывания (без выделения памяти в куче в функции обратного вызова). wake принимается для совместимости между портами, но не имеет эффекта.

Константы

ALARM0: int

Идентификатор единственного канала будильника RTC. Передаётся в alarm(), alarm_left(), alarm_cancel() и аргумент trigger метода irq(). Только порт mimxrt.