« Module RTC DS3231 sur ESP32 » : différence entre les versions

De Wiki de Mémoire Vive
Aller à la navigation Aller à la recherche
Page créée avec « Avoir l'heure sur un ESP32, ça peut servir. En utilisant un module DS3231 ça marche. Voici le code Arduino correspondant. <pre> /* --- Résumé du programme --- 1. Connexion au réseau WiFi avec les identifiants fournis (SSID + mot de passe). 2. Initialisation du module RTC DS3231 via le bus I²C (SDA=21, SCL=22 sur ESP32). 3. Vérification de la présence du DS3231 : - Si non détecté → arrêt du programme. - Si perte d’alimenta... »
(Aucune différence)

Version du 21 août 2025 à 21:48

Avoir l'heure sur un ESP32, ça peut servir.

En utilisant un module DS3231 ça marche.

Voici le code Arduino correspondant.

/*
  --- Résumé du programme ---
  
  1. Connexion au réseau WiFi avec les identifiants fournis (SSID + mot de passe).
  2. Initialisation du module RTC DS3231 via le bus I²C (SDA=21, SCL=22 sur ESP32).
  3. Vérification de la présence du DS3231 :
       - Si non détecté → arrêt du programme.
       - Si perte d’alimentation → remise à l’heure de compilation du sketch.
  4. Activation de la LED intégrée (GPIO2) en mode ON.
  5. Boucle principale :
       - Lecture de la date et de l’heure courantes depuis le DS3231.
       - Affichage de l’horodatage complet sur le port série (YYYY/MM/DD HH:MM:SS).
       - Mise à jour toutes les secondes.
*/

#include <WiFi.h>
#include <Wire.h>
#include "RTClib.h"

// ----- Réseau -----
const char* ssid = "2.4GHz-MEMOIRE-VIVE";
const char* password = "memoirevive79";
const char* mqtt_server = "192.168.1.249";  // non utilisé pour l'instant

RTC_DS3231 rtc;

// ----- Connexion WiFi -----
void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("✅ WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

// ----- Setup -----
void setup() {
  pinMode(2, OUTPUT);     
  digitalWrite(2, HIGH); // LED ON

  Serial.begin(115200);
  setup_wifi();

  Wire.begin(21, 22); // SDA=21, SCL=22 pour ESP32

  if (!rtc.begin()) {
    Serial.println("❌ Erreur : DS3231 introuvable !");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("⚠️ Perte d'alimentation, réglage auto de l'heure...");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));  // règle l'heure à la compilation
  }
}

// ----- Loop -----
void loop() {
  DateTime now = rtc.now();

  Serial.printf("%04d/%02d/%02d %02d:%02d:%02d\n",
                now.year(), now.month(), now.day(),
                now.hour(), now.minute(), now.second());

  delay(1000);
}