So verwenden Sie das DS3231 Real-Time Clock (RTC)-Modul mit einem ESP32

So Verwenden Sie Das Ds3231 Real Time Clock Rtc Modul Mit Einem Esp32



ESP32 ist ein intelligentes Mikrocontroller-Board mit integrierten Wi-Fi- und Bluetooth-Funktionen. ESP32 verfügt über eine interne RTC, deren Funktion jedoch von der Stromversorgung abhängt. Wenn Sie also Projekte oder Schaltkreise entwerfen möchten, die Sie auch dann ausführen möchten, wenn kein Strom vorhanden ist, müssen Sie ein externes RTC-Modul wie DS1307 oder DS3231 verwenden.

Wir haben bereits ein Tutorial dazu erstellt DS1307-Schnittstelle mit dem ESP32-Modul . Heute besprechen wir die Grundlagen des DS3231 RTC-Sensors und prüfen, wie man ihn mit der ESP32-Karte verbinden kann.

Inhaltsverzeichnis:







1. Was ist das DS3231 RTC-Modul?



2. So verbinden Sie DS3231 mit ESP32



3. Hardware





4. Code

5. Ausgabe



6. So zeigen Sie die RTC DS3231-Zeit auf einem OLED-Bildschirm mit ESP32 an

Abschluss

1. Was ist das DS3231 RTC-Modul?

Das DS3231-Modul bietet eine hochpräzise Zeitmessung. Es verfügt über einen integrierten temperaturkompensierten Quarzoszillator (TCXO), der uns die Zeit mit großer Präzision liefert. Das Modul arbeitet mit dem I2C-Protokoll unter Verwendung der Master-Slave-Konfiguration. Mit einer Pufferbatterie können Uhrzeit und Datum auch dann gespeichert werden, wenn keine Hauptstromversorgung vorhanden ist. Es wird häufig in Geräten verwendet, die zeit- und datumsabhängig sind.

Der DS3231 überwacht Sekunden, Minuten und Stunden. Es kann auch Daten und Wochentage aufzeichnen. Bei Schaltjahren wird die Zeit automatisch entsprechend angepasst. Außerdem kann die Uhrzeit sowohl im 12-Stunden- als auch im 24-Stunden-Format angezeigt werden, komplett mit einer AM/PM-Anzeige.

1.1. DS3231 vs. DS1307

Sowohl DS3231 als auch DS1307 sind Zeiterfassungsmodule mit Batterie-Backup-Unterstützung. Allerdings ist der DS3231 genauer als der DS1307. Der Hauptgrund dafür ist, dass DS1307 für die Zeitmessung auf einen externen 32-kHz-Quarz angewiesen ist.

Allerdings verfügt der RTC DS3231 über einen internen temperaturkompensierten Quarzoszillator (TCXO). Dadurch wird er weniger von der Außentemperatur beeinflusst und hat dadurch einen Genauigkeitsvorteil von einigen Minuten pro Jahr gegenüber dem DS1307.

1.2. DS3231 Pinbelegung

DS3231 arbeitet mit dem I2C-Protokoll. Das Herzstück dieses RTC-Moduls ist der von Maxim entwickelte präzise RTC-Chip. Dieser Chip verwaltet alle Zeitfunktionen und kommuniziert über I2C mit ESP32 oder dem Arduino-Board.

Die Hauptpins der RTC DS3231-Module sind:

  • VCC: Verbinden Sie diesen Pin mit dem Pluspol Ihrer Stromquelle.
  • Masse: Masseanschluss.
  • SDA: Serieller Daten-Pin (wird für die I2C-Kommunikation verwendet).
  • SCL: Serial-Clock-Pin (ebenfalls Teil der I2C-Schnittstelle).
  • QW: Rechteckwellen-Ausgangspin (kann ein periodisches Signal erzeugen, z. B. für Alarme oder andere Zeitsteuerungszwecke).
  • 32K: 32-kHz-Oszillatorausgang (nützlich für präzise Timing-Anwendungen).

