🛠 Horloge persistante : RTC à pile + resynchronisation NTP
Objectifs
Construire une horloge qui survit aux coupures : le RA4M1 possède un RTC (real-time clock) maintenu par une pile bouton branchée sur l'emplacement dédié de la carte. La stratégie professionnelle : une fois n'est pas coutume — synchroniser le RTC sur NTP quand le WiFi est disponible, puis le laisser tenir l'heure seul, la pile consommant si peu que l'heure survit des semaines sans alimentation principale.
Matériel
- 1 Arduino UNO R4 WiFi + pile bouton (format CR1220) insérée dans le support RTC de la carte
- Réseau WiFi 2,4 GHz pour la synchronisation NTP.
Code complet
#include <WiFiS3.h>
#include "RTC.h"
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
const char* SSID = "votre-réseau";
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);
}
Vérification attendue
Après synchronisation, l'heure défile seconde par seconde. Débranchez tout (USB et jack) pendant dix minutes, rebranchez : l'heure affichée est la bonne — le RTC a tourné sur sa pile. Sans pile, l'heure repart de la valeur de compilation : c'est le test qui prouve l'utilité de la pile.
Erreurs fréquentes
- Pile absente ou à l'envers dans le support : le RTC repart de zéro à chaque redémarrage, le code semble « oublier » l'heure.
- Écrire dans le RTC à chaque boucle : on synchronise une fois au démarrage (ou une fois par jour), pas en continu — NTP n'est pas une béquille.
- Oublier que NTP passe par l'ESP32-S3 : sans connexion réussie,
getTimerenvoie une valeur aberrante ; testez la cohérence (epoch > 10^9) avant d'écrire dans le RTC. - Heure d'été/heure d'hiver : NTP donne l'UTC ; gérez le décalage et l'heure légale côté code, le RTC ne le fait pas.
- Confondre RTC (secondes, maintenu à la pile) et
millis(redémarre à chaque mise sous tension) : pour durer, c'est le RTC ; pour des durées courtes, millis.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinodac-analogique.inoArduinoentree-analogique.inoArduinopwm-respiration.inoArduinoservo-balayage.inoArduino