Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!
Lektion 16: Echtzeituhrmodul (DS1302)
In dieser Lektion lernen Sie, wie Sie ein Echtzeituhrmodul (RTC) mit einem ESP32-Entwicklungsboard einrichten und verwenden. Wir werden die Integration des DS1302 RTC-Moduls, das Verständnis seiner Funktionen und die Programmierung des ESP32 zur Anzeige des aktuellen Datums und der Uhrzeit behandeln. Außerdem erfahren Sie, wie Sie Situationen handhaben, in denen das RTC-Modul seine Datums- und Uhrzeiteinstellungen verloren hat und automatisch auf die Kompilierungszeit Ihres Sketches eingestellt wird. Dieses Projekt ist ideal für diejenigen, die ihr Verständnis für zeitbezogene Funktionen in Mikrocontroller-Projekten erweitern möchten.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
Name |
ITEMS IN THIS KIT |
LINK |
|---|---|---|
Universal Maker Sensor Kit |
94 |
Sie können sie auch einzeln über die unten stehenden Links kaufen.
Component Introduction |
Purchase Link |
|---|---|
ESP32 & Development Board |
|
Verdrahtung
Code
Bemerkung
Um die Bibliothek zu installieren, verwenden Sie den Arduino Library Manager und suchen Sie nach „Rtc by Makuna“ und installieren Sie sie.
Code-Analyse
Initialisierung und Bibliotheks-Einbindung
Bemerkung
Um die Bibliothek zu installieren, verwenden Sie den Arduino Library Manager und suchen Sie nach „Rtc by Makuna“ und installieren Sie sie.
Hier werden die notwendigen Bibliotheken für das DS1302 RTC-Modul eingebunden.
#include <ThreeWire.h> #include <RtcDS1302.h>
Pins definieren und RTC-Instanz erstellen
Pins für die Kommunikation werden definiert und eine Instanz der RTC erstellt.
const int IO = 27; // DAT const int SCLK = 14; // CLK const int CE = 26; // RST ThreeWire myWire(IO, SCLK, CE)); RtcDS1302<ThreeWire> Rtc(myWire);
setup()-FunktionDiese Funktion initialisiert die serielle Kommunikation und richtet das RTC-Modul ein. Verschiedene Überprüfungen werden durchgeführt, um sicherzustellen, dass die RTC korrekt läuft.
void setup() { Serial.begin(9600); Serial.print("compiled: "); Serial.print(__DATE__); Serial.println(__TIME__); Rtc.Begin(); RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__); printDateTime(compiled); Serial.println(); if (!Rtc.IsDateTimeValid()) { // Common Causes: // 1) first time you ran and the device wasn't running yet // 2) the battery on the device is low or even missing Serial.println("RTC lost confidence in the DateTime!"); Rtc.SetDateTime(compiled); } if (Rtc.GetIsWriteProtected()) { Serial.println("RTC was write protected, enabling writing now"); Rtc.SetIsWriteProtected(false); } if (!Rtc.GetIsRunning()) { Serial.println("RTC was not actively running, starting now"); Rtc.SetIsRunning(true); } RtcDateTime now = Rtc.GetDateTime(); if (now < compiled) { Serial.println("RTC is older than compile time! (Updating DateTime)"); Rtc.SetDateTime(compiled); } else if (now > compiled) { Serial.println("RTC is newer than compile time. (this is expected)"); } else if (now == compiled) { Serial.println("RTC is the same as compile time! (not expected but all is fine)"); } }
loop()-FunktionDiese Funktion holt periodisch das aktuelle Datum und die Uhrzeit von der RTC und gibt sie im seriellen Monitor aus. Es wird auch überprüft, ob die RTC weiterhin ein gültiges Datum und eine gültige Uhrzeit beibehält.
void loop() { RtcDateTime now = Rtc.GetDateTime(); printDateTime(now); Serial.println(); if (!now.IsValid()) { // Common Causes: // 1) the battery on the device is low or even missing and the power line was disconnected Serial.println("RTC lost confidence in the DateTime!"); } delay(5000); // five seconds }
Datum- und Uhrzeitausgabe-Funktion
Eine Hilfsfunktion, die ein
RtcDateTime-Objekt entgegennimmt und das formatierte Datum und die Uhrzeit im seriellen Monitor ausgibt.void printDateTime(const RtcDateTime& dt) { char datestring[20]; snprintf_P(datestring, countof(datestring), PSTR("%02u/%02u/%04u %02u:%02u:%02u"), dt.Month(), dt.Day(), dt.Year(), dt.Hour(), dt.Minute(), dt.Second()); Serial.print(datestring); }