ESP32 Echtzeituhr (RTC) mit DS1307 und OLED-Display

Esp32 Echtzeituhr Rtc Mit Ds1307 Und Oled Display



ESP32 verfügt über ein integriertes RTC-Modul, das jedoch nur funktioniert, wenn Strom vorhanden ist. Bei einem Stromausfall wird die Uhr zurückgesetzt und kann nicht mehr die korrekte Uhrzeit anzeigen. Wenn Sie also die Zeit im Auge behalten oder ein zeitbasiertes Gerät steuern möchten, dann probieren Sie den RTC-Sensor DS1307 aus. Sie denken vielleicht darüber nach, eine Backup-Batterie an Ihr ESP32-Board anzuschließen, aber das ist nicht das beste Szenario, wenn Sie einen Strommangel haben. Die beste Alternative ist die Verwendung des DS1307-Sensors, da dieser über eine eingebaute Batterie verfügt, die mindestens ein Jahr halten kann.

Zur Verdeutlichung: Die interne Echtzeituhr (RTC) des ESP32 kann die Zeit auch dann verfolgen, wenn der Hauptprozessor ausgeschaltet ist oder sich im Tiefschlaf befindet. Mit dem ESP32 RTC können Sie die Zeit im Auge behalten, ohne viel Strom zu verbrauchen oder den Hauptprozessor zu beeinträchtigen. Aber Es benötigt immer noch Strom zum Betrieb, nicht so viel, aber für den Betrieb der internen Echtzeituhr ist eine Mindestmenge an Strom erforderlich.

Damit bleibt uns nur noch die Lösung, das externe RTC-Modul zu verwenden. Schauen wir uns die Schritte zur Verbindung der ESP32-Karte mit dem DS1307 RTC-Modul an.







Inhalt:

1. Was ist das RTC DS1307-Modul?

DS1307 ist ein Gerät mit geringem Stromverbrauch, das Uhrzeit und Datum genau verfolgen kann. Es verwendet das binär codierte Dezimalformat (BCD). Es kann Ihnen die Zeit in einem detaillierten Format wie Sekunden, Minuten und sogar Stunden und Tagen anzeigen. Sie können das Datum auch im Vollformat wie Monat und Jahr ausdrucken. Es weiß auch, wann es ein Schaltjahr ist, bis zum Jahr 2100. Für die Kommunikation mit DS1307 können Sie das I2C-Protokoll verwenden.





Der DS1307 verfügt über einen eingebauten Akku, der ihn etwa ein Jahr lang ohne externe 5-V-Quelle mit Strom versorgen kann. Mithilfe dieses Batterie-Backups kann die Uhrzeit auch dann erhalten bleiben, wenn die Hauptstromversorgung ausgeschaltet ist. Es verfügt außerdem über 56 Byte SRAM zum Speichern einiger Daten. Der DS1307 ist ein praktisches Gerät, das in Kombination mit einem Arduino- oder ESP32-Board viele Anwendungsmöglichkeiten bietet. Diese Daten können beispielsweise bei der Datenprotokollierung, Alarmsystemen oder industriellen Steuerungen hilfreich sein. Wenn Sie eine zuverlässige Zeitmessung benötigen, ist die DS1307 eine großartige Option.





Technische Daten des RTC DS1307-Moduls

Das RTC DS1307-Modul besteht aus dem RTC-IC, einem EEPROM, einem Quarzoszillator und einem Batteriehalter zur Sicherung.



Nachfolgend finden Sie die Details dieser Teile:

DS1307 RTC-IC : Der DS1307 RTC IC ist ein 8-Pin-Chip, der Zeit und Datum mithilfe des I2C-Protokolls verfolgt. Es verbraucht sehr wenig Strom, weniger als 500 nA. Es kann die Zeit in Sekunden, Minuten und Stunden sowie das Datum in Tagen, Monaten und Jahren anzeigen. Es kann auch zwischen dem 24-Stunden- und dem 12-Stunden-Format umgeschaltet werden.

24C32 EEPROM-IC : Der 24C32 EEPROM IC ist ein 32-Byte-Chip von Atmel, der Einstellungen, Uhrzeit und Datum speichert. Es verwendet auch das I2C-Protokoll.

32,768-kHz-Kristall : Der 32,768-kHz-Quarzoszillator liefert die Taktfrequenz für den DS1307 RTC IC.

Batteriehalter : Der Batteriehalter fasst eine CR2032-Batterie. Es handelt sich um eine 3V-Lithium-Knopfzelle. Es versorgt den DS1307 RTC IC kontinuierlich mit Strom.

DS18B20 Sensorbereitstellung : Mit der DS18B20-Sensorbereitstellung können Sie den DS18B20-Temperatursensor löten und verwenden. Es ist nicht vorgelötet. Sie können das Durchkontaktierungspaket löten und die Temperatur vom DS-Pin des Moduls erhalten.

Die folgende Liste enthält einige kurze Spezifikationen des DS1307 RTC-Sensors:

  • Betriebsspannung: 4,5–5,5 V, typischerweise 5 V
  • Derzeitiger Verbrauch : Weniger als 1,5 mA
  • Genauigkeit : 0–40 °C, abhängig vom Kristall
  • Batterie : CR2032 (3-V-Münze)
  • Erinnerung : 56 Bytes nichtflüchtiger RAM
  • Schnittstelle : Zweidrahtige (I2C) serielle Schnittstelle
  • Ausgabe : 1-Hz-Ausgangspin
  • Programmierbarer Rechteckwellenausgang : Verbraucht im Batterie-Backup-Modus weniger als 500 nA
  • Erkennung von Stromausfällen : Automatische Stromausfallerkennung und Schaltkreise
  • Strommessschaltung : Bei Stromausfall kann automatisch auf Notstromversorgung umgeschaltet werden
  • Vergütung für Schaltjahre : Gültig bis zum Jahr 2100

Pinbelegung des RTC DS1307-Moduls

Das Modul verfügt über mehrere Pins mit unterschiedlichen Funktionen.

  • VCC ist der Pin, der eine Gleichspannung zwischen 3,3 V und 5,5 V benötigt, um das Modul mit Strom zu versorgen.
  • GND ist der Pin für Niederspannung oder Masse.
  • SDA Und SCL sind die Pins, die Daten und Taktsignale über den I2C-Bus kommunizieren.
  • DS ist der Pin, der die Temperatur mit dem DS1307-Sensor misst, falls Sie einen am RTC-Modul haben.
  • Quadrat ist der Pin, der je nach Programmierung ein Rechtecksignal mit einer Frequenz von 1 Hz, 4 kHz, 8 kHz oder 32 kHz erzeugt.
  • EINS ist der Pin, der eine 3-V-Batterie verwendet, um die Uhrzeit genau zu halten, wenn die Hauptstromversorgung ausgeschaltet ist.

2. So verbinden Sie RTC DS1307 und OLED-Display mit ESP32

Um ESP32 mit DS1307 und OLED-Display zu verbinden, können Sie die integrierten I2C-Pins der ESP32-Karte verwenden. Sowohl der DS1307 als auch das OLED-Display sind I2C-basierte Geräte. Anschließend kann mit dem I2C-Master-Slave-Protokoll über den I2C-Bus kommuniziert werden.

Bevor wir uns der Schnittstelle von ESP32 mit DS1307 und OLED-Display zuwenden, müssen Sie zunächst einige erforderliche Bibliotheken installieren.

Installieren der erforderlichen Bibliotheken

Sie benötigen zwei Bibliotheken, eine für das RTC-Modul und eine für das OLED-Display. Mithilfe von OLED mit einem RTC-Modul können Sie beeindruckende und interaktive Uhrenvorschauen erstellen. Wenn Sie nicht vorhaben, die Uhrzeit auf dem Bildschirm anzuzeigen, können Sie diese Bibliotheksinstallation überspringen.

Im Folgenden sind die beiden Bibliotheken aufgeführt, die Sie benötigen:

  • RTClib (von Adafruit) ist eine Arduino IDE-Bibliothek zum Einstellen und Abrufen der Zeit von einer RTC. Es bietet auch Klassen zum Bearbeiten von Datum, Uhrzeit und Dauer. Mit dieser Bibliothek können Sie Echtzeituhrmodule (RTC) wie DS1307 und DS3231 anbinden und programmieren.
  • S SD1306 (von Adafruit) ist eine Bibliothek für Arduino, mit der Sie die OLED-Displays mit Arduino oder einem anderen Mikrocontroller-Board verbinden und programmieren können.

Um beide Bibliotheken in der Arduino IDE herunterzuladen und zu installieren, öffnen Sie zunächst die Bibliotheksmanager Suchen Sie nach der RTClib-Bibliothek und klicken Sie auf Installieren :

Sie erhalten die Option, nur die Bibliothek oder ihre Abhängigkeiten zu installieren. Drücke den Alles installieren Klicken Sie auf die Schaltfläche, um die Bibliothek vollständig zu installieren. Auf diese Weise erhalten Sie keine Fehlermeldung, wenn Sie den Code ändern, der von den Abhängigkeiten dieser Bibliothek abhängt.

Suchen Sie auf ähnliche Weise nach der SSD1306-Bibliothek. Diese Bibliothek wird für ein OLED-Display benötigt. Klicken Installieren fortfahren.

Diesmal erhalten Sie auch die gleiche Bestätigungsnachricht. Klick auf das Alles installieren Möglichkeit.

Jetzt sind beide Bibliotheken für OLED und DS1307 installiert und einsatzbereit. Aber vorher solltest du zunächst die I2C-Adresse für das OLED-Display herausfinden.

3. Ermitteln der I2C-Adresse des OLED-Displays

Die I2C-Adresse ist eine eindeutige Kennung für jedes Gerät am I2C-Bus. Es ermöglicht dem Master-Gerät, mit einem bestimmten Slave-Gerät zu kommunizieren, indem es Daten an dessen Adresse sendet. Der Zweck der I2C-Adresse besteht darin, Konflikte und Verwechslungen zwischen mehreren Geräten am selben Bus zu vermeiden.

Um die Adresse eines I2C-Geräts zu erhalten, können Sie a verwenden einfache Skizze, die den Bus scannt und die Adressen ausdruckt der gefundenen Geräte. Alternativ können Sie im Datenblatt des Geräts nachsehen, welche Standardadresse oder konfigurierbare Adresse es hat.

Hier in unserem Fall wird nach dem Ausführen des I2C-Scannercodes die folgende I2C-Adresse des OLED-Bildschirms auf dem Arduino IDE-Terminal angezeigt.

Meistens besteht eine hohe Wahrscheinlichkeit, dass Sie das Gleiche auch bekommen 0x3C Adresse für Ihren OLED-Bildschirm.

4. Verbindung des OLED- und RTC-DS1307-Moduls mit ESP32

1. Verbinden Sie die SDA- und SCL-Pins sowohl des DS1307-Moduls als auch des OLED-Display an den I2C-Pins von ESP32. Normalerweise, Dies sind GPIO 21 und GPIO 22 , Sie können aber bei Bedarf auch beliebige andere Pins im Code zuweisen.

2. Verbinden Sie sowohl VCC als auch GND von DS1307 und das OLED-Display mit den 3,3-V- und GND-Pins von ESP32.

3. Setzen Sie eine CR2032-Knopfzellenbatterie in das DS1307-Modul ein, um die Echtzeituhr mit Strom zu versorgen.

4. Laden Sie den Beispielcode aus diesem Tutorial auf Ihr ESP32-Board hoch. Ändern Sie den Code für benutzerdefinierte Ausgaben.

Nach dem Hochladen startet eine Uhr ab der eingestellten Zeit und zeigt die Uhrzeit auf dem OLED-Bildschirm an.

5. Schaltplan

Der Schaltplan von ESP32 mit DS1307 ist einfach, es müssen nur vier Drähte angeschlossen werden. Sie können die I2C-Kabel SDA und SCL sowohl der OLED- als auch der DS1307-Sensoren kürzen. Um diese beiden Sensoren mit Strom zu versorgen, können ebenfalls der 3V3- und der GND-Pin der ESP32-Karte verwendet werden. Bei Bedarf können Sie die Stromversorgung auch über eine separate Quelle vornehmen.

Notiz : Es ist sicher, den RTC DS1307 über einen 3,3-V-Pin des ESP32 mit Strom zu versorgen, wenn die Stromgrenze des ESP32 nicht überschritten wird. Wenn Sie jedoch auf der sicheren Seite sein möchten, können Sie entweder eine separate Stromquelle für das RTC-Modul verwenden oder den DS3231-Sensor mit geringem Stromverbrauch ausprobieren, dessen Betriebsbereich zwischen 3,3 und 5,5 VDC liegt.

Das folgende Bild zeigt die Verbindung von ESP32 mit dem RTC DS1307-Sensor.

Wenn Sie den OLED-Bildschirm zur Anzeige der Uhrzeit anschließen möchten, können Sie die gleichen I2C-Pins und die Power-Pins des ESP32-Boards verwenden.

6. Code

