Module RTC DS3231

ds3231


Un module RTC (Real Time Clock) horloge temps réel est un compteur date/heure. 

Ce module RTC de précision basé sur le DS3231 donne la date et l'heure au format 12h ou 24h, en tenant compte des années bissextiles. Il communique avec un microcontrôleur type Arduino ou compatible via le bus I2C.

Il est utilisé dans les systèmes qui ont besoin de la date/heure pour déclencher ou enregistrer des événements.


Exemple : L’arrosage des plantes à une heure précise ....


De nombreuses librairies sont disponibles pour le bon fonctionnement du module RTC.
Un support pour pile de sauvegarde CR2032 est présent au dos du circuit


PinOut

Module RTC - DS3231Arduino Uno
GNDGND
VCC (2,7v min / 5,5v max)+5v ou +3,3v
SCL  (I2C)A5  (I2C)
SDA  (I2C)A4  (I2C)
SQW  (horloge interne - signal carré à 1Hz, 4000Hz, 8000Hz ou 32000Hz)
32K  (horloge interne - signal carré à 32kHz)
pinout


Les broches en bout de carte (GND, VCC, SDA, SCL) permettent de raccorder un autre module I2C

Les modules RTC sont quasiment toujours accompagnés d’une pile
  • CR2032 - Non rechargeable
  • LIR2032 - Rechargeable
afin que le comptage interne continue en cas de coupure de l’alimentation principale


Pile CR2032 ou LIR2032

circuit-charge


Si vous utilisez une CR2032 Non rechargeable, il est recommandé de désactiver le circuit de charge du DS3231, en dessoudant la résistance de 220 Ohms (A coté de la diode en haut/droite)


Merci à Passion Electronique pour cette information !

https://passionelectronique.fr/tutorial-ds3231/#quelle-librairie-utiliser-pour-interagir-avec-cette-horloge-temps-reel-rtclib-wire


Adresse I2C

A2
A1
A0
Adresse I2C - (7 bits)
DS3231
-
-
-
0x68
Eeprom 24C32
0
0
0
0x50
Eeprom 24C32
0
0
1
0x51
Eeprom 24C32
0
1
0
0x52
Eeprom 24C32
0
1
1
0x53
Eeprom 24C32
1
0
0
0x54
Eeprom 24C32
1
0
1
0x55
Eeprom 24C32
1
1
0
0x56
Eeprom 24C32
1
1
1
0x57





 Le module RTC DS3231 a deux adresses I2C

  • Une adresse I2C pour la puce DS3231
  • Une adresse I2C pour la mémoire eeprom 24C32


Nota: A2, A1, et A0 sont les 3 entrées de sélection d’adresse de la mémoire EEPROM 24C32

Leur valeur équivaut à «0» lorsqu’un cavalier/pont de soudure est en place à leur niveau, ou «1» s’il n’y a aucun cavalier ou pont de soudure à leur niveau.




Afficher les adresse I2C dans le moniteur serie

scan-i2c

Pour afficher les adresses I2C du module RTC DS3231 dans le moniteur série, vous pouvez utiliser le programme ci-dessous :


/*  Claude EMERY - 15/02/2025
     Détection de l'adresse I2C
     D'un module connecté à l'Arduino UNO
     SDA=A4 et SCL=A5
*/


#include <Wire.h>

void setup(){
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);  // Attente connexion moniteur série
  Serial.println("\nI2C Scanner");
}

void loop(){
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) {
    /* Le scanner i2c utilise la valeur de retour de Write.endTransmission
    pour vérifier si un périphérique a bien accusé réception de l'adresse.*/

    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0){
      Serial.print("Périphérique I2C détecté à l'adresse 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error==4) {
      Serial.print("Erreur inconnue à l'adresse 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("Aucun périphérique I2C détecté\n");
  else
    Serial.println("Terminé ...\n");

  delay(5000);           // Patienter 5 secondes avant le prochain scan.
}


câblage DS3231

cablage-ds3231



DS3231  |  Arduino UNO

  • VCC  sur  +5v
  • GND  sur  GND
  • SDA  sur  A4
  • SCL  sur  A5



.

Code Arduino Simple

ds3231.zip


Nous utiliserons la bibliothèque DS3231.zip , cette librairie est à installer manuellement

  • Copier cette bibliothèque dans un dossier sur votre ordinateur
  • Croquis / Importer une bibliothèque / Ajouter une bibliothèque .ZIP ...
  • Sélectionner la bibliothèque DS3231.zip, puis [Ouvrir]


Patienter pendant l’installation de la bibliothèque ...


Télécharger la librairie DS3231.zip


date-heure-simple


Affichage simple de la date/heure avec la DS3231.h   (Utilisation de la librairie DS3231.zip ci-dessus)


/* Claude EMERY - 07/06/2026
    RTC DS3231
   Affichage simple date & heure
  */


#include <Wire.h>
#include <DS3231.h> // Librairie DS3231.h à installer en zip

DS3231 clock;
RTCDateTime dt;

void setup(){
  Serial.begin(9600);
  Serial.println("Initialize DS3231");
  clock.begin();  // Initialization du DS3231


   // Enregistrement manuellement de la date/Heure au format: YYYY, MM, DD, HH, MM, SS
  // clock.setDateTime(2016, 12, 9, 11, 46, 00);
  // Date/Heure envoyees est la date/heure de la compilation du croquis

  clock.setDateTime(__DATE__, __TIME__);  

  /* Cette commande sera exécutée à chaque redémarrage d’Arduino.
     & commenter la ligne //clock.setDateTime(__DATE__, __TIME__);
     pour stocker en mémoire du module DS3231 */

}

void loop(){
  dt = clock.getDateTime();
  Serial.print("Date/Heure: ");
  Serial.print(dt.year);   Serial.print("-");  // Affichage de l'année
  Serial.print(dt.month);  Serial.print("-");  // Affichage du mois
  Serial.print(dt.day);    Serial.print(" ");  // Affichage du jour
  Serial.print(dt.hour);   Serial.print(":");  // Affichage de l'heure
  Serial.print(dt.minute); Serial.print(":");  // Affichage des minutes
  Serial.print(dt.second); Serial.println("");  // Affichage des seconde
  delay(1000);
}

La ligne ci-dessous enregistre la date/heure au moment de chaque compilation du code

  • clock.setDateTime(__DATE__, __TIME__);  


Si vous dé-commentez la ligne ci-dessous vous pouvez enregistrer manuellement la date/heure au format YYYY, MM, DD, HH, MM, SS

  • clock.setDateTime(2016, 12, 9, 11, 46, 00);   Séparer les chiffres (année, mois, jour, heure, minute, seconde) par des virgules


Mais il faudra commenter la ligne // pour que le code ne l’exécute pas

  • //clock.setDateTime(__DATE__, __TIME__);




Code Arduino avec la librairie Adafruit

retlib_adafruit


Dans cet exemple, nous utiliserons la bibliothèque RTClib.h de Adafruit , cette librairie est à installer via le gestionnaire bibliothèque de l’IDE

  • Ouvrir le « Gestionnaire de bibliothèques »


Dans la zone de recherche, saisir rtclib, et installer la bibliothèque

  • RTClib par Adafruit (Elle est peut-être déjà installée)


date-heure_adafruit

/* Claude EMERY - 07/06/2026
Affichage Date/Heure
avec RTClib de Adafruit */


#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc; // Objet rtc
char daysOfTheWeek[7][12] = {"Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"};

void setup() {
  Serial.begin(9600);
  delay(2000);
  rtc.begin();  // Initialisation d module RTC
  // Recupération date et heure du téléversement dans le module RTC

  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  /* Pour régler manuellement la date et l'heure,
     supprimez les signes de commentaire //
     et saisissez les nouvelles valeurs sur la ligne suivante
    dans cet ordre : année, jour, mois, heure, minute et seconde. */

  //rtc.adjust(DateTime(2000, 1, 12, 1, 00, 0));  //Ajustement date heure --  Séparer les chiffres (année, mois, jour, heure, minute, seconde) par des virgules
}

void loop() {
  DateTime now = rtc.now(); // Date Heure actuelle
  //Jour de la semaine
  Serial.print("Jour de la semaine:  ");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); // Affichage jour semaine
  Serial.println();
  Serial.print("Heure actuelle: ");  // Affichage heure actuelle
  if (now.hour() < 10) {
    Serial.print("0");
    Serial.print(now.hour());
  } else {
    Serial.print(now.hour(), DEC); // Affichage heure actuelle, DEC en decimal
  }
  Serial.print(':');
  if (now.minute() < 10) {
    Serial.print("0");
    Serial.print(now.minute());
  } else {
    Serial.print(now.minute(), DEC);
  }
  Serial.print(':');
  if (now.second() < 10) {
    Serial.print("0");
    Serial.print(now.second());
  } else {
    Serial.print(now.second(), DEC);
  }
  Serial.println();
  Serial.print("Date actuelle: "); // Affichage date actuelle
  if (now.day() < 10) {
    Serial.print("0");
    Serial.print(now.day());
  } else {
    Serial.print(now.day(), DEC);
  }
  Serial.print('/');
  if (now.month() < 10) {
    Serial.print("0");
    Serial.print(now.month());
  } else {
    Serial.print(now.month(), DEC);
  }
  Serial.print('/');
  Serial.print(now.year(), DEC);
  Serial.print("");
  Serial.println();

  //Temperature:
  Serial.print("Temperature: ");  // Affichage température
  Serial.print(rtc.getTemperature());
  Serial.println(" C");
  Serial.println();
  delay(2000);
}

Ce code affiche la température (optionnel)

La ligne ci-dessous enregistre la date/heure au moment de chaque compilation du code

  • rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));  


Si vous dé-commentez la ligne ci-dessous vous pouvez enregistrer manuellement la date/heure au format YYYY, MM, DD, HH, MM, SS

  • rtc.adjust(DateTime(2000, 1, 12, 1, 00, 0));    Séparer les chiffres (année, mois, jour, heure, minute, seconde) par des virgules


Mais il faudra commenter la ligne // pour que le code ne l’exécute pas

  • //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));




Personnaliser

Google Analytics

Google Analytics est un service utilisé sur notre site Web qui permet de suivre, de signaler le trafic et de mesurer la manière dont les utilisateurs interagissent avec le contenu de notre site Web afin de l’améliorer et de fournir de meilleurs services.

Facebook

Notre site Web vous permet d’aimer ou de partager son contenu sur le réseau social Facebook. En l'utilisant, vous acceptez les règles de confidentialité de Facebook: https://www.facebook.com/policy/cookies/

Twitter

Les tweets intégrés et les services de partage de Twitter sont utilisés sur notre site Web. En activant et utilisant ceux-ci, vous acceptez la politique de confidentialité de Twitter: https://help.twitter.com/fr/rules-and-policies/twitter-cookies