3.28. Relógio de tempo real

O relógio de milissegundos do microcontrolador – o que está por trás de time.ticks_ms() e do subsistema de temporizadores – conta o tempo decorrido desde o arranque. O relógio de tempo real (RTC) é hardware separado que segue o tempo de relógio de parede – ano, mês, dia, hora, minuto, segundo – e continua a funcionar entre resets e atualizações de firmware. Nas câmaras com uma bateria de backup ligada à alimentação do RTC, sobrevive também a perdas completas de energia.

O RTC é o que uma câmara em produção usa para:

  • Registar entradas de log e imagens guardadas com uma data real.

  • Cadenciar tarefas de longa duração que não devem derivar ao longo de semanas ou meses.

3.28.1. A classe machine.RTC

machine.RTC é um singleton – um RTC por câmara, sem necessidade de id:

from machine import RTC

rtc = RTC()

A data e hora atuais residem em datetime(). Chamá-lo sem argumentos devolve um tuplo de 8 elementos:

>>> rtc.datetime()
(2026, 5, 27, 4, 14, 30, 15, 0)

Os campos são (year, month, day, weekday, hour, minute, second, subseconds). Para acertar o relógio, passe um tuplo de 8 elementos com a mesma forma:

rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))

A câmara continua a contar a partir desse ponto. Num reset suave, o tempo continua sem interrupção; num ciclo completo de energia, o RTC volta ao seu tempo predefinido, exceto se uma bateria de backup o mantiver alimentado.

3.28.2. Quando definir o RTC

O RTC não tem forma integrada de saber que horas são no arranque. Três padrões comuns permitem defini-lo:

  • A partir de uma fonte de tempo de rede. As câmaras que arrancam em WiFi podem obter a hora com ntptime e escrevê-la no RTC no início.

  • A partir de um anfitrião por USB. Um script companion num portátil envia a hora atual quando a câmara é ligada.

  • A partir de um chip RTC externo com bateria de backup. Um CI RTC dedicado (muitas vezes numa shield, com a sua própria célula moeda) mantém uma hora de longo prazo melhor do que o RTC integrado e pode ser lido no arranque para alimentar datetime().

Algumas aplicações nunca precisam de definir o RTC. Um ciclo de «acordar a cada 60 segundos e fazer uma leitura» por duty cycle apenas se preocupa com intervalos decorridos, que time.ticks_ms() e os padrões de suspensão temporizada em Modos de baixo consumo e de suspensão tratam sem consultar o valor de relógio de parede do RTC.