🛠 Horloge persistante : RTC à pile + resynchronisation NTP
Objetivos
Construir un reloj que sobreviva a los cortes de corriente: el RA4M1 posee un RTC (reloj de tiempo real) mantenido por una pila de botón conectada al zócalo dedicado de la placa. La estrategia profesional: una vez no es costumbre — sincronizar el RTC con NTP cuando hay WiFi disponible, y luego dejar que mantenga la hora por sí solo, ya que la pila consume tan poco que la hora sobrevive semanas sin alimentación principal.
Material
- 1 Arduino UNO R4 WiFi + pila de botón (formato CR1220) insertada en el zócalo RTC de la placa
- Red WiFi de 2,4 GHz para la sincronización NTP.
Código completo
#include <WiFiS3.h>
#include "RTC.h"
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
const char* SSID = "votre-reseau";
const char* PASS = "votre-cle";
// Trames 5x7 pour les chiffres 0-9 : voir la bibliothèque de trames
// du tuto matrice ; on n'affiche ici que l'heure hh:mm en deux blocs.
void afficherHeure(uint8_t h, uint8_t m);
void setup {
Serial.begin(115200);
matrix.begin;
WiFi.begin(SSID, PASS);
if (WiFi.waitForConnectResult == WL_CONNECTED) {
unsigned long epoch = WiFi.getTime; // NTP
if (epoch > 1000000000UL) {
RtcDateTime now = RtcDateTime::FromEpoch(epoch);
RTC.SetDateTime(now); // on écrit dans le RTC matériel
Serial.println(F("RTC synchronise via NTP"));
}
} else {
Serial.println(F("Sans WiFi : heure du RTC conservée à la pile"));
}
}
void loop {
RtcDateTime t = RTC.GetDateTime;
Serial.printf("%02u:%02u:%02u\n", t.Hour, t.Minute, t.Second);
afficherHeure(t.Hour, t.Minute);
delay(1000);
}
> NO VERIFICADO: los nombres exactos de las API de la clase RTC del core Renesas UNO (RtcDateTime, GetDateTime/SetDateTime, waitForConnectResult) evolucionan según las versiones del core — verifique la firma en el ejemplo RTC del IDE (Archivos > Ejemplos > Ejemplos para UNO R4) antes de cargar el código.
Verificación esperada
Tras la sincronización, la hora avanza segundo a segundo. Desconecte todo (USB y jack) durante diez minutos, vuelva a conectar: la hora mostrada es la correcta — el RTC ha funcionado con su pila. Sin pila, la hora vuelve al valor de compilación: esta es la prueba que demuestra la utilidad de la pila.
Errores frecuentes
- Pila ausente o colocada al revés en el zócalo: el RTC vuelve a cero en cada reinicio, el código parece «olvidar» la hora.
- Escribir en el RTC en cada bucle: se sincroniza una vez al inicio (o una vez al día), no continuamente — NTP no es una muleta.
- Olvidar que NTP pasa por el ESP32-S3: sin una conexión exitosa,
getTimedevuelve un valor absurdo; pruebe la coherencia (epoch > 10^9) antes de escribir en el RTC. - Hora de verano/hora de invierno: NTP da la hora UTC; gestione el desfase y la hora legal en el código, el RTC no lo hace.
- Confundir RTC (segundos, mantenido por la pila) y
millis(reinicia en cada encendido): para durar, es el RTC; para duraciones cortas, millis.
Otros tutoriales para esta placa
- Premier Blink sur la UNO R4 WiFi : la première UNO 32 bits
- Apprivoiser la matrice LED 12x8 intégrée
- Toucher capacitif : touchRead sans composant
- Se connecter au WiFi et lire l'heure NTP (WiFiS3)
- Inclinomètre sur la matrice : l'IMU LSM6DSV16X en I²C
- Serveur web embarqué : piloter la matrice depuis le navigateur
Ejemplos de código para esta placa
clignotante.inoArduinobouton-poussoir.inoArduinodac-analogique.inoArduinoentree-analogique.inoArduinopwm-respiration.inoArduinoservo-balayage.inoArduino