Internetuhr mit ESPTOP 10 & LCD -Display mit dem NTP -Client- und Arduino -Code

Internetuhr mit ESPTOP 10 & LCD -Display mit dem NTP -Client- und Arduino -Code
Der ESP32 ist ein leistungsstarker, featurepaptierter Mikrocontroller, der die Unterstützung von Wi-Fi, Bluetooth und einer Vielzahl von Peripheriegeräten umfasst. Eine interessante Anwendung des ESP32 ist als NTP (Network Time Protocol) Uhr, mit der die aktuelle Zeit auf einem LCD -Bildschirm angezeigt werden kann.

Das Einrichten einer ESP32-NTP-Uhr ist relativ einfach, da das ESP32 integrierte Unterstützung für NTP und viele Bibliotheken zur Unterstützung des LCD-Displays zur Verfügung stehen. Nach der Konfiguration kann die ESP32 -NTP -Uhr verwendet werden, um die Zeit mit hoher Genauigkeit zu verfolgen, selbst wenn sie vom Internet getrennt werden.

Jetzt werden wir eine NTP -basierte Uhr mit ESP32 entwerfen.

Komponenten erforderlich

Um eine NTP-Internet-basierte Uhr mit ESP32 zu entwerfen, sind folgende Komponenten erforderlich:

  • ESP32 Vorstand
  • 16x2 I2C LCD -Anzeige
  • Drähte verbinden
  • Brotbrett

Einführung in NTP (Netzwerkzeitprotokoll)

Das Netzwerkzeitprotokoll (NTP) ist ein Netzwerkprotokoll für die Taktsynchronisation zwischen Computersystemen. Es wird verwendet, um sicherzustellen, dass die Uhren auf verschiedenen Geräten miteinander synchronisiert sind, auch wenn sie sich in verschiedenen Teilen der Welt befinden.

NTP arbeitet mit einer Hierarchie von Zeitservern, wobei jeder Server seine Uhr mit einer genaueren Zeitquelle synchronisiert. Dadurch können Geräte ihre Uhren mit einem hohen Maß an Genauigkeit synchronisieren, normalerweise innerhalb weniger Millisekunden.

NTP ist ein wichtiges Protokoll für viele Anwendungen, einschließlich Computernetzwerke, Finanztransaktionen und wissenschaftlicher Forschung. Es wird auch verwendet, um die Zeit auf digitalen Uhren und anderen Geräten zu synchronisieren.

Wie funktioniert NTP??

Das Netzwerkzeitprotokoll (NTP) funktioniert, indem er Zeitstempel zwischen Servern und Clients sendet und empfängt, wobei eine Kombination aus der aktuellen Zeit und der Zeit verwendet wird, die für die Senden und Empfangen der Nachricht benötigt wird.

Der NTP-Server verwaltet eine hochpräzisen Referenzuhr und passt diese Uhr an, um die Uhren auf anderen Geräten anzupassen. Der NTP-Client sendet eine Anfrage an den Server, und der Server antwortet mit der aktuellen Zeit und anderen Daten, wie z. Der Client verwendet diese Informationen dann, um seine eigene Uhr anzupassen und die genaue Zeit zu halten.

Der NTP -Client passt seine lokale Uhr mit dem Online -NTP -Server mithilfe der im Arduino -Code definierten Linkverzögerung und dem lokalen Offset an.

Internetuhr mit ESP32- und LCD -Display mit dem NTP -Client

Das Entwerfen einer NTP-server-basierten Uhr in Echtzeit mit ESP32 hat viele Vorteile. Da es nicht vom internen RTC -Modul abhängt, können wir mit dem NTP -Server genau Zeit erhalten. Um diese Uhr zuerst zu entwerfen, müssen wir einige notwendige Bibliotheken in der Arduino -IDE installieren.

Installation der erforderlichen Bibliotheken

Um die ESP32 -Internetuhr mithilfe von NTP Server zu erstellen und die Zeit auf dem LCD -Bildschirm anzuzeigen, müssen wir folgende Bibliotheken installieren:

  • Laden Sie die NTPClient -Bibliothek herunter
  • Download Time Library
  • Laden Sie die I2C LCD -Bibliothek herunter

Klicken Sie auf den Link, um die NTPClient -Bibliothek herunterzuladen.

Um die Zeitbibliothek herunterzuladen, öffnen Sie den Link und klicken Sie auf Download Reißverschluss.

Nachdem beide Bibliotheken heruntergeladen wurden, öffnen Sie IDE und gehen Sie zu: Skizze> Bibliothek einschließen> Hinzufügen .ZIP -Bibliothek.

Installieren Sie beide Bibliotheken nacheinander. Öffnen Sie nun die Zeit auf dem LCD -Bildschirm, öffnen Sie den Bibliotheksmanager und installieren Sie die Liquidcrystal i2c Bibliothek von Frank.

Nach der Installation der erforderlichen Bibliotheken können wir ESP32 in ein LCD -Display integrieren.

Verkabelung des LCD mit dem ESP32

Es ist möglich, ein LCD -Display mit einem ESP32 über seine I2C -Stifte zu verbinden. SDA Pin ist bei D21 und SCL/SCK ist bei d22. Schließen Sie ESP32 mit LCD an, wie im folgenden Bild gezeigt:

Im Folgenden finden Sie die Verbindungen:

I2C LCD ESP32
VCC Vin
GND GND
SDA D21
Scl D22

Erhalten Sie die I2C LCD -Adresse

Nach dem Verbinden des I2C LCD mit ESP32 ist es wichtig, die I2C -Adresse zu überprüfen. Wenn man mehr als ein Gerät im selben i2C -Bus verwendet, kann ESP32 nicht mit beiden kommunizieren.

Verwenden Sie immer Geräte mit verschiedenen i2c -Adressen. Um die i2c -Adresse zu erhalten, werden wir die verwenden Kabel Bibliothek. Für den detaillierteren Arduino-Code finden Sie den Artikel.

Hier hat der LCD, den wir verwenden, eine I2C -Adresse 0x27.

Code für ESP32 -Internetuhr

Öffnen Sie die IDE und laden Sie Code hoch, um eine Verbindung zu einem NTP -Server herzustellen. Sobald ESP32 mit der im Code definierten WLAN -Verbindung, dem Arduino -Serienmonitor, an den NTP -Server verbunden ist, und I2C LCD wird in Echtzeit angezeigt.

#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
int lcd_columns = 16; /*LCD -Größe definieren*/
int lcd_rows = 2;
LiquidCrystal_I2C LCD (0x27, LCD_Columns, LCD_ROWS); /*0x27 I2C -Adresse für LCD*/
const char *ssid = "ssid"; /*Ersetzen Sie durch Ihr Netzwerk SSID*/
const char *password = "password"; /*Durch Netzwerkkennwort ersetzen*/
Wifiudp ntpudp;
Ntpclient timeclient (NTPUDP, "Zeit.NIST.Gov ", 18000, 60000);
Zeichenzeit [] = "Zeit: 00: 00: 00";
Zeichendatum [] = "Datum: 00/00/2000";
byte last_second, Second_, Minute_, Hour_, Day_, Monat;
int Jahr_;
void setup ()
Serie.Beginnen Sie (115200);
LCD.drin(); /*LCD -Anzeige initialisieren*/
LCD.Backlight (); /*Auf LCD -Hintergrundbeleuchtung*//
LCD.setCursor (0, 0); /*Cursor einstellen*/
LCD.print ("Zeit"); /*Druckenzeit auf LCD*/
LCD.setCursor (0, 1); /*LCD Cursor einstellen*//
LCD.Datum des Drucks); /*Datum des Drucks*/
W-lan.Beginnen Sie (SSID, Passwort); /*Beginnen Sie WiFi*////
Serie.drucken ("Verbinden.");
während (WiFi.Status() != Wl_connected)
Verzögerung (500);
Serie.drucken(".");

Serie.println ("verbunden");
Zeitklient.Start();
Verzögerung (1000);
LCD.klar(); /*LCD -Anzeige löschen*/

