Das NTP-Protokoll (Network Time Protocol) dient dazu internetfähige Geräte mit der aktuellen Zeit zu versorgen. Zeit und Datum sollen auf einem OLED angezeigt werden.
So sieht es aus:
Anschluss an einem Arduino MKR 1010
Installiere mit dem Boardverwalter das passende Board:
Nach dem Start des Programms werden die IP und die aktuelle Zeit im Seriellen Monitor angezeigt. Weil die IP über DHCP vergeben wird, kann sie jedesmal eine andere sein. Für die Anzeige spielt das aber keine Rolle.
Benötigte Bibliotheken:
⇒u8g2
Binde die benötigten Bibliotheken ein und definiere die Variablen.Beachte die Kommentare.
// Arduino UNO WiFi Rev2, MKR 1010, Nano 33 IoT
// #include "WiFiNINA.h"
// #include "NTP.h"
// Arduino R4 WiFi
#include "WiFiS3.h"
#include "NTP.h"
// alle Boards
#include "U8g2lib.h"
/*
Typbezeichnung mit Bildschirmgröße in Pixeln
1 = page buffer mode, F = full screen buffer mode
Hardware I2C
Name des OLEDs
Rotation R0 (keine)
*/
// Parameter 0,96 Zoll SSD1306
U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);
// Parameter 1,3 Zoll SH1106
// U8G2_SH1106_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);
// SSID des Routers und Passwort
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
// Zeit bis zur nächsten Messung
static unsigned long GesicherteStartZeit = 0;
unsigned long Startzeit;
// 30 Sekunden Intervall, kann angepasst werden
int Intervall = 30000;
Der setup-Teil. Beachte die Kommentare.
void setup()
{
Serial.begin(9600);
delay(500);
// WiFi starten DHCP
WiFi.begin(Router, Passwort);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
// SSID des Routers anzeigen
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.print("IP: ");
Serial.println(WiFi.localIP());
/*
Zeitzone
CEST: Central European Summertime
Beginn europäische Sommerzeit letzter Sonntag im März 2 Uhr GMT + 2 Stunden
*/
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120);
// CET: Central European Time
// Beginn Normalzeit letzter Sonntag im Oktober 3 Uhr GMT + 1 Stunde
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60);
ntp.begin();
// OLED starten
oled.begin();
// Schriftart
oled.setFont(u8g2_font_courB24_tf);
// Zeichenfarbe weiß
oled.setDrawColor(1);
// horizontale Schrift
oled.setFontDirection(0);
// Datum und Zeit beim Start anzeigen
ntp.update();
oled.clearDisplay();
oled.firstPage();
do
{
oled.setCursor(2, 15);
oled.setFont(u8g2_font_t0_22_te);
// Tag: führende 0 ergänzen
if (ntp.day() < 10) oled.print("0");
oled.print(ntp.day());
oled.print(".");
// Monat: führende 0 ergänzen
if (ntp.month() < 10) oled.print("0");
oled.print(ntp.month());
oled.print(".");
// Jahr
oled.print(ntp.year());
// horizontale Linie
oled.drawHLine(1, 22, oled.getDisplayWidth());
oled.setCursor(2, 63);
// Uhrzeit
// Stunden: führende 0 ergänzen
oled.setFont(u8g2_font_logisoso32_tf);
if (ntp.hours() < 10) oled.print("0");
oled.print(String(ntp.hours()) + ":");
// Minuten: führende 0 ergänzen
if (ntp.minutes() < 10) oled.print("0");
oled.print(String(ntp.minutes()));
}
while (oled.nextPage());
}
Der loop-Teil. Beachte die Kommentare.
void loop()
{
// Startzeit setzen
Startzeit = millis();
// wenn das festgelegte Intervall erreicht ist
if (Startzeit - GesicherteStartZeit > Intervall)
{
// Zeit aktualisieren
ntp.update();
oled.clearDisplay();
// Startzeit zurücksetzen
GesicherteStartZeit = Startzeit;
oled.setCursor(3, 20);
oled.firstPage();
do
{
oled.setCursor(2, 15);
oled.setFont(u8g2_font_t0_22_te);
// Tag: führende 0 ergänzen
if (ntp.day() < 10) oled.print("0");
oled.print(ntp.day());
oled.print(".");
// Monat: führende 0 ergänzen
if (ntp.month() < 10) oled.print("0");
oled.print(ntp.month());
oled.print(".");
oled.print(ntp.year());
// horizontale Linie
oled.drawHLine(1, 22, oled.getDisplayWidth());
oled.setCursor(2, 63);
// Uhrzeit
// Stunden: führende 0 ergänzen
oled.setFont(u8g2_font_logisoso32_tf);
if (ntp.hours() < 10) oled.print("0");
oled.print(String(ntp.hours()) + ":");
// Minuten: führende 0 ergänzen
if (ntp.minutes() < 10) oled.print("0");
oled.print(String(ntp.minutes()));
}
while (oled.nextPage());
}
}
Verwandte Anleitungen:
- Ampel mit WiFi schalten
- DHT11/DHT22 - Wetterstation WiFi
- LEDs mit dem UDP-Protokoll über WLAN im lokalen Netzwerk schalten
- Lottozahlen mit WiFi und NTP
- Ampel mit Arduino WiFi und Bluetooth schalten
Letzte Aktualisierung: