Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

ESP8266 – NTP Protokoll für das lesen eines genauen Zeitstempels

Posted on 15. März 20218. März 2024 by Stefan Draeger

In diesem Beitrag zeige ich dir, wie du mit dem NTPClient und dem NTP Protokoll einen genauen Zeitstempel eines NTP Servers am ESP8266 auslesen kannst.

  • Was ist das NTP Protokoll?
  • Benötigte Ressourcen für diesen Beitrag
  • Lesen der aktuellen Uhrzeit vom NTP Server
    • benötigte Bibliothek NTPClient
    • Quellcode
    • Video – fertiger NTPClient mit ESP8266
  • Ausblick

Was ist das NTP Protokoll?

Die Abkürzung NTP steht für Network Time Protocol und ist ein Standard für die Synchronisierung von Uhr in Computersystemen. Das NTP Protokoll kann als verbindungslose (UDP) oder verbindungsbezogene (TCP) Transportprotokoll genutzt werden.

Das NTP Protokoll wurde von David L. Mills im Jahre 1985 an der Universität von Delaware entwickelt. Bis heute wird unter seiner Leitung das Protokoll sowie die UNI Implementierung weiterentwickelt.

Möchtest du mehr über das NTP Protokoll erfahren, so möchte ich dir den Beitrag Network Time Protocol (NTP): Definition und Funktionsweise nahelegen.

Benötigte Ressourcen für diesen Beitrag

Um das Beispiel in diesem Beitrag nachstellen zu können, benötigst du folgende Ressourcen:

  • einen ESP8266*,
    • ein Datenkabel*
  • eine Internetverbindung per WLAN
    • SSID inkl. Passwort
  • die Entwicklungsumgebung Arduino IDE

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Lesen der aktuellen Uhrzeit vom NTP Server

benötigte Bibliothek NTPClient

Für das Auslesen des Zeitstempels benötigen wir eine Bibliothek, welche über den Bibliotheksverwalter der Arduino IDE installiert werden kann.

Bibliothek "NTPClient" zum auslesen eines Zeitstempels von einem NTP Server
Bibliothek „NTPClient“ zum auslesen eines Zeitstempels von einem NTP Server

Quellcode

Bevor du nachfolgenden Quellcode auf deinen ESP8266 kopierst / hochlädst, musst du die SSID & das Passwort deines WLAN Netzwerkes eintragen!

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

//Hier muss die SSID & das Passwort des WLAN Netzwerkes eingetragen werden
String ssid     = "";
String password = "";

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

char* wochentage[7]={"Sonntag", "Montag", "Dienstag", "Mitwoch", "Donnerstag", "Freitag", "Samstag"};

void setup() {
  //beginn der seriellen Kommunikation mit 9600baud
  Serial.begin(9600);
  
  //Aufbau der Verbindung zum WLAN Netzwerk
  Serial.print("Verbindung zu");
  Serial.print(ssid);
  Serial.print(" wird aufgebaut.");
  WiFi.begin(ssid, password);
  //solange keine Verbindung besteht einen Punkt ausgeben
  while (WiFi.status() != WL_CONNECTED) {
    //eine Pause von 500ms.
    delay(500);
    Serial.print(".");
  }

  //initialisieren des NTPClients um die Zeit auszulesen
  timeClient.begin();
  //Offset in Sekunden zur GMT +/- 0 Zeitzone
  //Für Deutschland muss man 1h = 3600 Sekunden nehmen,
  //je nach Sommer- /Winterzeit muss jedoch diese Zeit wieder abgezogen werden (also 3600 Sekunden).
  timeClient.setTimeOffset(3600);
}

void loop() {
  //aktualisieren des Zeitstempels
  timeClient.update();

  //Zeitstempel auf der Sekunde genau
  //(Nicht zuverwechseln mit dem UNIX Timestamp welcher auf die Millisekunde genau ist.)
  unsigned long epochTime = timeClient.getEpochTime();
  Serial.print("Epoch Time: ");
  Serial.println(epochTime);

  //Ausgabe des formatierten Zeitstempels
  String formattedTime = timeClient.getFormattedTime();
  Serial.print("formatierter Zeitstempel: ");
  Serial.println(formattedTime);  

  //einzelne Werte der Uhrzeit lesen
  int aktuellerTag = timeClient.getDay();
  int aktuelleStunde = timeClient.getHours();
  int aktuelleMinute = timeClient.getMinutes();
  int aktuelleSekunde = timeClient.getSeconds();

  //reservieren eines char Arrays mit maximal 20 Zeichen
  char timestamp[20];
  //Formatieren der Werte in einen String
  sprintf(timestamp,"Heute ist %s, %2d:%2d:%2d",wochentage[aktuellerTag], aktuelleStunde,aktuelleMinute,aktuelleSekunde);
  //Ausgeben des Formatierten Strings auf der seriellen Schnittstelle
  Serial.println(timestamp);
    
  delay(3000);
}

Ausgabe des Sketches auf der seriellen Schnittstelle:

ESP8266 - Ausgabe des Zeitstempels auf der seriellen Schnittstelle
ESP8266 – Ausgabe des Zeitstempels auf der seriellen Schnittstelle

Video – fertiger NTPClient mit ESP8266

In dem nachfolgenden Video stelle ich die Uhrzeit des empfangenen Zeitstempels gegen die der Webseite https://www.atomuhr.de/ gegenüber. Die Zeit einer Atomuhr ist sehr genau und hat nahezu keine Abweichung.

Die entstehende Abweichung in der Uhrzeit ist dem geschuldet, dass der kleine ESP8266 die Daten des NTP Servers empfangen und verarbeiten muss. 

Ausblick

Mit diesem Beitrag habe ich dir kurz gezeigt, wie du einen aktuellen Zeitstempel von einem NTP Server lesen kannst. Als Nächstes können wir nun diesen Wert nutzen, um eine Realtimeclock (zum Beispiel DS3132) initial mit einem Zeitstempel zu versorgen.

2 thoughts on “ESP8266 – NTP Protokoll für das lesen eines genauen Zeitstempels”

  1. JoKa sagt:
    27. September 2023 um 15:47 Uhr

    Hallo Stefan, das klappt prima.
    Jetzt würde mich interessieren, ob + wie man das auf den RPi-Pico mit ESP01 als WLAN-Interface übertragen kann. Mit Arduino-IDE , nicht MicroPython .

    Antworten
  2. Pingback: Arduino UNO R4: LED Matrix Uhr mit NTP-Zeitsynchronisation - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}