Im Folgenden sind die wichtigsten Onboard-Komponenten des RTC DS3231-Moduls aufgeführt:

  • Batteriehalter: Dadurch kann das Modul weiterlaufen, auch wenn keine externe Stromversorgung vorhanden ist.
  • RTC-Chip: Dieser Chip speichert Uhrzeit und Datum.
  • AT24C32 EEPROM: Es bietet einen nichtflüchtigen Speicher für die Datenprotokollierung und andere Zwecke mit 1.000.000 Schreibzyklen.
  • TCXO: Temperaturkompensierter Oszillator zur Bereitstellung der richtigen Zeit für einen unterschiedlichen Temperaturbereich.
  • Temperatursensor: Es erfasst Temperaturwerte und stellt sie als Teil der Modulfunktion bereit.

2. So verbinden Sie DS3231 mit ESP32

Um DS3231 mit ESP32 zu verbinden, müssen Sie das installieren RTClib-Bibliothek Erste. Nach der Installation dieser Adafruit RTC-Bibliothek können Sie Ihr ESP32-Board über das I2C-Protokoll mit DS3231 verbinden. Um ESP32 I2C mit dem RTC DS3231-Modul zu verbinden, können Sie die Pins D21 und D22 des ESP32 verwenden.

2.1. Verdrahtungsplan von ESP32 mit RTC DS3231

Zuerst müssen Sie den ESP32 mit Ihrem I2C RTC DS3231-Modul verkabeln. Befolgen Sie für die Verkabelung die unten angegebene Pin-Konfiguration:

Nachdem Sie den ESP32 mit RTC DS3231 verbunden haben, sollte Ihr Schaltplan wie folgt aussehen. Sie können den DS3231 auch über den VIN-Pin des ESP32 mit Strom versorgen. Die Betriebsspannungen des DS3231 betragen 3,3 bis 5,5 VDC.

2.2. Installieren der erforderlichen Bibliotheken

Sobald die Schaltung fertig ist, besteht der nächste Schritt darin Konfigurieren Sie Ihr ESP32-Board mit der Arduino IDE . Für die Anbindung an DS3231 müssen Sie Folgendes installieren RTClib-Bibliothek . Sie können es mithilfe des Arduino IDE-Bibliotheksmanagers installieren.

3. Hardware

Für den Entwurf der DS3231-basierten RTC-Uhr mit ESP32 benötigen Sie folgende Hardware:

  • ESP32-Entwicklungsboard
  • RTC DS3231-Modul
  • CR2032-Batterie
  • Überbrückungsdrähte
  • Steckbrett

4. Code

Nach der Installation der RTC-Bibliothek besteht der nächste Teil darin, den Code für DS3231 zu schreiben und ihn auf die ESP32-Karte hochzuladen. Zuerst müssen Sie den Code schreiben, um Ihre aktuelle Uhrzeit einzustellen. Nachdem Sie die Zeit in DS3231 eingestellt haben, merkt sich DS3231 die Zeit und läuft weiter, auch wenn Ihr ESP32-Board ausgeschaltet wird.

Öffnen Sie nun die Arduino-IDE, kompilieren Sie den Code und brennen Sie ihn auf die ESP32-Karte.

#include
#include

RTC_DS3231 RTC ; // Initialisieren Sie eine Instanz der RTC_DS3231-Klasse

Leere aufstellen ( ) {
Seriell. beginnen ( 115200 ) ;
Draht. beginnen ( ) ;

Wenn ( ! RTC. beginnen ( ) ) {
Seriell. println ( „RTC nicht erkannt“ ) ;
während ( 1 ) ; // Auf unbestimmte Zeit hängen bleiben, wenn RTC nicht gefunden wird
}

//Kommentieren Sie die folgende Zeile aus, um das anfängliche Datum und die anfängliche Uhrzeit festzulegen
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

Leere Schleife ( ) {
// Aktuelle Uhrzeit vom Sensor lesen (DS3231)
DateTime jetzt = RTC. Jetzt ( ) ;

// Datum und Uhrzeit in derselben Zeile mit zwei Ziffern für Stunden, Minuten und Sekunden ausgeben
Seriell. drucken ( 'Aktuelles Datum: ' ) ;
Seriell. drucken ( Jetzt. Jahr ( ) , DEZ ) ;
Seriell. drucken ( „/“ ) ;
printTwoDigits ( Jetzt. Monat ( ) ) ;
Seriell. drucken ( „/“ ) ;
printTwoDigits ( Jetzt. Tag ( ) ) ;
Seriell. drucken ( ' Aktuelle Uhrzeit: ' ) ;
printTwoDigits ( Jetzt. Stunde ( ) ) ;
Seriell. drucken ( :: ) ;
printTwoDigits ( Jetzt. Minute ( ) ) ;
Seriell. drucken ( :: ) ;
printTwoDigits ( Jetzt. zweite ( ) ) ;
Seriell. println ( ) ;

Verzögerung ( 1000 ) ; // Alle 1 Sekunde aktualisieren
}

Leere printTwoDigits ( int Nummer ) {
Wenn ( Nummer < 10 ) {
Seriell. drucken ( „0“ ) ; // Bei einstelligen Zahlen eine führende Null hinzufügen
}
Seriell. drucken ( Nummer ) ;
}

4.1. Code-Erklärung

Der Code beginnt mit der Initialisierung der seriellen I2C-Kommunikation mithilfe einer Kabelbibliothek. Danach haben wir die RTC-Bibliothek von Adafruit für die Anbindung an das DS3231-Modul integriert. Diese Bibliothek bietet eine Funktion zur Interaktion mit dem RTC DS3231-Modul.

Im aufstellen Teilweise wird der I2C-Bus gestartet und auf verfügbare I2C-Geräte überprüft. Wenn es nicht gefunden wird, bleibt das Programm auf unbestimmte Zeit hängen. Die Baudrate ist ebenfalls definiert, sodass Sie die Ausgabe auf dem seriellen Arduino IDE-Monitor überprüfen können.

Die Uhr zum ersten Mal einstellen

Wenn Sie den DS3231 programmieren, müssen Sie dies tun Kommentieren Sie diese Zeile aus . Dadurch wird Ihre Systemzeit ermittelt und im RTC-Speicher gespeichert. Dadurch wird die Uhr des RTC-Moduls mit Ihrer Systemuhr synchronisiert.

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

Nachdem die Zeit eingestellt wurde, müssen Sie den obigen Code erneut hochladen, dieses Mal jedoch Kommentieren Sie die Funktionszeile rtc.adjust() . Andernfalls wird Ihre zuvor eingestellte Zeit überschrieben und wenn Ihr ESP32 ausgeschaltet wird, startet die RTC erneut ab dem Zeitpunkt, an dem Sie den Code hochgeladen haben.

Dadurch bleibt Ihre Zeit im Hintergrund des RTC-Moduls erhalten, solange das RTC-Modul in seiner CR2032-Zelle mit Strom versorgt wird.

Im Schleife Teilweise werden das aktuelle Datum und die aktuelle Uhrzeit mithilfe der Funktion rtc.now() aus dem DS3231-Modul gelesen. Die Datums- und Uhrzeitkomponenten werden extrahiert und das formatierte Datum jede Sekunde auf dem seriellen Arduino IDE-Monitor gedruckt.

5. Ausgabe

Nachdem Sie den Code auf die ESP32-Karte hochgeladen haben, sehen Sie, dass die Uhrzeit auf dem seriellen Arduino IDE-Monitor gedruckt wird.

6. So zeigen Sie die RTC DS3231-Zeit auf dem OLED-Bildschirm mit ESP32 an

Sie können auch noch einen Schritt weiter gehen und die Uhrzeit auf Ihrem OLED-Bildschirm anzeigen, nachdem Sie sie vom DS3231 abgelesen haben. Dazu müssen Sie das installieren Adafruit GFX SSD1306-Bibliothek in der Arduino IDE.

Nach der Installation verbinden Sie den ESP32 mit dem OLED- und RTC-Modul in der folgenden Konfiguration.

Nachdem Sie Ihren Sensor angeschlossen haben, sehen Sie, dass der Schaltkreis wie im folgenden schematischen Diagramm aussieht.

Laden Sie nun den folgenden DS3231-Code auf das ESP32-Board hoch.

#include
#include
#include
#include „RTClib.h“

RTC_DS3231 RTC ;

verkohlen Tage [ 7 ] [ 12 ] = { 'Sonntag' , 'Montag' , 'Dienstag' , 'Mittwoch' , 'Donnerstag' , 'Freitag' , 'Samstag' } ;

Adafruit_SSD1306-Anzeige = Adafruit_SSD1306 ( 128 , 64 , & Draht , - 1 ) ;

Leere aufstellen ( ) {
Seriell. beginnen ( 115200 ) ;

Anzeige. beginnen ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

Wenn ( ! RTC. beginnen ( ) ) {
Seriell. println ( „RTC konnte nicht gefunden werden! Schaltkreis prüfen.“ ) ;
während ( 1 ) ;
}
// Kommentieren Sie die folgende Zeile aus, während Sie die Zeit zum ersten Mal einstellen
//rtc.adjust(DateTime(__DATE__, __TIME__));
Anzeige. klareAnzeige ( ) ;
Anzeige. setTextColor ( WEISS ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 0 , zwanzig ) ;
Anzeige. drucken ( „RTC-UHR“ ) ;
Anzeige. Anzeige ( ) ;
Verzögerung ( 5000 ) ;
}

Leere Schleife ( ) {
DateTime jetzt = RTC. Jetzt ( ) ;

Anzeige. klareAnzeige ( ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 75 , 0 ) ;
Anzeige. println ( Jetzt. zweite ( ) , DEZ ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 25 , 0 ) ;
Anzeige. println ( :: ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 65 , 0 ) ;
Anzeige. println ( :: ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 40 , 0 ) ;
Anzeige. println ( Jetzt. Minute ( ) , DEZ ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 0 , 0 ) ;
Anzeige. println ( Jetzt. Stunde ( ) , DEZ ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 0 , 25 ) ;
Anzeige. println ( Jetzt. Tag ( ) , DEZ ) ;
Anzeige. drucken ( Tage [ Jetzt. Wochentag ( ) ] ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( zwanzig , 25 ) ;
Anzeige. println ( „-“ ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 35 , 25 ) ;
Anzeige. println ( Jetzt. Monat ( ) , DEZ ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 60 , 25 ) ;
Anzeige. println ( „-“ ) ;
Anzeige. setTextSize ( 2 ) ;
Anzeige. setCursor ( 75 , 25 ) ;
Anzeige. println ( Jetzt. Jahr ( ) , DEZ ) ;
Anzeige. Anzeige ( ) ;
}

Code-Erklärung

Der Code begann mit einigen wichtigen Bibliotheken, die für RTC- und OLED-Bildschirme erforderlich sind. Das OLED-Display wird mithilfe der Adafruit SSD1306-Bibliothek eingerichtet.

Im Schleifenteil werden das aktuelle Datum und die aktuelle Uhrzeit mithilfe von rtc.now() ermittelt. Danach wird der OLED-Bildschirm gelöscht und die Zeitkomponenten werden im Digitaluhrformat angezeigt. Sie können den Code auch ändern, um das Datums- und Uhrzeitformat anzupassen.

Sobald der Code auf Ihr Board hochgeladen ist, wird Ihnen die aktuelle Uhrzeit auf dem OLED-Bildschirm angezeigt.

Notiz: Der obige Code verwendet die 0x3C I2C-Adresse für OLED. Dies ist die häufigste I2C-Adresse, die auf SSD1306-OLED-Displays verfügbar ist. Wenn Sie die I2C-Adresse für Ihren OLED-Bildschirm finden möchten, können Sie Folgendes ausführen I2C-Scannercode .

Abschluss

DS3231 ist ein RTC-Sensor, der zur Zeitmessung verwendet werden kann. Es verfügt über eine Notstrombatterie, die die Zeit auch dann genau hält, wenn Ihr Mikrocontroller-Board ausgeschaltet ist. Um ESP2 mit DS3231 zu verbinden, müssen Sie die RTClib-Bibliothek in Ihrer Arduino IDE installieren. Danach müssen Sie das RTC-Modul über das I2C-Protokoll mit dem digitalen Pin von ESP32 verbinden. Sobald die Verbindung hergestellt ist, laden Sie einfach den Code hoch und stellen Sie die Uhrzeit ein. Jetzt misst der RTC-Sensor die Zeit und Sie können sie bei zeitbasierten Entwurfsprojekten auf Ihrem seriellen Monitor ablesen.