Zeit mit time.h auf einer 4-stel­li­gen 7-Seg­ment-Anzei­ge darstellen

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Mit der Biblio­thek time.h soll die aktu­el­le Zeit auf einer 4-stel­li­gen 7-Seg­ment-Anzei­ge dar­ge­stellt werden.

Benö­tig­te Bauteile

  • ESP32-Mikro­con­trol­ler
  • 4-stel­li­ge 7-Segment-Anzeige
  • Lei­tungs­dräh­te

Kon­fi­gu­ra­ti­on der Mikrocontroller

Schalt­plä­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ö­tig­te Bibliothek

Funk­tio­nen der Biblio­thek TM1637 (AKJ)

Schlüs­sel­wortAkti­on
begin()Modul star­ten
setBrightness(int)0-15 → Hel­lig­keit des Dis­plays setzen
cle­ar­Screen()Anzei­ge löschen
display(String)
display(int)
display(String/int, fal­se, fal­se, Position) 
display"Text");
display(10);
diaplay(1, fal­se, fal­se, 1);
Posi­ti­on beginnt mit 0
colo­nOn()Dop­pel­punkt einschalten
colon­Off()Dop­pel­punkt ausschalten

Das Pro­gramm (ESP32-Wroom)

Pro­gram­me für ande­re Mikro­con­trol­ler fin­dest du hier

Im Seri­el­len Moni­tor siehst du ob die Ver­bin­dung über DHCP erfolg­reich war.

#include "WiFi.h"

#include "time.h"
#include "TM1637.h"

// Name des Objektes und verbundene Pins
TM1637 Anzeige(5, 17);

// Router/Passwort
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_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)
*/

// Name der Struktur tm
tm Zeit;
WiFiServer Server(80);

// String für die Anzeige der Zeit
String ZeitAnzeige;

void setup() 
{
  // Zeitzone: Parameter für die zu ermittelnde Zeit
  configTzTime(Zeitzone, Zeitserver);

  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial);
  delay(1000);

  // 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());
  
  // Anzeige starten
  Anzeige.begin();  

  // Helligkeit
  Anzeige.setBrightness(10);

  Anzeige.clearScreen();
}

void loop() 
{
  // aktuelle Zeit holen
  time(&aktuelleZeit);

  // localtime_r -> Zeit in die lokale Zeitzone setzen
  localtime_r(&aktuelleZeit, &Zeit);

  // : einschalten
  Anzeige.colonOn();

  /*
    es kann bis zu 30 Sekunden dauern
    bis die Zeit ermittelt wird  
    String ZeitAnzeige zusammenbauen
    wenn Stunden/Minuten < 10 → führende 0 ergänzen
  */
  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);
  delay(5000);
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Anleitungen


Letzte Aktualisierung: Dez. 23, 2024 @ 7:15