Wie du mit einem ESP per WLAN im Internet die Zeit abfragen kannst, lernst du in diesem Beitrag.
Zunächst benötigst du eine neue Bibliothek, welche man sich über den Bibliotheksverwalter in der Arduino IDE installieren kannst. Dafür sucht man nach „NTPClient“ und installiert die neuste Version von „Fabrice Weinberg“.
Anschließend kann man durch einbinden dieser und zwei weiteren Bibliotheken, mit dem coden beginnen. Die zwei weiteren Bibliotheken, sind für die Verbindung mit dem WLAN zuständig. Die 3. Bibliothek unterscheidet sich vom ESP32 zum ESP8266.
ESP8266:
#include <NTPClient.h> #include <WiFiUdp.h> #include <ESP8266WiFi.h>
ESP32:
#include <NTPClient.h> #include <WiFiUdp.h> #include <WiFi.h>
Danach werden zunächst WLAN-Name (SSID) und Password deklariert und danach, die Wochentage ausgeschrieben.
#include <NTPClient.h> #include <WiFiUdp.h> //für ESP8266 #include <ESP8266WiFi.h> //für ESP32 //#include <WiFi.h> const char *ssid = "Peters Netzwerg"; const char *password = "chrpetlispau"; char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};
Nun kann durch den „utcOffset“ eine Zeitzone bzw. eine ausgleichswert in Sekunden angegeben werden. Für die CET Zeitzone (Central European Time) muss als Winterzeit der Wert ‚3600‘ und als Sommerzeit ‚7200‘ gewählt werden.
#include <NTPClient.h> #include <WiFiUdp.h> //für ESP8266 #include <ESP8266WiFi.h> //für ESP32 //#include <WiFi.h> const char *ssid = "Peters Netzwerg"; const char *password = "chrpetlispau"; char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"}; const long utcOffset = 3600;
Als nächstes wird der Wird der NTP Client definiert und der NTP Server wird definiert, welcher die Uhrzeit liefern soll. Für diesen Server können verschiedenste Adressen genommen werden. „pool.ntp.org“ ist ein UTC Client, welcher logischerweise die Coordinated Universal Time sendet. Man kann hier eigentlich jeden beliebigen NTP Server verwenden, (ntp1.t-online.de, de.pool.ntp.org, ptbtime1.ptb.de, etc.). Jedoch ist der pool.ntp.org ein Server, welcher zwischen vielen verschiedenen Zeitservern auswählt, um den best möglichen auswählen zu können. Mehr dazu hier->
CET = UTC + 2h Sommerzeit
CET = UTC + 1h Winterzeit
#include <NTPClient.h> #include <WiFiUdp.h> //für ESP8266 #include <ESP8266WiFi.h> //für ESP32 //#include <WiFi.h> const char *ssid = "Peters Netzwerg"; const char *password = "chrpetlispau"; char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"}; const long utcOffset = 3600; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffset);
Im Setup wird die Serielle Kommunikation initialisiert, die Verbindung mit dem WLAN hergestellt und der Time Client gestartet.
#include <NTPClient.h> #include <WiFiUdp.h> //für ESP8266 #include <ESP8266WiFi.h> //für ESP32 //#include <WiFi.h> const char *ssid = "Peters Netzwerg"; const char *password = "chrpetlispau"; char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"}; const long utcOffset = 3600; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffset); void setup(){ Serial.begin(115200); WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); } timeClient.begin(); }
Nun kann im Loop oder gegebenenfalls auch im Setup die Zeit abgefragt, und ausgegeben werden.
Dafür wird mit dem Befehl timeClient.update(); der Server abgefragt, und mit timeClient.get****() Stunden, Minuten, Sekunden oder der Wochentag abgefragt.
#include <NTPClient.h> #include <WiFiUdp.h> //für ESP8266 #include <ESP8266WiFi.h> //für ESP32 //#include <WiFi.h> const char *ssid = "Peters Netzwerg"; const char *password = "chrpetlispau"; char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"}; const long utcOffset = 3600; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffset); void setup(){ Serial.begin(115200); WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); } timeClient.begin(); } void loop() { timeClient.update(); Serial.print(daysOfTheWeek[timeClient.getDay()]); Serial.print(", "); Serial.print(timeClient.getHours()); Serial.print(":"); Serial.print(timeClient.getMinutes()); Serial.print(":"); Serial.println(timeClient.getSeconds()); delay(1000); }
In diesem Beispiel werden die Werte über den Seriellen Monitor ausgegeben.