
Mit der Bibliothek time.h soll die aktuelle Zeit auf einer 4-stelligen 7-Segment-Anzeige dargestellt werden.


Benötigte Bauteile
- ESP32-Mikrocontroller
- 4-stellige 7-Segment-Anzeige
- Leitungsdrähte
Konfiguration der Mikrocontroller
Schaltpläne
ESP32-Wroom

schwarz GND
rot 5V
grün 5
gelb 17
ESP32-C6

schwarz GND
rot 5V
grün 15
gelb 23
XIAO-ESP32-C3

schwarz GND
rot 5V
grün D7
gelb D8
Wemos D1 Mini

schwarz GND
rot 5V
grün D3
gelb D4
Benötigte Bibliothek

Funktionen der Bibliothek TM1637 (AKJ)
| Schlüsselwort | Aktion |
|---|---|
| begin() | Modul starten |
| setBrightness(int) | 0-15 → Helligkeit des Displays setzen |
| clearScreen() | Anzeige löschen |
| display(String) display(int) display(String/int, false, false, Position) | display"Text"); display(10); diaplay(1, false, false, 1); Position beginnt mit 0 |
| colonOn() | Doppelpunkt einschalten |
| colonOff() | Doppelpunkt ausschalten |
Das Programm (ESP32-Wroom)
Programme für andere Mikrocontroller findest du ⇒hier
Beim Start des Programms zeigen die Meldungen ob Datum und Zeit korrekt sind. Wenn in 90 Sekunden keine Verbindung zu einem Zeitserver hergestellt werden konnte, wird das Programm beendet. Nach einem erneuten Hochladen kommt zumeist die Verbindung schnell zustande.

#include "WiFi.h"
#include "time.h"
#include "TM1637.h"
TM1637 Anzeige(5, 17);
// WiFi-Daten
char Router[] = "FRITZ!Box 7590 LB";
char Passwort[] = "anea1246";
// 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_wday -> Wochentag (0 = Sonntag, 6 = Samstag)
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;
// Variablen für die Zeit
int Stunden, Minuten, Sekunden;
// Start wird nur beim ersten Start für den Aufbau des TFTs benötigt
bool Start = true;
unsigned long Zeitmessung = 0;
unsigned long Intervall = 1000;
// String für die Anzeige der Zeit
String ZeitAnzeige;
void setup()
{
Serial.begin(9600);
// Zeitzone: Parameter für die zu ermittelnde Zeit
configTzTime(Zeitzone, Zeitserver);
WiFi.mode(WIFI_STA);
// WiFi starten
WiFi.begin(Router, Passwort);
Serial.println("------------------------");
while (WiFi.status() != WL_CONNECTED) {
delay(200);
Serial.print(".");
}
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(Router);
Serial.print("IP über DHCP: ");
Serial.println(WiFi.localIP());
// Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// beim Start entspricht das Datum der Unixtime: 1.1.1970
// Datum/Kalender sollen erst angezeigt werden, wenn das Datum korrekt ist
String Jahr = String(Zeit.tm_year + 1900);
int Zaehler = 0;
// String Jahr nach "1970" durchsuchen
int Suche = Jahr.indexOf("1970");
Serial.println("-------------------------");
Serial.println("Datum und Zeit holen (maximal 90 Sekunden)...");
// solange die Suche nicht erfolgreich ist
while (Suche != -1)
{
// aktuelle Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
Jahr = String(Zeit.tm_year + 1900);
// String Jahr nach "1970" durchsuchen
Suche = Jahr.indexOf("1970");
// Zeit in Stunden, Minuten und Sekunden
Stunden = int(Zeit.tm_hour), Minuten = int(Zeit.tm_min), Sekunden = int(Zeit.tm_sec);
delay(1000);
Zaehler++;
if (Zaehler >= 90)
{
Serial.println();
Serial.println("Datum und Zeit konnte innerhalb von " + String(Zaehler) + " Sekunden nicht geholt werden");
Serial.println("Programm wird beendet");
// Programm beenden
while (1);
}
Serial.print(".");
}
Serial.println();
// Datum/Zeit erfolgreich synchronisiert
if (Suche == -1)
{
Serial.println("-------------------------");
Serial.println("Datum/Zeit erfolgreich synchronisiert ...");
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 < 9) Serial.print("0");
// Zählung beginnt mit 0 -> +1
Serial.print(Zeit.tm_mon + 1);
Serial.print(".");
// Anzahl Jahre seit 1900
Serial.println(Zeit.tm_year + 1900);
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.println(Zeit.tm_sec);
Serial.println("-------------------------");
}
// Zeit in Stunden, Minuten und Sekunden
Stunden = Zeit.tm_hour, Minuten = Zeit.tm_min, Sekunden = Zeit.tm_sec;
// Anzeige starten
Anzeige.begin();
// Helligkeit
Anzeige.setBrightness(10);
Anzeige.clearScreen();
Zeitmessung = millis() + 1000;
}
void loop()
{
// Start = true
// -> Zeit einmalig synchronisieren
if (Start)
{
Start = false;
// Zeit jede Minute mit Zeitserver synchronisieren
// aktuelle Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// Zeit in Stunden, Minuten und Sekunden
Stunden = int(Zeit.tm_hour), Minuten = int(Zeit.tm_min), Sekunden = int(Zeit.tm_sec);
// : einschalten
Anzeige.colonOn();
if (Zeit.tm_hour < 10) ZeitAnzeige = "0" + String(Zeit.tm_hour);
else ZeitAnzeige = String(Zeit.tm_hour);
if (Zeit.tm_min < 10) ZeitAnzeige += "0" + String(Zeit.tm_min);
else ZeitAnzeige += String(Zeit.tm_min);
Anzeige.display(ZeitAnzeige);
}
// Sekunden weiter zählen
if (Zeitmessung < millis())
{
Zeitmessung += 1000;
Sekunden++;
if (Sekunden == 60)
{
// Zeit jede Minute mit Zeitserver synchronisieren
// aktuelle Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// Zeit in Stunden, Minuten und Sekunden
Stunden = int(Zeit.tm_hour), Minuten = int(Zeit.tm_min), Sekunden = int(Zeit.tm_sec);
}
}
if (Sekunden == 0)
{
// : einschalten
Anzeige.colonOn();
if (Zeit.tm_hour < 10) ZeitAnzeige = "0" + String(Zeit.tm_hour);
else ZeitAnzeige = String(Zeit.tm_hour);
if (Zeit.tm_min < 10) ZeitAnzeige += "0" + String(Zeit.tm_min);
else ZeitAnzeige += String(Zeit.tm_min);
Anzeige.display(ZeitAnzeige);
}
}Verwandte Anleitungen
- Datum und Zeit mit ESP und time.h anzeigen
- Datum und Zeit mit dem NTP-Protokoll anzeigen
- Stoppuhr
- Zeit mit time.h auf einem TFT anzeigen
- Wecker mit einem RTC-Modul
- Zeit im Seriellen Monitor mit ESP-Mikrocontroller anzeigen
- Datum, Uhrzeit und Temperatur auf einem LCD mit einem RTC-Modul anzeigen
- Zeiterfassung mit RFID-Modul
Letzte Aktualisierung:





