Inhalt
UNO WiFi Rev2, MKR 1010, Nano 33 IoT
# include "WiFiNINA.h"
#include "NTP.h"
#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 und Passwort des Routers
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;
void setup()
{
Serial.begin(9600);
delay(500);
// WiFi starten DHCP
WiFi.begin(Router, Passwort);
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
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 starten
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());
// Serielle Ausgabe
switch (ntp.weekDay())
{
case 0:
Serial.print("Sonntag ");
break;
case 1:
Serial.print("Montag ");
break;
case 2:
Serial.print("Dienstag ");
break;
case 3:
Serial.print("Mittwoch ");
break;
case 4:
Serial.print("Donnerstag ");
break;
case 5:
Serial.print("Freitag ");
break;
case 6:
Serial.print("Samstag ");
break;
}
// Tag: führende 0 ergänzen
if (ntp.day() < 10) Serial.print("0");
Serial.print(ntp.day());
Serial.print(".");
// Monat: führende 0 ergänzen
if (ntp.month() < 10) Serial.print("0");
Serial.print(ntp.month());
Serial.print(".");
// Jahr
Serial.print(ntp.year());
Serial.print(" ");
// Uhrzeit
// Stunden: führende 0 ergänzen
if (ntp.hours() < 10) Serial.print("0");
Serial.print(String(ntp.hours()) + ":");
// Minuten: führende 0 ergänzen
if (ntp.minutes() < 10) Serial.print("0");
Serial.println(String(ntp.minutes()));
}
void loop()
{
// Startzeit setzen
Startzeit = millis();
// wenn das festgelegte Intervall erreicht ist
if (Startzeit - GesicherteStartZeit > Intervall)
{
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());
// Serielle Ausgabe
switch (ntp.weekDay())
{
case 0:
Serial.print("Sonntag ");
break;
case 1:
Serial.print("Montag ");
break;
case 2:
Serial.print("Dienstag ");
break;
case 3:
Serial.print("Mittwoch ");
break;
case 4:
Serial.print("Donnerstag ");
break;
case 5:
Serial.print("Freitag ");
break;
case 6:
Serial.print("Samstag ");
break;
}
// Tag: führende 0 ergänzen
if (ntp.day() < 10) Serial.print("0");
Serial.print(ntp.day());
Serial.print(".");
// Monat: führende 0 ergänzen
if (ntp.month() < 10) Serial.print("0");
Serial.print(ntp.month());
Serial.print(".");
// Jahr
Serial.print(ntp.year());
Serial.print(" ");
// Uhrzeit
// Stunden: führende 0 ergänzen
if (ntp.hours() < 10) Serial.print("0");
Serial.print(String(ntp.hours()) + ":");
// Minuten: führende 0 ergänzen
if (ntp.minutes() < 10) Serial.print("0");
Serial.println(String(ntp.minutes()));
}
}
Arduino R4 WiFi
#include "WiFiS3.h"
#include "NTP.h"
#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 und Passwort des Routers
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;
void setup()
{
Serial.begin(9600);
delay(500);
// WiFi starten DHCP
WiFi.begin(Router, Passwort);
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
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 starten
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());
// Serielle Ausgabe
switch (ntp.weekDay())
{
case 0:
Serial.print("Sonntag ");
break;
case 1:
Serial.print("Montag ");
break;
case 2:
Serial.print("Dienstag ");
break;
case 3:
Serial.print("Mittwoch ");
break;
case 4:
Serial.print("Donnerstag ");
break;
case 5:
Serial.print("Freitag ");
break;
case 6:
Serial.print("Samstag ");
break;
}
// Tag: führende 0 ergänzen
if (ntp.day() < 10) Serial.print("0");
Serial.print(ntp.day());
Serial.print(".");
// Monat: führende 0 ergänzen
if (ntp.month() < 10) Serial.print("0");
Serial.print(ntp.month());
Serial.print(".");
// Jahr
Serial.print(ntp.year());
Serial.print(" ");
// Uhrzeit
// Stunden: führende 0 ergänzen
if (ntp.hours() < 10) Serial.print("0");
Serial.print(String(ntp.hours()) + ":");
// Minuten: führende 0 ergänzen
if (ntp.minutes() < 10) Serial.print("0");
Serial.println(String(ntp.minutes()));
}
void loop()
{
// Startzeit setzen
Startzeit = millis();
// wenn das festgelegte Intervall erreicht ist
if (Startzeit - GesicherteStartZeit > Intervall)
{
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());
// Serielle Ausgabe
switch (ntp.weekDay())
{
case 0:
Serial.print("Sonntag ");
break;
case 1:
Serial.print("Montag ");
break;
case 2:
Serial.print("Dienstag ");
break;
case 3:
Serial.print("Mittwoch ");
break;
case 4:
Serial.print("Donnerstag ");
break;
case 5:
Serial.print("Freitag ");
break;
case 6:
Serial.print("Samstag ");
break;
}
// Tag: führende 0 ergänzen
if (ntp.day() < 10) Serial.print("0");
Serial.print(ntp.day());
Serial.print(".");
// Monat: führende 0 ergänzen
if (ntp.month() < 10) Serial.print("0");
Serial.print(ntp.month());
Serial.print(".");
// Jahr
Serial.print(ntp.year());
Serial.print(" ");
// Uhrzeit
// Stunden: führende 0 ergänzen
if (ntp.hours() < 10) Serial.print("0");
Serial.print(String(ntp.hours()) + ":");
// Minuten: führende 0 ergänzen
if (ntp.minutes() < 10) Serial.print("0");
Serial.println(String(ntp.minutes()));
}
}
ESP8266 (NodeMCU und Wemos D1)
#include "ESP8266WiFi.h"
#include "time.h"
#include "U8g2lib.h"
// OLED initialisieren
U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);
// SSID und Passwort des Routers
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// NTP-Server aus dem Pool
# define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European Summer Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
# define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
// Zeit bis zur nächsten Messung
static unsigned long GesicherteStartZeit = 0;
unsigned long Startzeit;
// Sekunden Intervall, kann angepasst werden
int Intervall = 10000;
void setup()
{
Serial.begin(9600);
// Parameter für die zu ermittelnde Zeit
configTime(Zeitzone, Zeitserver);
WiFi.begin(Router, Passwort);
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
// SSID des Routers anzeigen
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.print("IP: ");
Serial.println(WiFi.localIP());
// OLED starten
oled.begin();
}
void loop()
{
// Startzeit setzen
Startzeit = millis();
// wenn das festgelegte Intervall erreicht ist
if (Startzeit - GesicherteStartZeit > Intervall)
{
ZeitAnzeigen();
// Startzeit zurücksetzen
GesicherteStartZeit = Startzeit;
}
}
void ZeitAnzeigen()
{
// aktuelle Zeit lesen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
oled.clearDisplay();
oled.setCursor(2, 63);
oled.setFont(u8g2_font_courB24_tf);
// Zeichenfarbe weiß
oled.setDrawColor(1);
// horizontale Schrift
oled.setFontDirection(0);
oled.firstPage();
do
{
// Datum anzeigen
oled.setCursor(2, 15);
oled.setFont(u8g2_font_t0_22_te);
// Tag: führende 0 ergänzen
if (Zeit.tm_mday < 10) oled.print("0");
oled.print(Zeit.tm_mday);
oled.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 10) oled.print("0");
oled.print(Zeit.tm_mon + 1);
oled.print(".");
oled.print(Zeit.tm_year + 1900);
oled.setCursor(2, 63);
oled.setFont(u8g2_font_logisoso32_tf);
// horizontale Linie
oled.drawHLine(1, 22, oled.getDisplayWidth());
oled.setCursor(2, 63);
// Zeit anzeigen
oled.setFont(u8g2_font_logisoso32_tf);
oled.setCursor(2, 63);
if (Zeit.tm_hour < 10) oled.print("0");
oled.print(Zeit.tm_hour);
oled.print(":");
if (Zeit.tm_min < 10) oled.print("0");
oled.print(Zeit.tm_min);
}
while (oled.nextPage());
// Serielle Ausgabe mit Namen des Wochentages
switch (Zeit.tm_wday) {
case 0:
Serial.print("Sonntag ");
break;
case 1:
Serial.print("Montag ");
break;
case 2:
Serial.print("Dienstag ");
break;
case 3:
Serial.print("Mittwoch ");
break;
case 4:
Serial.print("Donnerstag ");
break;
case 5:
Serial.print("Freitag ");
break;
case 6:
Serial.print("Samstag ");
break;
}
// Tag: führende 0 ergänzen
if (Zeit.tm_mday < 10) Serial.print("0");
Serial.print(Zeit.tm_mday);
Serial.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 10) Serial.print("0");
Serial.print(Zeit.tm_mon + 1);
Serial.print(".");
// Anzahl Jahre seit 1900
Serial.print(Zeit.tm_year + 1900);
Serial.print(" ");
if (Zeit.tm_hour < 10) Serial.print("0");
Serial.print(Zeit.tm_hour);
Serial.print(":");
if (Zeit.tm_min < 10) Serial.print("0");
Serial.print(Zeit.tm_min);
Serial.print(":");
if (Zeit.tm_sec < 10) Serial.print("0");
Serial.print(Zeit.tm_sec);
Serial.println();
Serial.print("Tage seit 1. Januar: ");
Serial.print(Zeit.tm_yday);
Serial.println();
if (Zeit.tm_isdst > 0) Serial.println("Sommerzeit");
}
ESP32-Wroom
#include "WiFi.h"
#include "time.h"
#include "U8g2lib.h"
// OLED initialisieren
U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);
// SSID und Passwort des Routers
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// NTP-Server aus dem Pool
# define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European Summer Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
# define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
// Zeit bis zur nächsten Messung
static unsigned long GesicherteStartZeit = 0;
unsigned long Startzeit;
// Sekunden Intervall, kann angepasst werden
int Intervall = 10000;
void setup()
{
Serial.begin(9600);
// Parameter für die zu ermittelnde Zeit
configTzTime(Zeitzone, Zeitserver);
WiFi.begin(Router, Passwort);
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
// SSID des Routers anzeigen
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.print("IP: ");
Serial.println(WiFi.localIP());
// OLED starten
oled.begin();
}
void loop()
{
// Startzeit setzen
Startzeit = millis();
// wenn das festgelegte Intervall erreicht ist
if (Startzeit - GesicherteStartZeit > Intervall)
{
ZeitAnzeigen();
// Startzeit zurücksetzen
GesicherteStartZeit = Startzeit;
}
}
void ZeitAnzeigen()
{
// aktuelle Zeit lesen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
oled.clearDisplay();
oled.setCursor(2, 63);
oled.setFont(u8g2_font_courB24_tf);
// Zeichenfarbe weiß
oled.setDrawColor(1);
// horizontale Schrift
oled.setFontDirection(0);
oled.firstPage();
do
{
// Datum anzeigen
oled.setCursor(2, 15);
oled.setFont(u8g2_font_t0_22_te);
// Tag: führende 0 ergänzen
if (Zeit.tm_mday < 10) oled.print("0");
oled.print(Zeit.tm_mday);
oled.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 10) oled.print("0");
oled.print(Zeit.tm_mon + 1);
oled.print(".");
oled.print(Zeit.tm_year + 1900);
oled.setCursor(2, 63);
oled.setFont(u8g2_font_logisoso32_tf);
// horizontale Linie
oled.drawHLine(1, 22, oled.getDisplayWidth());
oled.setCursor(2, 63);
// Zeit anzeigen
oled.setFont(u8g2_font_logisoso32_tf);
oled.setCursor(2, 63);
if (Zeit.tm_hour < 10) oled.print("0");
oled.print(Zeit.tm_hour);
oled.print(":");
if (Zeit.tm_min < 10) oled.print("0");
oled.print(Zeit.tm_min);
}
while (oled.nextPage());
// Serielle Ausgabe mit Namen des Wochentages
switch (Zeit.tm_wday) {
case 0:
Serial.print("Sonntag ");
break;
case 1:
Serial.print("Montag ");
break;
case 2:
Serial.print("Dienstag ");
break;
case 3:
Serial.print("Mittwoch ");
break;
case 4:
Serial.print("Donnerstag ");
break;
case 5:
Serial.print("Freitag ");
break;
case 6:
Serial.print("Samstag ");
break;
}
// Tag: führende 0 ergänzen
if (Zeit.tm_mday < 10) Serial.print("0");
Serial.print(Zeit.tm_mday);
Serial.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 10) Serial.print("0");
Serial.print(Zeit.tm_mon + 1);
Serial.print(".");
// Anzahl Jahre seit 1900
Serial.print(Zeit.tm_year + 1900);
Serial.print(" ");
if (Zeit.tm_hour < 10) Serial.print("0");
Serial.print(Zeit.tm_hour);
Serial.print(":");
if (Zeit.tm_min < 10) Serial.print("0");
Serial.print(Zeit.tm_min);
Serial.print(":");
if (Zeit.tm_sec < 10) Serial.print("0");
Serial.print(Zeit.tm_sec);
Serial.println();
Serial.print("Tage seit 1. Januar: ");
Serial.print(Zeit.tm_yday);
Serial.println();
if (Zeit.tm_isdst > 0) Serial.println("Sommerzeit");
}
Nano ESP32
#include "WiFi.h"
#include "time.h"
#include "U8g2lib.h"
#include "Wire.h"
// OLED initialisieren
U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);
// SSID und Passwort des Routers
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// NTP-Server aus dem Pool
# define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European Summer Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
# define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
// Zeit bis zur nächsten Messung
static unsigned long GesicherteStartZeit = 0;
unsigned long Startzeit;
// Sekunden Intervall, kann angepasst werden
int Intervall = 10000;
void setup()
{
Wire.begin();
Serial.begin(9600);
// Parameter für die zu ermittelnde Zeit
configTzTime(Zeitzone, Zeitserver);
WiFi.begin(Router, Passwort);
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
// SSID des Routers anzeigen
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.print("IP: ");
Serial.println(WiFi.localIP());
// OLED starten
oled.begin();
}
void loop()
{
// Startzeit setzen
Startzeit = millis();
// wenn das festgelegte Intervall erreicht ist
if (Startzeit - GesicherteStartZeit > Intervall)
{
ZeitAnzeigen();
// Startzeit zurücksetzen
GesicherteStartZeit = Startzeit;
}
}
void ZeitAnzeigen()
{
// aktuelle Zeit lesen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
oled.clearDisplay();
oled.setCursor(2, 63);
oled.setFont(u8g2_font_courB24_tf);
// Zeichenfarbe weiß
oled.setDrawColor(1);
// horizontale Schrift
oled.setFontDirection(0);
oled.firstPage();
do
{
// Datum anzeigen
oled.setCursor(2, 15);
oled.setFont(u8g2_font_t0_22_te);
// Tag: führende 0 ergänzen
if (Zeit.tm_mday < 10) oled.print("0");
oled.print(Zeit.tm_mday);
oled.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 10) oled.print("0");
oled.print(Zeit.tm_mon + 1);
oled.print(".");
// Anzahl Jahre seit 1900
oled.print(Zeit.tm_year + 1900);
oled.setCursor(2, 63);
oled.setFont(u8g2_font_logisoso32_tf);
// horizontale Linie
oled.drawHLine(1, 22, oled.getDisplayWidth());
oled.setCursor(2, 63);
// Zeit anzeigen
oled.setFont(u8g2_font_logisoso32_tf);
oled.setCursor(2, 63);
if (Zeit.tm_hour < 10) oled.print("0");
oled.print(Zeit.tm_hour);
oled.print(":");
if (Zeit.tm_min < 10) oled.print("0");
oled.print(Zeit.tm_min);
}
while (oled.nextPage());
// Serielle Ausgabe mit Namen des Wochentages
switch (Zeit.tm_wday) {
case 0:
Serial.print("Sonntag ");
break;
case 1:
Serial.print("Montag ");
break;
case 2:
Serial.print("Dienstag ");
break;
case 3:
Serial.print("Mittwoch ");
break;
case 4:
Serial.print("Donnerstag ");
break;
case 5:
Serial.print("Freitag ");
break;
case 6:
Serial.print("Samstag ");
break;
}
// Tag: führende 0 ergänzen
if (Zeit.tm_mday < 10) Serial.print("0");
Serial.print(Zeit.tm_mday);
Serial.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 10) Serial.print("0");
Serial.print(Zeit.tm_mon + 1);
Serial.print(".");
// Anzahl Jahre seit 1900
Serial.print(Zeit.tm_year + 1900);
Serial.print(" ");
if (Zeit.tm_hour < 10) Serial.print("0");
Serial.print(Zeit.tm_hour);
Serial.print(":");
if (Zeit.tm_min < 10) Serial.print("0");
Serial.print(Zeit.tm_min);
Serial.print(":");
if (Zeit.tm_sec < 10) Serial.print("0");
Serial.print(Zeit.tm_sec);
Serial.println();
Serial.print("Tage seit 1. Januar: ");
Serial.print(Zeit.tm_yday);
Serial.println();
if (Zeit.tm_isdst > 0) Serial.println("Sommerzeit");
}
Letzte Aktualisierung: