Zeit mit NTP und Messwerte des BME280 auf LCD anzeigen

Kate­go­rien: ,



Ziele des Projekts

  • die aktu­el­le Zeit alle 60 Sekun­den vom NTP-Ser­ver holen
  • mil­lis() sorgt für die fort­lau­fen­de Zeit
  • Wochen­tag, Datum und Uhr­zeit auf dem 4-zei­li­gen LCD mit I²C-Schnitt­stel­le anzei­gen
  • im 60 Sekun­den Rhyth­mus die Mess­wer­te des BME280 ermit­teln und aktua­li­sie­ren

Benötigte Bauteile

Board installieren

Als Mikro­con­trol­ler kön­nen belie­bi­ge Modu­le aus der Fami­lie der ESP-Mikro­con­trol­ler ver­wen­det wer­den.

NTP-Server

Die kor­rek­te Zeit ist für die Bear­bei­tung viel­fäl­ti­ger Auf­ga­ben in der Daten­ver­ar­bei­tung not­wen­dig. Daher muss die Zeit regel­mä­ßig mit im Inter­net zur Ver­fü­gung ste­hen­den NTP (Net­work Time Protocol)-Servern syn­chro­ni­siert wer­den.
In Euro­pa sind Zeit­ser­ver zu einem län­der­spe­zi­fi­schen Pool zusam­men geschlos­sen. In Deutsch­land heißt der Pool de.pool.ntp.org
Als zusätz­li­che Infor­ma­ti­on muss dem Pro­gramm die Zeit­zo­ne mit­ge­teilt wer­den:

Der Schaltplan

ESP32-Wroom

Die Modu­le wer­den über I²C ange­schlos­sen: die SCL-Pins wer­den mit 22, die SDA-Pins mit 21 ver­bun­den.

I²C-Pins anderer Mikrocontroller

Benötigte Bibliotheken

Das Programm

Bibliotheken und Variable

  • die ifdef-Abfra­ge sorgt dafür, dass je nach ver­wen­de­ten Mikro­con­trol­ler die kor­rek­te WiFi-Biblio­thek ver­wen­det wird
  • das ⇒Array day­sOf­T­he­Week sorgt für die Dar­stel­lung der Wochen­ta­ge
    da die Namen unter­schied­lich lang sind, müs­sen sie mit Leer­zei­chen auf­ge­füllt wer­den
  • Die ⇒Struk­tur tm besteht aus ver­schie­de­nen Ele­men­ten:
    tm_hour -> Stun­de: 0 bis 23
    tm_min -> Minu­ten: 0 bis 59
    tm_sec -> Sekun­den 0 bis 59
    tm_mday -> Tag 1 bis 31
    tm_mon -> Monat: 0 (Janu­ar) bis 11 (Dezem­ber)
    tm_year -> Jah­re seit 1900
    tm_yday -> ver­gan­ge­ne Tage seit 1. Janu­ar des Jah­res
    tm_isdst -> Wert > 0 = Som­mer­zeit (dst = day­light saving time)
  • defi­ne Zeit­zo­ne „CET-1CEST,M3.5.0/02,M10.5.0/03“
    defi­niert die Zeit­zo­ne
    CET = Cen­tral Euro­pean Time -1 -> 1 Stun­de zurück
    CEST = Cen­tral Euro­pean Sum­mer Time von
    M3 = März, 5.0 = Sonn­tag 5. Woche, 02 = 2 Uhr
    bis M10 = Okto­ber, 5.0 = Sonn­tag 5. Woche 03 = 3 Uhr
  • Sekun­den­An­zei­gen ent­schei­det dar­über, ob die Sekun­den bei der Dar­stel­lung der Uhr­zeit fort­lau­fend ange­zeigt wer­den
    true/false

Der setup-Teil

Beim Start des Pro­gramms wer­den Sta­tus­mel­dun­gen ange­zeigt:

  • Der BME280 wird in ver­schie­de­nen Aus­füh­run­gen und mit unter­schied­li­chen HEX-Adres­sen ange­bo­ten: 0x76 oder 0x77
    Du musst in Zei­le 59 die kor­rek­te Adres­se ein­set­zen.
    die HEX-Adres­se kannst du mit die­sem Pro­gramm ⇒her­aus­fin­den.
  • beim ers­ten Kon­takt mit dem NTP-Ser­ver ent­spricht die über­mit­tel­te Zeit noch dem UNIX-Zeit­stem­pel, der Zeit in Sekun­den, die seit dem 1.1.1970 ver­gan­gen sind.
    es wird für maxi­mal 40 Sekun­den im Sekun­den­takt die Zeit solan­ge abge­fragt, bis die Jah­res­zahl nicht mehr 1970 ist, also die Zeit kor­rekt ist
    bei Miss­erfolg wird das Pro­gramm been­det

Der loop-Teil

Funktionen

Im loop-Teil wer­den zwei ⇒Funk­tio­nen auf­ge­ru­fen:

  • Zeit­An­zei­gen()
    die Zeit wird alle 60 Sekun­den mit dem NTP-Ser­ver syn­chro­ni­siert
  • Mes­sung­An­zei­gen()
    nach jeder vol­len Minu­te wer­den die Mess­wer­te des BME280 abge­fragt und ange­zeigt

Quellen


Letzte Aktualisierung: Apr. 20, 2026 @ 20:25

Inhalt