classe RTC – relógio de tempo real

A classe RTC controla o periférico de relógio de tempo real integrado no MCU, que mantém a hora do relógio de parede entre reinicializações.

Nos OpenMV Cams STM32, machine.RTC e pyb.RTC referem-se ao mesmo objeto subjacente.

Exemplo de utilização:

import machine

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

Construtores

class machine.RTC(id: int = 0)

Devolve o singleton RTC. id é aceite para compatibilidade entre portos, mas apenas 0 é válido nos portos suportados pelo OpenMV (cada câmara tem um RTC).

Os métodos abaixo estão agrupados consoante os portos OpenMV que os expõem.

Métodos disponíveis em todos os portos OpenMV

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

Obtém ou define a data e hora atuais.

Sem argumento, devolve o valor atual como um tuplo de 8 elementos (year, month, day, weekday, hour, minute, second, subseconds).

Com um único argumento de tuplo de 8 elementos, define o RTC para esse valor.

weekday é 1 = segunda-feira a 7 = domingo no STM32, e 0 = segunda-feira a 6 = domingo no mimxrt. subseconds é a parte fracionária do segundo em unidades de 1/256 de segundo no STM32; no mimxrt e alif é sempre 0.

STM32 + mimxrt apenas

init(datetime: tuple) None

Inicializa o RTC.

No porto mimxrt (OpenMV Cam RT1062), datetime é obrigatório e utiliza o tuplo de 8 elementos (year, month, day, weekday, hour, minute, second, subseconds).

Nos OpenMV Cams STM32, init() não aceita argumento: (re)inicia o periférico RTC, deixando a data/hora atual intacta.

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

Obtém ou define o desvio de calibração do RTC (utilizado para compensar o erro de frequência do cristal).

O intervalo aceite e as unidades de value são específicos do hardware – o valor é escrito diretamente no registo de ajuste RTC do MCU. Consulte o manual de referência do STM32 / i.MX RT relevante para a codificação exata.

STM32 apenas

info() int

Devolve o estado de arranque do RTC compactado como um inteiro de 32 bits.

Os 16 bits inferiores indicam o número de milissegundos que o RTC demorou a arrancar no arranque mais recente. O bit 0x10000 é definido quando o oscilador LSE (externo de baixa velocidade) falhou e o RTC recorreu ao LSI (RC interno). O bit 0x20000 é definido quando o RTC foi recentemente inicializado no arranque (em vez de continuar desde o arranque anterior).

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

Agenda uma interrupção de wakeup periódica.

timeout_ms é o período em milissegundos. O RTC dispara a cada timeout_ms e pode acordar o MCU a partir de machine.lightsleep() / machine.deepsleep(). Passar None para desativar o temporizador de wakeup.

callback é invocado a partir do IRQ de wakeup; passar None para não instalar callback (o wakeup continuará a disparar e a acordar o MCU).

mimxrt + alif apenas

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

Arma o alarme do RTC. id seleciona o canal de alarme (utilizar ALARM0). time é um número inteiro de milissegundos no futuro ou um tuplo de data/hora. Passar repeat=True para rearmar automaticamente após cada disparo (válido apenas quando time é uma contagem em milissegundos).

Apenas no alif é suportada a forma de contagem em milissegundos.

mimxrt apenas

alarm_left(alarm_id: int = 0, /) int

Devolve o número de milissegundos restantes antes do disparo do alarme identificado por alarm_id.

alarm_cancel(alarm_id: int = 0, /) None

Cancela um alarme previamente armado.

cancel(alarm_id: int = 0, /) None

Alias obsoleto de alarm_cancel(), mantido para compatibilidade retroativa. Agendado para remoção no MicroPython 2.0.

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

Regista um callback para o alarme do RTC.

trigger deve ser ALARM0 – a única fonte de IRQ suportada. handler é invocado com a instância RTC quando o alarme dispara. hard=True regista um handler de interrupção de hardware (sem alocação de heap no callback). wake é aceite para compatibilidade entre portos, mas não tem efeito.

Constantes

ALARM0: int

Identificador para o canal de alarme único do RTC. Passar para alarm(), alarm_left(), alarm_cancel() e o argumento trigger de irq(). Apenas no porto mimxrt.