void Loop ()
Zeitklient.aktualisieren();
nicht signiert long unix_epoch = timeclient.GetePochTime (); // Erhalten Sie die Unix -Epoch -Zeit vom NTP -Server
Second_ = Second (UNIX_EPOCH);
if (last_second != Second_)
Minute_ = Minute (UNIX_EPOCH);
Hour_ = Hour (UNIX_EPOCH);
DAY_ = DAY (UNIX_EPOCH);
Monat_ = Monat (UNIX_EPOCH);
Jahr_ = Jahr (UNIX_EPOCH);
Zeit [12] = Second_ % 10 + 48;
Zeit [11] = Second_ / 10 + 48;
Zeit [9] = Minute_ % 10 + 48;
Zeit [8] = Minute_ / 10 + 48;
Zeit [6] = Hour_ % 10 + 48;
Zeit [5] = Hour_ / 10 + 48;
Datum [5] = Day_ / 10 + 48;
Datum [6] = Day_ % 10 + 48;
Datum [8] = Monat_ / 10 + 48;
Datum [9] = Monat_ % 10 + 48;
Datum [13] = (Jahr_ / 10) % 10 + 48;
Datum [14] = Jahr_ % 10 % 10 + 48;
Serie.println (Zeit); /*Druckt die Zeit auf Serienmonitor*/
Serie.println (Datum); /*Druckdatum auf Serienmonitor*/
LCD.setCursor (0, 0); /*LCD Cursor einstellen*//
LCD.drucken (Zeit); /*Anzeigezeit auf LCD*/
LCD.setCursor (0, 1); /*LCD Cursor einstellen*//
LCD.Datum des Drucks); /*Datum des LCD anzeigen*/
last_second = Second_;

Verzögerung (200);

Mit dem obigen Code können wir NTP -Zeit vom Server erhalten. Um die richtige Zeit für LCD zu erhalten, müssen Sie Änderungen entsprechend Ihrer Zeitzone vornehmen.

Ntpclient timeclient (NTPUDP, Asien.Schwimmbad.NTP.org ", 18000, 60000);

Derzeit ist das Land, in dem ich lebe, 5 Stunden vor der koordinierten universellen Zeit (UTC -Zeit). Also muss ich 5 Stunden in Sekunden konvertieren.

+5 Stunden = 5x60x60 = 18.000 Sekunden

Ändern Sie diese Zeitzone nach Ihrem Standort. Sie können Google verwenden, um die zu überprüfen mittlere Greenwich-Zeit Offset für Ihr Land.

Ändern Sie zusätzlich das Netzwerk SSID und das im Code definierte Kennwort.

Der Code wurde mit den installierten Bibliotheken gestartet. I2C LCD, ESP32 WiFI, NTPCLISSE und TIME Library.

Ntpclient.H Die Bibliothek verbindet ESP32 mit NTP Server und Wifiudp.H Senden und empfangen UDP -Nachrichten.

Um mit dem NTP Time Server -UDP -Protokoll zu kommunizieren, wird verwendet. Um Zeit vom NTP -Internetserver zu erhalten.

Ntpclient timeclient (NTPUDP, Asien.Schwimmbad.NTP.org ", 18000, 60000);

Der NTP -Server sendet Zeitinformationen an ESP32. Zeit erhalten ist in Unix Timestamp (UNIX Epoch) Format. Die Zeitbibliothek konvertiert die Unix -Epochezeit in Minuten, Stunden und Tagesformat.

Nächste I2C -Adresse (0x27) des LCD ist definiert. Zusätzlich ist die Größe des LCD 16 × 2 auch konfiguriert.

In Schleife Funktion Zeitklient.aktualisieren() Die Funktion erhält Zeit vom NTP -Server und speichert sie in der Zeitvariablen.

Ausgang

Auf dem seriellen Monitor sehen Sie die folgende Ausgabe:

Zeigen Sie auf der LCD eine Uhr mit aktualisiertem Datum und Uhrzeit an.

Abschluss

ESP32 ist ein kompaktes Mikrocontroller -basierter IoT -Board. Dieser Artikel behandelt alle Schritte, die zum Entwerfen einer Echtzeit-NTP-Server-basierten Uhr erforderlich sind. Die Ausgabe wird auf dem LCD -Bildschirm mit dem Arduino -Code angezeigt. Durch Einstellen des korrekten NTP -Server.