Horloge en temps réel (RTC) ESP32 utilisant DS1307 et écran OLED

Horloge En Temps Reel Rtc Esp32 Utilisant Ds1307 Et Ecran Oled



L'ESP32 est livré avec un module RTC intégré, mais qui ne fonctionne que lorsqu'il y a du courant. En cas de coupure de courant, l'horloge sera réinitialisée et ne pourra pas conserver l'heure correcte. Donc, si vous souhaitez suivre l'heure ou contrôler un appareil basé sur le temps, essayez le capteur RTC DS1307. Cependant, vous envisagez peut-être de connecter une batterie de secours à votre carte ESP32, mais ce n'est pas le meilleur scénario à faire en cas de panne de courant. La meilleure alternative consiste à utiliser le capteur DS1307, car il est livré avec une batterie intégrée qui peut durer au moins un an.

Pour que les choses soient claires, l'horloge en temps réel (RTC) interne de l'ESP32 peut suivre l'heure même lorsque le processeur principal est éteint ou en veille profonde. Vous pouvez utiliser l'ESP32 RTC pour suivre le temps sans utiliser beaucoup d'énergie ni affecter le processeur principal. Mais il nécessite toujours de l'énergie pour fonctionner, pas beaucoup, mais une quantité minimale d'énergie est requise pour que le RTC interne fonctionne.

Il ne nous reste donc plus que la solution consistant à utiliser le module RTC externe. Voyons les étapes d'interfaçage de la carte ESP32 avec le module RTC DS1307.







Contenu:

1. Qu'est-ce que le module RTC DS1307

Le DS1307 est un appareil à faible consommation qui peut suivre l'heure et la date avec précision. Il utilise le format décimal codé binaire (BCD). Il peut vous indiquer l'heure dans un format détaillé comme les secondes, les minutes et même les heures et les jours. Vous pouvez également imprimer la date au format complet comme le mois et l'année. Il sait également quand il s'agit d'une année bissextile, jusqu'en 2100. Pour communiquer avec le DS1307, vous pouvez utiliser le protocole I2C.





Le DS1307 dispose d'une batterie intégrée qui peut l'alimenter pendant environ un an sans source externe de 5 V. Grâce à cette batterie de secours, il peut conserver l’heure même lorsque l’alimentation principale est coupée. Il dispose également de 56 octets de SRAM pour stocker certaines données. Le DS1307 est un appareil pratique qui offre de nombreuses applications lorsqu'il est combiné avec une carte Arduino ou ESP32. Par exemple, ces données peuvent être utiles pour l'enregistrement de données, les systèmes d'alarme ou le contrôle industriel. Si vous avez besoin d’un chronométrage fiable, le DS1307 est une excellente option.





Spécifications du module RTC DS1307

Le module RTC DS1307 se compose du RTC IC, d'une EEPROM, d'un oscillateur à cristal et d'un support de batterie pour la sauvegarde.



Ci-dessous le détail de ces pièces :

CI RTC DS1307 : Le DS1307 RTC IC est une puce à 8 broches qui garde une trace de l'heure et de la date à l'aide du protocole I2C. Il consomme très peu d'énergie, moins de 500 nA. Il peut afficher l’heure en secondes, minutes et heures, ainsi que la date en jours, mois et années. Il peut également basculer entre les formats 24 heures et 12 heures.

CI EEPROM 24C32 : Le circuit intégré EEPROM 24C32 est une puce de 32 octets d'Atmel qui stocke les paramètres, l'heure et la date. Il utilise également le protocole I2C.

Cristal 32,768 kHz : L'oscillateur à cristal de 32,768 kHz fournit la fréquence d'horloge pour le CI RTC DS1307.

Support de batterie : Le support de pile contient une pile CR2032. Il s'agit d'une pile bouton au lithium de 3 V. Il fournit une alimentation continue au CI RTC DS1307.

Disposition du capteur DS18B20 : La disposition du capteur DS18B20 vous permet de souder et d'utiliser le capteur de température DS18B20. Il n'est pas pré-soudé. Vous pouvez souder le boîtier traversant et obtenir la température de la broche DS du module.

La liste ci-dessous donne quelques spécifications rapides du capteur RTC DS1307 :

  • Tension de fonctionnement: 4,5 à 5,5 V, généralement 5 V
  • Consommation de courant : Moins de 1,5 mA
  • Précision : 0–40 °C, dépend du cristal
  • Batterie : CR2032 (pièce de 3 V)
  • Mémoire : 56 octets de RAM non volatile
  • Interface : Interface série à deux fils (I2C)
  • Sortir : broche de sortie 1 Hz
  • Sortie d'onde carrée programmable : Consomme moins de 500 nA en mode batterie de secours
  • Détection de panne de courant : Détection automatique des pannes de courant et circuits de commutation
  • Circuit de détection de puissance : Il peut basculer automatiquement pour sauvegarder l'alimentation en cas de pénurie d'électricité.
  • Indemnisation pour les années bissextiles : Valable jusqu'en 2100

Brochage du module RTC DS1307

Le module dispose de plusieurs broches avec des fonctions différentes.

  • VCC est la broche qui a besoin d'une tension continue comprise entre 3,3 V et 5,5 V pour alimenter le module.
  • GND est la broche pour la basse tension ou la terre.
  • SDA et SCL sont les broches communiquant des données et des signaux d'horloge via le bus I2C.
  • DS est la broche qui mesure la température avec le capteur DS1307 si vous en avez une sur le module RTC.
  • SQ est la broche qui génère un signal carré avec une fréquence de 1 Hz, 4 kHz, 8 kHz ou 32 kHz, selon la façon dont vous la programmez.
  • UN est la broche qui utilise une pile 3V pour maintenir l'heure exacte lorsque l'alimentation principale est coupée.

2. Comment interfacer RTC DS1307 et écran OLED avec ESP32

Pour interfacer l'ESP32 avec le DS1307 et l'écran OLED, vous pouvez utiliser les broches I2C intégrées de la carte ESP32. Le DS1307 et l'écran OLED sont des appareils basés sur I2C. Peut ensuite communiquer en utilisant le protocole maître-esclave I2C sur le bus I2C.

Avant de passer à l'interfaçage de l'ESP32 avec le DS1307 et l'écran OLED, vous devez d'abord installer certaines bibliothèques requises.

Installation des bibliothèques requises

Vous aurez besoin de deux bibliothèques, une pour le module RTC et une pour l'écran OLED. En utilisant OLED avec un module RTC, vous pouvez créer des aperçus d'horloge étonnants et interactifs. Si vous n'avez pas l'intention d'afficher l'heure à l'écran, vous pouvez ignorer cette installation de bibliothèque.

Voici les deux bibliothèques dont vous aurez besoin :

  • RTClib (par Adafruit) est une bibliothèque Arduino IDE pour définir et obtenir l'heure d'un RTC. Il propose également des cours pour manipuler les dates, les heures et les durées. Grâce à cette bibliothèque, vous pouvez interfacer et programmer les modules d'horloge en temps réel (RTC), tels que DS1307 et DS3231.
  • S SD1306 (par Adafruit) est une bibliothèque pour Arduino, à l'aide de laquelle vous pouvez interfacer et programmer les écrans OLED avec Arduino ou toute autre carte microcontrôleur.

Pour télécharger et installer ces deux bibliothèques dans l'IDE Arduino, ouvrez d'abord le Gestionnaire de bibliothèque recherchez la bibliothèque RTClib et cliquez sur Installer :

Vous aurez la possibilité d'installer uniquement la bibliothèque ou ses dépendances. Clique le Installer tout bouton pour installer complètement la bibliothèque. De cette façon vous n'obtiendrez aucune erreur si vous modifiez le code qui dépend des dépendances de cette bibliothèque.

De même, recherchez la bibliothèque SSD1306. Cette bibliothèque est nécessaire pour un écran OLED. Cliquez sur Installer procéder.

Cette fois, vous recevrez également le même message de confirmation. Clique sur le Installer tout option.

Les bibliothèques pour OLED et DS1307 sont désormais installées et prêtes à être utilisées. Mais avant cela, recherchez d’abord l’adresse I2C de l’écran OLED.

3. Recherche de l'adresse I2C de l'écran OLED

L'adresse I2C est un identifiant unique pour chaque appareil sur le bus I2C. Il permet à l'appareil maître de communiquer avec un appareil esclave spécifique en envoyant des données à son adresse. Le but de l'adresse I2C est d'éviter les conflits et la confusion entre plusieurs appareils sur le même bus.

Pour obtenir l'adresse d'un appareil I2C, vous pouvez utiliser un croquis simple qui scanne le bus et imprime les adresses des appareils qu'il trouve. Alternativement, vous pouvez consulter la fiche technique de l'appareil pour voir son adresse par défaut ou configurable.

Ici, dans notre cas, après avoir exécuté le code du scanner I2C, l'adresse I2C suivante de l'écran OLED est affichée sur le terminal Arduino IDE.

La plupart du temps, il y a de fortes chances que vous obteniez également le même 0x3C adresse pour votre écran OLED.

4. Interfacer les modules OLED et RTC DS1307 avec ESP32

1. Connectez les broches SDA et SCL du module DS1307 et du Affichage OLED aux broches I2C de l'ESP32. Généralement, ce sont GPIO 21 et GPIO 22 , mais vous pouvez également attribuer d'autres broches dans le code si nécessaire.

2. Connectez le VCC et le GND du DS1307 et l'écran OLED aux broches 3,3 V et GND de l'ESP32.

3. Insérez une pile bouton CR2032 dans le module DS1307 pour fournir une alimentation de secours à l'horloge en temps réel.

4. Téléchargez l'exemple de code de ce didacticiel sur votre carte ESP32. Modifiez le code pour les sorties personnalisées.

Après le téléchargement, une horloge démarrera à l'heure réglée et affichera l'heure sur l'écran OLED.

5. Schéma de circuit

Le schéma de circuit de l'ESP32 avec DS1307 est simple, avec seulement quatre fils à connecter. Vous pouvez raccourcir les fils I2C SDA et SCL des capteurs OLED et DS1307. De même, pour alimenter ces deux capteurs, les broches 3V3 et GND de la carte ESP32 peuvent être utilisées. Vous pouvez également l'alimenter à partir d'une source distincte si nécessaire.

Note : Il est sûr d'alimenter le RTC DS1307 à partir d'une broche 3,3 V de l'ESP32 si la limite de courant de l'ESP32 n'est pas dépassée. Mais si vous souhaitez être sur un site sûr, vous pouvez soit utiliser une source d'alimentation séparée pour le module RTC, soit essayer le capteur DS3231 basse consommation dont la plage de fonctionnement est comprise entre 3,3 et 5,5 VDC.

L'image ci-dessous illustre la connexion de l'ESP32 avec le capteur RTC DS1307.

De même, si vous souhaitez connecter l'écran OLED pour afficher l'heure, vous pouvez utiliser les mêmes broches I2C et les mêmes broches d'alimentation de la carte ESP32.

6. Coder

À l'aide du code ci-dessous, nous définirons la date et l'heure actuelles sur le RTC. Après avoir réglé l'heure, le code affichera l'heure sur le terminal Arduino IDE. Avant de télécharger le code, vous devez le mettre à jour avec votre date et heure actuelles.

#include 'RTClib.h'
RTC_DS1307DS1307_RTC ;
char Week_days [ 7 ] [ 12 ] = { 'Dimanche' , 'Lundi' , 'Mardi' , 'Mercredi' , 'Jeudi' , 'Vendredi' , 'Samedi' } ;
void setup ( ) {
Série.begin ( 115200 ) ;
#ifndef ESP8266
alors que ( ! En série ) ;
#fin si
si ( ! DS1307_RTC.begin ( ) ) {
Série.println ( 'Impossible de trouver RTC' ) ;
alors que ( 1 ) ;
}
DS1307_RTC.ajuster ( DateHeure ( F ( __DATE__ ) , F ( __TEMPS__ ) ) ) ;
}
boucle vide ( ) {
DateHeure maintenant = DS1307_RTC.now ( ) ;
Serial.print ( maintenant.année ( ) , DÉC ) ;
Serial.print ( '/' ) ;
Serial.print ( maintenant.mois ( ) , DÉC ) ;
Serial.print ( '/' ) ;
Serial.print ( maintenant jour ( ) , DÉC ) ;
Serial.print ( '(' ) ;
Serial.print ( Jours de la semaine [ maintenant.dayOfTheWeek ( ) ] ) ;
Serial.print ( ') ' ) ;
Serial.print ( maintenant.heure ( ) , DÉC ) ;
Serial.print ( ':' ) ;
Serial.print ( maintenant.minute ( ) , DÉC ) ;
Serial.print ( ':' ) ;
Serial.print ( maintenant.seconde ( ) , DÉC ) ;
Série.println ( ) ;
retard ( 1000 ) ;
}

Ce code utilise le Bibliothèque RTClib pour s'interfacer avec un module d'horloge en temps réel DS1307 qui assure le suivi de la date et de l'heure.

Le installation La fonction a démarré avec l'initialisation du débit en bauds. Après cela, dans cette section, nous avons défini la fonction permettant de synchroniser la date et l'heure de l'ordinateur avec le capteur DS1307. Cela téléchargera l'heure de compilation du code sur le capteur RTC.

Vous pouvez utiliser le boucle fonction pour obtenir la date et l’heure du RTC. Ensuite, vous pouvez l'afficher sur le moniteur série comme ceci : année/mois/jour (jour de la semaine) heure:minute:seconde. N'oubliez pas d'ajouter un délai d'une seconde après chaque boucle, afin que le code ne s'exécute pas trop vite.

Afficher l'heure actuelle sur l'écran OLED

Pour afficher la même heure sur l'écran OLED, nous devons ajouter une partie de code supplémentaire pour l'écran OLED. Téléchargez simplement le code donné. Ce code affichera l'heure actuelle sur votre écran OLED.

N'oubliez pas que nous utilisons ici le module d'affichage OLED SSD I2C 128 × 64 de 0,96 pouces. Si vous utilisez une autre taille, modifiez le code en conséquence. Vérifiez également l'adresse I2C et modifiez-la dans le code donné. Dans notre cas, nous avons une adresse I2C 0x3C pour l'écran OLED.

#include
#include
#include
#include 'RTClib.h'
#définir SCREEN_WIDTH 128
#définir SCREEN_HEIGHT 64

Affichage Adafruit_SSD1306 ( SCREEN_WIDTH, SCREEN_HEIGHT, & Fil, - 1 ) ;
RTC_DS1307 RTC ;
jours de char [ 7 ] [ 12 ] = { 'Dimanche' , 'Lundi' , 'Mardi' , 'Mercredi' , 'Jeudi' , 'Vendredi' , 'Samedi' } ;
void setup ( ) {
Série.begin ( 115200 ) ;
si ( ! RTC.début ( ) ) {
Série.println ( 'Impossible de trouver RTC' ) ;
alors que ( 1 ) ;
}
RTC.ajuster ( DateHeure ( F ( __DATE__ ) , F ( __TEMPS__ ) ) ) ;
si ( ! display.begin ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Série.println ( F ( 'L'allocation SSD1306 a échoué' ) ) ;
pour ( ;; ) ;
}
retard ( 1000 ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setTextColor ( BLANC ) ;
display.setCursor ( 30 , vingt ) ;
display.println ( 'Linux' ) ;
afficher.afficher ( ) ;
retard ( 3000 ) ;
display.clearDisplay ( ) ;
}
boucle vide ( ) {
DateHeure maintenant = RTC.now ( ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setCursor ( 0 , 0 ) ;
display.print ( maintenant jour ( ) ) ;
display.print ( '/' ) ;
display.print ( maintenant.mois ( ) ) ;
display.print ( '/' ) ;
display.print ( maintenant.année ( ) ) ;
display.println ( jours [ maintenant.dayOfTheWeek ( ) ] ) ;
display.println ( ' ' ) ;
display.setCursor ( 0 , 40 ) ;
si ( maintenant.heure ( ) < dix )
display.print ( '0' ) ;
display.print ( maintenant.heure ( ) ) ;
display.print ( ':' ) ;
si ( maintenant.minute ( ) < dix )
display.print ( '0' ) ;
display.print ( maintenant.minute ( ) ) ;
display.print ( ':' ) ;
si ( maintenant.seconde ( ) < dix )
display.print ( '0' ) ;
display.println ( maintenant.seconde ( ) ) ;
afficher.afficher ( ) ;
}

Le code a commencé avec les bibliothèques que nous avons installées pour le RTC et l'affichage. Après cela, il définit la taille de l'écran et l'adresse d'affichage. Il initialise le tableau avec les noms des jours de la semaine.

Le installation la partie commence par la communication série. Il vérifie si le RTC et l'écran fonctionnent ou non. Après cela, nous avons défini une chaîne de texte « Linuxhint » qui s'affichera pendant 3 secondes. Il s'agit uniquement d'un message d'ouverture ou de démarrage, vous pouvez également modifier ce message avec votre texte personnalisé.

Le boucle La fonction obtient la date et l'heure du module DS1307. Après cela, il efface l'affichage et imprime la date et l'heure de manière formatée. Le code ajoute également des zéros non significatifs aux heures, minutes et secondes, au cas où leurs valeurs seraient inférieures à 10.

7. Matériel

Après avoir téléchargé le code sur la carte ESP32, vous verrez la sortie suivante sur l'écran OLED. Pour le matériel, nous avons utilisé l'écran OLED et un module I2C RTC DS1307. Une carte ESP32 avec 30 broches est utilisée. Vous pouvez également expérimenter avec n'importe quelle autre carte ESP32, mais assurez-vous de connecter correctement les broches I2C.

Conclusion

Le RTC DS1307 dispose d'une SRAM de 56 octets avec prise en charge de la batterie de secours. Il s'agit d'un appareil à 8 broches qui utilise un protocole de communication I2C. Pour interfacer le module RTC DS1307 avec l'ESP32, vous pouvez utiliser les broches I2C (GPIO 22 (SCL) et GPIO 21 (SDA)) de la carte ESP32. Vous pouvez imprimer l'heure sur une console Arduino IDE ou utiliser n'importe quel écran comme OLED ou I2C LCD pour afficher l'heure. Le module RTC DS1307 est un appareil utile pour suivre l'heure et la date dans diverses applications. Certaines applications principales incluent les enregistreurs de données, les horloges numériques et les montres intelligentes.