Arduino Nano ESP32 Web RTC avec la Bibliothèque DIYables ESP32 WebApps

Aperçu

Ce tutoriel couvre la classe DIYablesWebRTCPage de la bibliothèque DIYables ESP32 WebApps. La page du navigateur affiche l'heure RTC actuelle de l'Arduino Nano ESP32 à côté de l'heure locale du navigateur, et calcule la dérive entre les deux. Un seul bouton envoie l'heure locale du navigateur à la carte, qui met à jour son module RTC.

La carte nécessite un module RTC matériel DS3231 connecté via I2C. La bibliothèque RTClib d'Adafruit gère la lecture/écriture de l'heure côté carte.

Arduino Nano ESP32 Web RTC

Ce que ce Tutoriel Couvre

  • Câbler un module RTC DS3231 à l'Arduino Nano ESP32
  • Installer la dépendance RTClib
  • Lire et afficher l'heure RTC dans le navigateur
  • Synchroniser le RTC de la carte depuis le navigateur avec une seule pression de bouton

Matériel Requis

1×Arduino Nano ESP32
1×Câble USB Type-A vers Type-C (pour PC USB-A)
1×Câble USB Type-C vers Type-C (pour PC USB-C)
1×Module horloge temps réel DS3231
1×Pile CR2032
1×Fils de connexion
1×Plaque d'essai
1×Recommandé: Carte d'extension à bornier à vis pour Arduino Nano
1×Recommandé: Carte d'extension breakout pour Arduino Nano
1×Recommandé: Répartiteur d'alimentation pour Arduino Nano ESP32

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

Schéma de Câblage

Schéma de Câblage RTC DS3231 Arduino Nano ESP32

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Arduino Nano ESP32 - Module RTC DS3231

DS1307 RTC Module Arduino Nano ESP32
Vin 3.3V
GND GND
SDA GPIO21
SCL GPIO22

Étapes

Suivez ces instructions étape par étape :

  • Si c'est la première fois que vous utilisez l'Arduino Nano ESP32, consultez le tutoriel sur Installation du logiciel Arduino Nano ESP32..
  • Connectez la carte Arduino Nano ESP32 à votre ordinateur avec un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte appropriée (ex. Arduino Nano ESP32) et le port COM.
  • Naviguez vers l'icône Bibliothèques dans la barre gauche de l'IDE Arduino.
  • Cherchez "DIYables ESP32 WebApps", puis trouvez la bibliothèque DIYables ESP32 WebApps de DIYables
  • Cliquez sur le bouton Installer pour installer la bibliothèque.
  • Search for DIYables ESP32 WebApps created by DIYables and click the Install button.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Library Manager
Type:
All
Topic:
All
DIYables ESP32 WebApps by DIYables
A comprehensive library designed for ESP32 that provides multiple professional web applications including Web Monitor, Chat, Digital Pin Control, Sliders, Joystick, Analog Gauge, Rotator Control, and Temperature Display via WebSocket communication. Features modular architecture for memory efficiency, automatic config handling, and perfect for IoT projects, robotics, sensor monitoring, servo/stepper control, temperature monitoring, and remote ESP32 control. More info
1.0.1
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
Arduino Nano ESP32 on COM15
1
  • On vous demandera d'installer d'autres dépendances de bibliothèques
  • Cliquez sur le bouton Installer tout pour installer toutes les dépendances de bibliothèques.
  • Cherchez "RTClib", puis trouvez la bibliothèque RTC d'Adafruit
  • Cliquez sur le bouton Installer pour installer la bibliothèque RTC.
  • Search for RTClib created by Adafruit and click the Install button.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Library Manager
Type:
All
Topic:
All
RTClib by Adafruit
Works with DS1307, DS3231, PCF8523, PCF8563 on multiple architectures More info
2.1.3
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
Arduino Nano ESP32 on COM15
1
  • On peut vous demander d'installer des dépendances pour la bibliothèque
  • Installez toutes les dépendances en cliquant sur le bouton Installer tout.
  • Dans l'IDE Arduino, allez dans Fichier Exemples DIYables ESP32 WebApps WebRTC, ou copiez le code ci-dessus et collez-le dans l'éditeur de l'IDE Arduino
