Atomuhren, UTC, DCF77, RDS, DAB, Mobilfunk, GPS, NTP u.a.  tragen dazu bei, dass zeitabhängige Systeme weltweit synchron bleiben. Und so verwundert es nicht, dass Uhren sich selbsttätig von Sommer- auf die Winterzeit umstellen und sekundengenaue Zeitangaben machen.

Das hier vorzustellende Projekt soll einen Blick auf die Hintergründe ermöglichen und zeigen, wie mithilfe der Internet-Referenz ntppool.org/de/ einem LCD-Display und einem WLAN-fähigen Mikrocontroller die genaue Uhrzeit  vorgehalten werden kann.

Den Zugang zum WLAN-Netz und damit zum Internet ermöglicht das ESP8266-Modul, das hier auf dem Board HUZZAH der Firma Adafruit verbaut ist. Das USB zu TTL Kabel ermöglicht eine konventionelle Anbindung an die Arduino-IDE. Näheres dazu hier und hier.

Statt des HUZZAH-Boards kann kann nur dann eine andere NodeMCU benutzt werden, wenn sie einen 5V Ausgang hat, wie die des Herstellers LoLin. Die Spannungsversorgung erfolgt über den USB-Port des PC.

Das zweizeilige LCD-Display 1602 ist mit einem I2C-Interface ausgestattet. Näheres dazu hier.

Pinbelegung:          I2C-Interface     HUZZAH     LoLin
                       GND               GND       GND
                       VCC               V+        VU
                       SDA               #4        D2
                       SCL               #5        D1

                       Serielles Kabel       HUZZAH
                       Schwarz               GND
                       Rot                   V+
                       Grün                  RX
                       Weiß                  TX

Programmcode:

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

char *ssid     = "******";
char *password = "******";
char daysOfTheWeek[7][12]={"SONNTAG","MONTAG","DIENSTAG","MITTWOCH","DONNERSTAG","FREITAG","SAMSTAG"};

String formattedDate;
String Datum;
String Zeit;

LiquidCrystal_I2C lcd(0x27, 16, 2);
WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600); //+3600sec (Winterzeit)

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

  WiFi.begin(ssid, password);

  while ( WiFi.status() != WL_CONNECTED ) {
    delay (500);
    Serial.print ( "." );
  }

  timeClient.begin();
}

void loop() {

  formattedDate=timeClient.getFormattedDate();
  int splitT = formattedDate.indexOf("T");
  Datum = formattedDate.substring(0, splitT);
  Zeit = formattedDate.substring(splitT+1, formattedDate.length()-1);
  
  Serial.print(formattedDate);
  Serial.println();
  Serial.print("TAG: ");
  Serial.println(daysOfTheWeek[timeClient.getDay()]);
  Serial.print("DATUM: ");
  Serial.println(Datum);
  Serial.print("UHRZEIT: ");
  Serial.println(Zeit);
  Serial.println();

  timeClient.update(); 
  
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(4, 0);
  lcd.print(daysOfTheWeek[timeClient.getDay()]);
  lcd.setCursor(0, 1);
  lcd.print(Datum);
  lcd.print(" ");
    if (timeClient.getHours() < 10){
    lcd.print('0');
  }
  lcd.print(timeClient.getHours());
  lcd.print(":");
    if (timeClient.getMinutes() < 10){
    lcd.print('0');
  }
  lcd.print(timeClient.getMinutes());
  delay(15000);
}

Vor dem Download des Programms muss auf dem HUZZAH-Board der Knopf GPIO 0 gehalten und zudem die Reset-Taste kurz gedrückt werden. Das Board ist programmierbereit, wenn die rote LED glimmt.

Folgekapitel (Ein Thermomixer) >>>>