Mit dem folgenden Code stellen wir das aktuelle Datum und die aktuelle Uhrzeit auf der RTC ein. Nach dem Einstellen der Uhrzeit zeigt der Code die Uhrzeit auf dem Arduino IDE-Terminal an. Bevor Sie den Code hochladen, müssen Sie ihn mit Ihrem aktuellen Datum und Ihrer aktuellen Uhrzeit aktualisieren.

#include „RTClib.h“
RTC_DS1307 DS1307_RTC;
char Wochentage [ 7 ] [ 12 ] = { 'Sonntag' , 'Montag' , 'Dienstag' , 'Mittwoch' , 'Donnerstag' , 'Freitag' , 'Samstag' } ;
ungültiges Setup ( ) {
Serial.begin ( 115200 ) ;
#ifndef ESP8266
während ( ! Seriell ) ;
#endif
Wenn ( ! DS1307_RTC.begin ( ) ) {
Serial.println ( „Konnte RTC nicht finden“ ) ;
während ( 1 ) ;
}
DS1307_RTC.adjust ( Terminzeit ( F ( __DATUM__ ) , F ( __ZEIT__ ) ) ) ;
}
Leere Schleife ( ) {
DateTime now = DS1307_RTC.now ( ) ;
Seriendruck ( jetzt.Jahr ( ) , DEZ ) ;
Seriendruck ( '/' ) ;
Seriendruck ( jetzt.Monat ( ) , DEZ ) ;
Seriendruck ( '/' ) ;
Seriendruck ( heutzutage ( ) , DEZ ) ;
Seriendruck ( '(' ) ;
Seriendruck ( Wochentage [ now.dayOfTheWeek ( ) ] ) ;
Seriendruck ( ') ' ) ;
Seriendruck ( jetzt.Stunde ( ) , DEZ ) ;
Seriendruck ( ':' ) ;
Seriendruck ( jetzt.Minute ( ) , DEZ ) ;
Seriendruck ( ':' ) ;
Seriendruck ( jetzt.zweiter ( ) , DEZ ) ;
Serial.println ( ) ;
Verzögerung ( 1000 ) ;
}

Dieser Code verwendet die RTClib-Bibliothek zur Schnittstelle mit einem DS1307-Echtzeituhrmodul, das Datum und Uhrzeit verfolgt.

Der aufstellen Die Funktion wurde mit der Initialisierung der Baudrate gestartet. Anschließend haben wir in diesem Abschnitt die Funktion zum Synchronisieren von Datum und Uhrzeit des Computers mit dem DS1307-Sensor definiert. Dadurch wird der Zeitpunkt der Codekompilierung auf den RTC-Sensor hochgeladen.

Du kannst den ... benutzen Schleife Funktion zum Abrufen von Datum und Uhrzeit von RTC. Dann können Sie es auf dem seriellen Monitor wie folgt anzeigen: Jahr/Monat/Tag (Wochentag) Stunde:Minute:Sekunde. Denken Sie daran, nach jeder Schleife eine Verzögerung von einer Sekunde hinzuzufügen, damit der Code nicht zu schnell ausgeführt wird.

Zeigen Sie die aktuelle Uhrzeit auf dem OLED-Display an

Um die gleiche Uhrzeit auf dem OLED-Bildschirm anzuzeigen, müssen wir einen zusätzlichen Codeteil für den OLED-Bildschirm hinzufügen. Laden Sie einfach den angegebenen Code hoch. Dieser Code zeigt die aktuelle Uhrzeit auf Ihrem OLED-Bildschirm an.

Denken Sie daran, dass wir hier das 0,96-Zoll-128×64-I2C-SSD-OLED-Anzeigemodul verwenden. Wenn Sie eine andere Größe verwenden, ändern Sie den Code entsprechend. Überprüfen Sie außerdem die I2C-Adresse und ändern Sie sie im angegebenen Code. In unserem Fall haben wir eine I2C-Adresse 0x3C für den OLED-Bildschirm.

#include
#include
#include
#include „RTClib.h“
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306-Anzeige ( SCREEN_WIDTH, SCREEN_HEIGHT, & Draht, - 1 ) ;
RTC_DS1307 RTC;
Char-Tage [ 7 ] [ 12 ] = { 'Sonntag' , 'Montag' , 'Dienstag' , 'Mittwoch' , 'Donnerstag' , 'Freitag' , 'Samstag' } ;
ungültiges Setup ( ) {
Serial.begin ( 115200 ) ;
Wenn ( ! RTC.begin ( ) ) {
Serial.println ( „Konnte RTC nicht finden“ ) ;
während ( 1 ) ;
}
RTC-Anpassung ( Terminzeit ( F ( __DATUM__ ) , F ( __ZEIT__ ) ) ) ;
Wenn ( ! display.begin ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Serial.println ( F ( „SSD1306-Zuweisung fehlgeschlagen“ ) ) ;
für ( ;; ) ;
}
Verzögerung ( 1000 ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setTextColor ( WEISS ) ;
display.setCursor ( 30 , zwanzig ) ;
display.println ( „Linux“ ) ;
Anzeige.Anzeige ( ) ;
Verzögerung ( 3000 ) ;
display.clearDisplay ( ) ;
}
Leere Schleife ( ) {
DateTime now = RTC.now ( ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setCursor ( 0 , 0 ) ;
anzeigen.drucken ( heutzutage ( ) ) ;
anzeigen.drucken ( '/' ) ;
anzeigen.drucken ( jetzt.Monat ( ) ) ;
anzeigen.drucken ( '/' ) ;
anzeigen.drucken ( jetzt.Jahr ( ) ) ;
display.println ( Tage [ now.dayOfTheWeek ( ) ] ) ;
display.println ( ' ' ) ;
display.setCursor ( 0 , 40 ) ;
Wenn ( jetzt.Stunde ( ) < 10 )
anzeigen.drucken ( '0' ) ;
anzeigen.drucken ( jetzt.Stunde ( ) ) ;
anzeigen.drucken ( ':' ) ;
Wenn ( jetzt.Minute ( ) < 10 )
anzeigen.drucken ( '0' ) ;
anzeigen.drucken ( jetzt.Minute ( ) ) ;
anzeigen.drucken ( ':' ) ;
Wenn ( jetzt.zweiter ( ) < 10 )
anzeigen.drucken ( '0' ) ;
display.println ( jetzt.zweiter ( ) ) ;
Anzeige.Anzeige ( ) ;
}

Der Code begann mit den Bibliotheken, die wir für die RTC und das Display installiert hatten. Danach werden die Bildschirmgröße und die Anzeigeadresse definiert. Es initialisiert das Array mit Wochentagsnamen.

Der aufstellen Teil beginnt mit der seriellen Kommunikation. Es prüft, ob die RTC und das Display funktionieren oder nicht. Danach haben wir einen String-Text „Linuxhint“ definiert, der 3 Sekunden lang angezeigt wird. Dies ist nur eine Eröffnungs- oder Startnachricht. Sie können diese Nachricht auch mit Ihrem benutzerdefinierten Text ändern.

Der Schleife Die Funktion ruft das Datum und die Uhrzeit des DS1307-Moduls ab. Danach wird die Anzeige gelöscht und Datum und Uhrzeit formatiert ausgedruckt. Der Code fügt außerdem führende Nullen zu den Stunden, Minuten und Sekunden hinzu, falls ihre Werte kleiner als 10 sind.

7. Hardware

Nachdem Sie den Code auf das ESP32-Board hochgeladen haben, sehen Sie die folgende Ausgabe auf dem OLED-Bildschirm. Als Hardware haben wir den OLED-Bildschirm und ein I2C RTC DS1307-Modul verwendet. Es wird ein ESP32-Board mit 30 Pins verwendet. Sie können auch mit jedem anderen ESP32-Board experimentieren, achten Sie jedoch darauf, die I2C-Pins richtig anzuschließen.

Abschluss

Der RTC DS1307 verfügt über einen 56-Byte-SRAM mit Batterie-Backup-Unterstützung. Es handelt sich um ein 8-Pin-Gerät, das ein I2C-Kommunikationsprotokoll verwendet. Um das DS1307 RTC-Modul mit dem ESP32 zu verbinden, können Sie die I2C-Pins (GPIO 22 (SCL) und GPIO 21 (SDA)) der ESP32-Karte verwenden. Sie können die Uhrzeit auf einer Arduino IDE-Konsole ausdrucken oder einen beliebigen Bildschirm wie OLED oder I2C-LCD verwenden, um die Uhrzeit anzuzeigen. Das RTC-Modul DS1307 ist ein nützliches Gerät zur Verfolgung von Uhrzeit und Datum in verschiedenen Anwendungen. Zu den Hauptanwendungen gehören Datenlogger, Digitaluhren und Smartwatches.