3.28. Reloj en tiempo real

El reloj de milisegundos del microcontrolador (el que está detrás de time.ticks_ms() y del subsistema de temporizadores) cuenta el tiempo transcurrido desde el arranque. El reloj en tiempo real (RTC) es hardware independiente que lleva el control de la hora real (año, mes, día, hora, minuto, segundo) y sigue funcionando a través de reinicios y actualizaciones de firmware. En las cámaras con una batería de respaldo conectada a la alimentación del RTC, también sobrevive a una pérdida total de energía.

El RTC es lo que usa una cámara desplegada para:

  • Marcar con la fecha real las entradas de registro y las imágenes guardadas.

  • Marcar el ritmo de tareas de larga duración que no deberían desviarse a lo largo de semanas o meses.

3.28.1. La clase machine.RTC

machine.RTC es un singleton: un RTC por cámara, sin necesidad de id:

from machine import RTC

rtc = RTC()

La fecha y hora actuales se encuentran en datetime(). Llamarla sin argumentos devuelve una tupla de 8 elementos:

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

Los campos son (year, month, day, weekday, hour, minute, second, subseconds). Para ajustar el reloj, pasa de vuelta una tupla de 8 elementos con la misma forma:

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

La cámara sigue contando a partir de ese punto. En un reinicio suave la hora continúa sin interrupción; en un ciclo de apagado completo el RTC vuelve a su hora predeterminada, a menos que una batería de respaldo lo mantenga alimentado.

3.28.2. Cuándo ajustar el RTC

El RTC no tiene forma integrada de saber qué hora es al arrancar. Tres patrones comunes lo ajustan:

  • Desde una fuente de hora de red. Las cámaras que arrancan con WiFi pueden obtener la hora con ntptime y escribirla en el RTC al iniciarse.

  • Desde un host por USB. Un script complementario en un portátil envía la hora actual cuando se conecta la cámara.

  • Desde un chip de RTC externo con batería de respaldo. Un CI de RTC dedicado (a menudo en un shield, con su propia pila de botón) mantiene mejor la hora a largo plazo que el RTC integrado en el chip y puede leerse al arrancar para inicializar datetime().

Algunas aplicaciones nunca necesitan ajustar el RTC en absoluto. Un bucle con ciclo de trabajo del tipo «despertar cada 60 segundos y tomar una lectura» solo se preocupa por los intervalos transcurridos, de los que se encargan time.ticks_ms() y los patrones de suspensión temporizada de Modos de bajo consumo y suspensión sin consultar nunca el valor de hora real del RTC.