/* * DIYables WebApp Library - Web RTC Example * * This example demonstrates the Web RTC feature: * - Real-time clock display for both ESP32 and client device * - One-click time synchronization from web browser to ESP32 * - Hardware RTC integration for persistent timekeeping * - Visual time difference monitoring * * Hardware Required: * - ESP32 development board * - DS3231 RTC module (connected via I2C) * * Required Libraries: * - RTClib library (install via Library Manager) * * Setup: * 1. Connect DS3231 RTC module to ESP32 I2C pins (SDA/SCL) * 2. Install RTClib library in Arduino IDE * 3. Update WiFi credentials below * 4. Upload the sketch to your ESP32 * 5. Open Serial Monitor to see the IP address * 6. Navigate to http://[IP_ADDRESS]/web-rtc */ #include <DIYables_ESP32_Platform.h> #include <DIYablesWebApps.h> #include <RTClib.h> // RTC object RTC_DS3231 rtc; char daysOfWeek[7][12] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; // WiFi credentials - UPDATE THESE WITH YOUR NETWORK const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Create WebApp server and page instances ESP32ServerFactory serverFactory; DIYablesWebAppServer webAppsServer(serverFactory, 80, 81); DIYablesHomePage homePage; DIYablesWebRTCPage webRTCPage; void setup() { Serial.begin(9600); delay(1000); Serial.println("DIYables ESP32 WebApp - Web RTC Example"); // Initialize RTC if (!rtc.begin()) { Serial.println("RTC module is NOT found"); Serial.flush(); while (1); } // Check if RTC lost power and if so, set the time if (rtc.lostPower()) { Serial.println("RTC lost power, setting time!"); // When time needs to be set on a new device, or after a power loss, the // following line sets the RTC to the date & time this sketch was compiled rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // This line sets the RTC with an explicit date & time, for example to set // January 21, 2021 at 3am you would call: // rtc.adjust(DateTime(2021, 1, 21, 3, 0, 0)); } // Print initial RTC time DateTime initialTime = rtc.now(); Serial.print("Initial RTC Time: "); Serial.print(initialTime.year(), DEC); Serial.print("/"); Serial.print(initialTime.month(), DEC); Serial.print("/"); Serial.print(initialTime.day(), DEC); Serial.print(" ("); Serial.print(daysOfWeek[initialTime.dayOfTheWeek()]); Serial.print(") "); if (initialTime.hour() < 10) Serial.print("0"); Serial.print(initialTime.hour(), DEC); Serial.print(":"); if (initialTime.minute() < 10) Serial.print("0"); Serial.print(initialTime.minute(), DEC); Serial.print(":"); if (initialTime.second() < 10) Serial.print("0"); Serial.print(initialTime.second(), DEC); Serial.println(); // Add pages to server webAppsServer.addApp(&homePage); webAppsServer.addApp(&webRTCPage); // Optional: Add 404 page for better user experience webAppsServer.setNotFoundPage(DIYablesNotFoundPage()); // Set callback for time sync from web webRTCPage.onTimeSyncFromWeb(onTimeSyncReceived); // Set callback for time request from web webRTCPage.onTimeRequestToWeb(onTimeRequested); // Start the WebApp server if (!webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD)) { while (1) { Serial.println("Failed to connect to WiFi"); delay(1000); } } } void loop() { // Handle web server webAppsServer.loop(); // Send current time to web clients and print to Serial every 1 second static unsigned long lastUpdate = 0; if (millis() - lastUpdate >= 1000) { lastUpdate = millis(); // Get current RTC time DateTime currentTime = rtc.now(); // Send time to web clients in human readable format webRTCPage.sendTimeToWeb(currentTime.year(), currentTime.month(), currentTime.day(), currentTime.hour(), currentTime.minute(), currentTime.second()); // Print time to Serial Monitor Serial.print("RTC Time: "); Serial.print(currentTime.year(), DEC); Serial.print("/"); Serial.print(currentTime.month(), DEC); Serial.print("/"); Serial.print(currentTime.day(), DEC); Serial.print(" ("); Serial.print(daysOfWeek[currentTime.dayOfTheWeek()]); Serial.print(") "); if (currentTime.hour() < 10) Serial.print("0"); Serial.print(currentTime.hour(), DEC); Serial.print(":"); if (currentTime.minute() < 10) Serial.print("0"); Serial.print(currentTime.minute(), DEC); Serial.print(":"); if (currentTime.second() < 10) Serial.print("0"); Serial.print(currentTime.second(), DEC); Serial.println(); } delay(10); } // Callback function called when web client sends time sync command void onTimeSyncReceived(unsigned long unixTimestamp) { Serial.print("Time sync received: "); Serial.println(unixTimestamp); // Convert Unix timestamp to DateTime and set RTC time DateTime newTime(unixTimestamp); rtc.adjust(newTime); Serial.println("ESP32 RTC synchronized!"); } // Callback function called when web client requests current ESP32 time void onTimeRequested() { // Get current RTC time and send to web in human readable format DateTime currentTime = rtc.now(); webRTCPage.sendTimeToWeb(currentTime.year(), currentTime.month(), currentTime.day(), currentTime.hour(), currentTime.minute(), currentTime.second()); }
  • Mettez à jour les identifiants WiFi dans le sketch :
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
  • Cliquez sur le bouton Téléverser dans l'IDE Arduino pour téléverser le code sur l'Arduino Nano ESP32
  • Ouvrez le Moniteur Série
  • La sortie du Moniteur Série devrait ressembler à ceci :
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
DIYables ESP32 WebApp - Web RTC Example Initial RTC Time: 2025/8/28 (Thursday) 12:00:08 INFO: Added app / INFO: Added app /web-rtc DIYables WebApp Library Platform: Arduino Nano ESP32 Network connected! IP address: 192.168.0.2 HTTP server started on port 80 Configuring WebSocket server callbacks... WebSocket server started on port 81 WebSocket URL: ws://192.168.0.2:81 WebSocket server started on port 81 ========================================== DIYables WebApp Ready! ========================================== Web Interface: http://192.168.0.2 WebSocket: ws://192.168.0.2:81 Available Applications: Home Page: http://192.168.0.2/ Web RTC: http://192.168.0.2/web-rtc ==========================================
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2
  • Si rien n'apparaît, appuyez sur le bouton de réinitialisation de la carte.
  • Entrez l'adresse IP du Moniteur Série dans un navigateur sur le même réseau.
  • Exemple : http://192.168.0.2
  • La page d'accueil affiche une carte pour l'application RTC :
