Wenn du mit einem ESP8266* arbeitest und ohnehin damit im Internet bist, gibt es eine einfach Möglichkeit, die aktuelle Uhrzeit herauszufinden: Mit der Bibliothek NTPClient.h

Hinweis: Das funktioniert natürlich auch mit einem ESP32 oder einem Arduino mit WiFi Shield – hier konzentrieren wir uns allerdings auf den ESP8266 und den passenden Sketch.

Zunächst brauchst du eine Verbindung ins Internet. Lerne hier, wie du deinen ESP8266 mit dem Internet verbindest.

Wenn du im Internet bist, kann es losgehen. Du benötigst die folgenden drei Bibliotheken. Die erste benötigst du, um deinen ESP8266 mit dem Internet zu verbinden. Die Bibliothek <NTPClient.h> verbindet dich mit dem Network Time Protocol und mit <WiFiUdp.h> sorgst du für die richtige Datenübertragung mit dem User Datagram Protocol.

#include <ESP8266WiFi.h> 
#include <NTPClient.h>
#include <WiFiUdp.h>

Wenn du mehr über die Technik hinter dieser Methode erfahren möchtest, erfährst du alles Wichtige über das Network Time Protocol bei Wikipedia.

Der Sketch zur Abfrage von Wochentag und Uhrzeit

Die Bibliothek <NTPClient.h> bietet dir die Möglichkeit, ganz einfach Daten wie den Wochentag oder auch die Stunde, Minute und Sekunden abzufragen. Die Zeitzone für die das geschieht, ist UTC. Diese liegt – in der Winterzeit – eine Stunde hinter der Mitteleuropäischen Zeit (MEZ), weshalb du diese Zeitverschiebung in deinem Sketch (in Sekunden) definieren musst. Vorsicht: Wenn wir Winterzeit haben, sind das 3600 Sekunden – in der Sommerzeit 7200, da die UTC dann zwei Stunden hinter der MEZ liegt.

const long utcOffsetInSeconds = 3600;

Für den Fall, dass du auch den aktuellen Wochentag abrufen möchtest, erstellst du dir vorsorglichen ein entsprechendes Array:

char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};

Nun erstellst du zwei Instanzen der UDP- und NTP-Bibliothek inklusive der notwendigen Parameter wie z.B. der oben definierten Zeitverschiebung:

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);

Nachdem sich dein ESP8266* in der Setup-Funktion mit dem Internet verbunden hast, kannst du deinen NTP Client mit timeClient.begin() initialisieren und im Loop deines Sketches mit timeClient.update() eine Abfrage durchführen lassen. Diese Funktion besorgt sich die aktuelle Uhrzeit und verarbeitet sie, sodass sie in einem lesbaren Format ausgegeben werden kann.

Die Daten kannst du anschließend mit ein paar weiteren Funktionen in deinem Seriellen Monitor ausgeben. Die aktuelle Uhrzeit z.B. so:

Serial.print(timeClient.getFormattedTime());

Den aktuellen Wochentag kannst du mit Hilfe dieser Funktion und deinem oben erstellen Array der Wochentage abrufen:

Serial.print(daysOfTheWeek[timeClient.getDay()]);

Hier findest du eine Übersicht weiterer Funktionen der Bibliothek <NTPClient.h>. Und das war auch schon alles, was du vorerst brauchst. 🙂 Hier nun der vollständige Sketch zum Rauskopieren und Ausprobieren:

/*********
  pollux labs
  https://polluxlabs.net
*********/

#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

const char *ssid     = "Name deines WiFi-Netzwerks";
const char *password = "Dein WiFi-Passwort";

//Zeitverschiebung UTC <-> MEZ (Winterzeit) = 3600 Sekunden (1 Stunde)
//Zeitverschiebung UTC <-> MEZ (Sommerzeit) = 7200 Sekunden (2 Stunden)
const long utcOffsetInSeconds = 3600;


char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);

void setup(){
  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Ich verbinde mich mit dem Internet...");
  }
  
  Serial.println("Ich bin mit dem Internet verbunden!");

  timeClient.begin();
}

void loop() {
  timeClient.update();

  Serial.print(daysOfTheWeek[timeClient.getDay()]);
  Serial.print(", ");
  Serial.println(timeClient.getFormattedTime());

  delay(1000);
}

Ein spannendes Projekt, bei dem du die Uhrzeit abfragst, ist der ISS Tracker – hier rufst du die aktuelle Zeit von einer anderen API ab.

*Amazon Affiliate Link – wenn du dort bestellst, erhalten wir eine kleine Provision.