🍪 Privacy & Transparency

We and our partners use cookies to Store and/or access information on a device. We and our partners use data for Personalised ads and content, ad and content measurement, audience insights and product development. An example of data being processed may be a unique identifier stored in a cookie. Some of our partners may process your data as a part of their legitimate business interest without asking for consent. To view the purposes they believe they have legitimate interest for, or to object to this data processing use the vendor list link below. The consent submitted will only be used for data processing originating from this website. If you would like to change your settings or withdraw consent at any time, the link to do so is in our privacy policy accessible from our home page..

Vendor List | Privacy Policy
Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • LCD’s
    • Kommunikation
    • Sicherheit
    • Weekend Project
  • Arduino
    • Tutorials
    • ProMini
      • Anschließen & Programmieren
    • Nano
      • Arduino Nano – Übersicht
    • UNO
      • Übersicht
    • MEGA 2560
      • Übersicht
    • Leonardo
      • Übersicht
    • NodeMCU
      • NodeMCU – “Einer für (fast) Alles!”
    • Lilypad
      • Arduino: Lilypad “Jetzt Geht’s Rund!”
    • WEMOS
      • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
      • WEMOS D1 Mini – Übersicht
      • Wemos D1 mini Shields
    • STM32x
      • STM32F103C8T6 – Übersicht
    • Maker UNO
      • Maker UNO – Überblick und Test
    • ATTiny85
      • Mini Arduino mit ATTiny85 Chip
      • ATtiny85 mit dem Arduino UNO beschreiben
  • Android
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

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

Posted on 15. März 202130. April 2023 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
  • 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 Resourcen:

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

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 noch zusätzlich eine 1h (also 3600 Sekunden)
  //auf diese Zeit draufaddiert werden.
  timeClient.setTimeOffset(7200);
}

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

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 das 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 (zbsp. DS3132) initial mit einem Zeitstempel zu versorgen.

Schreibe einen Kommentar Antworten abbrechen

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

Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb