Samstag, 30. Januar 2016

Uhrzeit über ESP8266

In diesem Post geht es darum, wie man sich über den ESP8266 die aktuelle Uhrzeit holt. Das geht über das NTP (Network Time Protocol).

Für dieses Projekt benötigt man ein ESP 8266 Wlan Modul (hier bei AZDelivery), einen kleinen Arduino, beispielsweise einen billigen Arduino Nano Klon (hier bei AZDelivery), und ein LCD Display.

Das NTP

Das NTP (Network Time Protocol) ist kurz gesagt ein Online Protokoll zur Übertragung der aktuellen Uhrzeit. Diese wird jedoch nicht in einem "normalen" Format übertragen, sondern in Sekunden seit dem Jahr 1900. Dadurch lässt sich zusätzlich zur Zeit auch das Datum ausrechnen. 

Zur Umrechnung in Stunden, Minuten und Sekunden, muss man durch die jeweilige Anzahl an Sekunden Modulo (= Division mit Rest) rechnen. Für Division mit Rest verwendet man das % Zeichen, es hat jedoch nichts mit Prozentrechnung zu tun.

Die Hardware

An den Arduino Nano kann man ganz normal das LCD Display anschließen. Die Verbindung zum ESP 8266 funktioniert seriell, also TX des Nano mit RX des ESP und umgekehrt. Die restliche Verkabelung des ESP zur Stromversorgung, und die Verkabelung zur Programmierung des ESP 8266, habe ich bereits hier erklärt.

Die Sketche


Der ESP8266 Sketch

Für den Sketch des ESP8266 benötigt man die WifiUdp Bibliothek, sowie die ESP8266WiFi Standardbibliothek. Nun muss man zunächst eine Anfrage über die selbstgebaute Funktion sendNTPpacket senden, und anschließend die empfangenen Daten auswerten und umwandeln. Zum Schluss müssen noch die drei Variablen über die serielle Verbindung an den Arduino gesendet werden.

Hier der gesamte Sketch für den ESP8266:

Der Arduino Sketch

Der Arduino liest laufend den seriellen Buffer aus, und speichert die empfangenen Werte über den Befehl setTime(), der Time Bibliothek ab. Diese verwaltet die Zeit, und zählt automatisch mit, schaltet also weiter.

Ohne die (aktuell im Sketch vorhandene) Aktualisierung der Zeit über den ESP alle 10 Sekunden, würde die Uhr pro Stunde bis zu drei Minuten falsch gehen. Der Vorteil des ESP gegenüber einem konventionellen DCF77 Empfänger, ist der wesentliche bessere Preis, bei gleichzeitig mehr Einsatzmöglichkeiten.

Außerdem aktualisiert der Arduino laufend das LCD Display, damit immer die Sekunden genaue Uhrzeit angezeigt wird.

Der Arduino Sketch sieht so aus:



Keine Kommentare:

Kommentar veröffentlichen