ESPTOP 10 NTP -Client -Server Erhalten Sie Datum und Uhrzeit - Arduino IDE

ESPTOP 10 NTP -Client -Server Erhalten Sie Datum und Uhrzeit - Arduino IDE
ESP32 ist ein Mikrocontroller -basierter Internet of Things (IoT), das mit einer Vielzahl von Geräten verbunden werden kann. ESP32 wird in IoT -basierten Projekten häufig verwendet.

Die Arbeit mit ESP32 oder einer anderen Mikrocontroller -Zeit ist sehr wichtig, da der eingebaute Timer nicht so genau ist, damit wir a verwenden können NTP Server zum Abrufen von Echtzeit und kann es in einer Variablen speichern, die später im ESP32 -Code verwendet werden kann.

NETP -Zeitprotokoll (NTP) verwendet die koordinierte Universal Time (UTC), die die Systemuhr mit großer Präzision und Genauigkeit synchronisiert. In kleineren Netzwerken kann NTP uns Uhren so genau wie 1 ms zur Verfügung stellen, während größere Netzwerke wie LAN (örtliches Gebietsnetzwerk) NTP mit zehn Millisekunden über das Internet Genauigkeit anbieten können. Mit dieser genauen Uhr ESP32 kann Anweisungen zu einem bestimmten Zeitpunkt ausführen.

Dieser Leitfaden enthält den folgenden Inhalt:

  • 1: Einführung in NTP (Netzwerkzeitprotokoll)
  • 2: NTP -Server- und Zeiteinstellungen
    • 2.1: NTP -Server:
    • 2.2: GMT -Offset:
    • 2.3: Tageslichtversatz
  • 3: Drucken in Echtzeit mithilfe der Funktion printlocaltime () drucken
    • 3.1: Code zum Drucken in Echtzeit
    • 3.2: Ausgabe

1: Einführung in NTP (Netzwerkzeitprotokoll)

NTP ist eine Abkürzung von NEtwork Time PRotocol ist ein Standard, der zur Synchronisierungsgerätezeit mit ihrer Zeitzone verwendet wird. Das Netzwerkzeitprotokoll synchronisiert die Zeit aller Netzwerkgeräte mit der UTC, die auch als koordinierte Universal Time bezeichnet wird.

UTC ähnelt GMT (Greenwich Mean Time), ändert sich aber nicht und bleibt weltweit gleich. Die Hauptidee hinter der Verwendung der UTC ist es, die Zeit aus dem zu lesen NTP Server und durch Anwenden des UTC -Offsets können wir die lokale Zeit gemäß unserer Zeitzone erhalten.

2: NTP -Server- und Zeiteinstellungen

Um die Zeit vom NTP -Server zu lesen, müssen wir mit diesen Variablen die folgenden Variablen im Code deklarieren.

  • NTP -Server
  • GMT -Offset
  • Tageslichtversatz

1: NTP -Server

Wir werden die Zeit von beantragen Schwimmbad.NTP.Org Dies enthält weltweite Zeitdaten auf dem Server, und jeder kann seine lokale Zeit mit diesem Pool anfordern. Im Folgenden finden Sie einige andere Server, auf die wir zugreifen können:

Bereich Hostname
Weltweit Schwimmbad.NTP.Org
Asien Asien.Schwimmbad.NTP.Org
Europa Europa.Schwimmbad.NTP.Org
Nordamerika Nordamerika.Schwimmbad.NTP.Org
Ozeanien Ozeanien.Schwimmbad.NTP.Org
Südamerika Südamerika.Schwimmbad.NTP.Org

2: GMT -Offset

Der GMT -Offset beschreibt den Zeitunterschied in Stunden zwischen der Zeitzone, die Sie bis zur GMT leben. Wenn wir beispielsweise die Zeitzone der USA verwenden, können wir sie darauf einstellen UTC = -11: 00.

3: Tageslichtversatz

Hier ist der Tageslichtversatz die Tageslichtsparzeit, die normalerweise als 1 Stunde dauern wird. Tageslichtsparzeit bedeutet, die Uhr 1 Stunde im Sommer nach vorne zu bewegen und sie im Winter wieder zu wechseln. Dieser Befehl wird normalerweise verwendet, wenn eine benutzerdefinierte Zeitzone verwendet wird und die Vollstreckungsregel bei Tageslicht angewendet wird.

Da wir jetzt die Grundlagen des NTP -Servers behandelt haben.

3: Drucken in Echtzeit mithilfe der Funktion printlocaltime () drucken

Der printlocaltime () Funktion ruft die auf getlocaltime () Funktion, die die Anforderung an den NTP -Server sendet und das empfangene Datum und die empfangene Uhrzeit in der TimeInfo Variable.

1: Code zum Drucken in Echtzeit

Fügen Sie den angegebenen Code für den NTP -Client -Server im Arduino IDE -Editor ein. Schließen Sie ESP32 mit PC an, wählen Sie den COM -Port und hochladen Code hoch.

#enthalten
#include "Zeit.H"
const char* ssid = "network ssid";
const char* password = "Netzwerkkennwort";
const char* ntpserver = "Pool.NTP.org ";
const long gmtoffset_sec = 18000; /*GMT -Offset +5 Stunden (18000 Sek.)*/
const int tagLightOffset_sec = 3600; /*1 Stunde Tageslichtversatz*/
void printlocaltime ()
Struktur TM TimeInfo;
Wenn(!getlocaltime (& timeInfo))
Serie.println ("keine Zeit erhalten");
zurückkehren;

Serie.println (& timeInfo, " %A, %b %d %y %H: %M: %s");

void setup ()
Serie.Beginnen Sie (115200);
// eine Verbindung zu WLAN herstellen
Serie.printf ("Anschluss an %s", SSID);
W-lan.Beginnen Sie (SSID, Passwort);
während (WiFi.Status() != Wl_connected)
Verzögerung (500);
Serie.drucken(".");

Serie.println ("verbunden");
// init und die Zeit bekommen
configTime (GMTOFFSET_SEC, DayLightOffset_sec, NTPServer);
printlocalTime ();
// WLAN trennen, da es nicht mehr benötigt wird
W-lan.trennen (wahr);
W-lan.Modus (WiFi_OFF);

void Loop ()
Verzögerung (1000);
printlocalTime ();

Der Code begann mit der Einbeziehung der WLAN- und Zeitbibliothek. W-lan Die Bibliothek hilft dabei, ESP32 mit einem Netzwerk zu verbinden Zeit Die Bibliothek leitet die NTP -Serversynchronisation ab.

Danach ist SSID und Passwort des Netzwerks, mit dem ESP32 eine Verbindung hergestellt wird. Ersetzen Sie hier Ihren Netzwerkanmeldeinformationen. Danach haben wir definiert GMT -Offset AS 18000 Sek. Was ist (UTC+5 Stunden). Sie können hier Ihre eigene Zeitzone -UTC ersetzen. Folgen Sie dem Link, um den GMT -Offset für Ihre Zeitzone zu erhalten.

Zusätzlich wird die NTP -Serveradresse unter Verwendung des Befehls angegeben:

const char* ntpserver = "Pool.NTP.org ";

Dieser Befehl wählt automatisch den Zeitserver aus, der Sie durchsucht. Wir können jedoch auch eine Zeitzone mit den in der erklärten NTP -Servern festlegen NTP -Server Abschnitt.

Am Ende konfigurieren wir den ESP32 als NTP -Client und um Datum und Uhrzeit zu erhalten. Dafür haben wir das benutzt configTime () Funktion.

Schließlich die Verwendung der printlocaltime () Funktion, das aktuelle Datum und die aktuelle Uhrzeit werden auf dem seriellen Monitor gedruckt. Diese Funktion enthält eine Zeitstruktur tm das speichert alle Informationen in der TimeInfo Variable.

Die folgenden Befehle repräsentieren die TimeInfo Struktur.

Serie.println (& timeInfo, " %A, %b %d %y %H: %M: %s");

Jede Zeitstruktur der Zeit bezieht sich auf bestimmte Informationen:

Spezifizierer Information
%A Rückkehr Tag einer Woche
%B Rückkehrmonat
%D Rückkehr Tag des Monats
%Y Return Current Year
%H Return Current Hour
%M Aktuelle Minuten zurückgeben
%S Aktuelle Sekunden zurückgeben

2: Ausgabe

Nach dem Hochladen von Code ESP32 wird eine Verbindung zu einem WLAN -Netzwerk hergestellt und eine Anforderung an den NTP -Server gesendet, um das aktuelle Datum und die aktuelle Uhrzeit zu erhalten. Die folgende Ausgabe ist auf dem Arduino -Serienmonitor zu sehen.

Die aktuelle Zeit auf meinem PC und ESP32 wird übereinstimmt.

Wir haben die Zeit von NTP Server mit ESP32 als Client erfolgreich gelesen.

Abschluss

Die Zeit ist sehr wichtig für Anwendungen wie Zeitstempel und Ausführung von Anweisungen zu bestimmten Zeiten, um Ausgaben zu generieren. Eingebaute Timer sind nicht so genau, sodass wir einen NTP -Server verwenden können, um die aktuelle Uhrzeit und Datum zu lesen. Diese Zeit kann in einer Variablen gespeichert werden, die in unserem Code verwendet werden soll. Diese Lektion hilft bei der genauen Zeit für jede Zeitzone auf der ganzen Welt mit ESP32.