Arduino Nano ESP32 DIYables WebApp page d'accueil avec l'application Web RTC
  • Sélectionnez la carte Web RTC pour ouvrir l'interface horloge :
Arduino Nano ESP32 DIYables WebApp application Web RTC
  • La page est également directement accessible à http://192.168.0.2/web-rtc.

Utilisation de l'Interface Web

La page RTC affiche trois sections :

  • Heure Arduino — l'heure actuelle du module DS3231 de la carte
  • Heure de votre appareil — l'heure locale actuelle rapportée par le navigateur
  • Différence de temps — la différence entre les deux, en minutes

Synchronisation de l'Heure

Cliquez sur le bouton Sync ESP32 Time pour transférer l'heure locale du navigateur à la carte :

Arduino Nano ESP32 DIYables WebApp synchronisation Web RTC

Le processus de synchronisation :

  1. Le navigateur lit son heure locale (tenant compte du décalage de fuseau horaire local)
  2. L'horodatage est envoyé à la carte via WebSocket
  3. Le sketch écrit l'heure reçue dans le DS3231
  4. La page se rafraîchit pour afficher l'heure mise à jour de la carte

Après synchronisation, la différence de temps est typiquement de 0 à 1 minute.

Dépannage

L'heure RTC affiche une valeur incorrecte

  • Le DS3231 conserve l'heure de sa batterie même quand la carte est éteinte
  • Effectuez une synchronisation depuis le navigateur pour régler l'heure correcte
  • Vérifiez que la batterie CR2032 est installée dans le module RTC

I2C non détecté

  • Vérifiez que le câblage SDA et SCL correspond au tableau ci-dessus
  • Confirmez que la VCC du DS3231 est connectée à 3,3 V, pas 5 V
  • Ajoutez une vérification Serial.println(rtc.isrunning()) dans setup

Le WebSocket se déconnecte fréquemment

  • Confirmez que webAppsServer.loop() est appelé à chaque itération de loop()
  • Évitez les longs délais bloquants après le démarrage du serveur

Impossible d'accéder à la page

  • Vérifiez l'adresse IP dans le Moniteur Série
  • Assurez-vous que l'appareil du navigateur et la carte sont sur le même réseau WiFi 2,4 GHz

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !