Analoge Uhr mit BME280 auf ESP32 mit 3,5 Zoll/4 Zoll TFT

Ziele des Projekts

  • ana­lo­ge Uhr mit Datum anzei­gen
  • Uhr­zeit digi­tal anzei­gen
  • Mess­da­ten des BME280 dar­stel­len
  • mit der Touch-Funk­ti­on Tei­le des Bild­schirms aus­blen­den oder Bidschirm dun­kel schal­ten

Beim Modul ESP32-3248S035 han­delt es sich um ein 3,5 Zoll gro­ßes TFT-Dis­­play mit 480×320 Pixeln. Auf der Rück­sei­te sind ein ESP32-Wroom und ein SD-Kar­ten-Modul ver­baut. Der ESP32-Wroom ver­fügt über WiFi und Blue­tooth. Mit JST-Ste­­ckern kön­nen Peri­phe­rie­ge­rä­te ange­schlos­sen wer­den.

Das Modul ESP32-3248S040 ver­fügt über ein 4 Zoll gro­ßes TFT-Dis­play. Bei mei­nem Modul ist ein ESP32 E ver­baut.

Ach­tung
Für das Pro­gramm ist die Ver­si­on mit USB-C-Anschluss erfor­der­lich.
Nur mit die­sem Modul funk­tio­niert der Touch-Trei­ber der Biblio­thek TFT_eSPI.

Konfiguration des Mikrocontrollers

Benötigte Bibliotheken

Zusätzlich benötigte Bibliotheken

Die in den Pro­gram­men ver­wen­de­te Biblio­thek U8g2_for_TFT_eSPI kann nicht über die Biblio­theks­ver­wal­tung instal­liert wer­den, sie muss her­un­ter­ge­la­den wer­den.

🔗https://github.com/Bodmer/U8g2_for_TFT_eSPI

Kli­cke auf der Web­sei­te auf den grü­nen But­ton und füge die Biblio­thek mit Sketch -> zip-Biblio­thek hin­zu..

User_Setup.h

Im Ver­zeich­nis /Arduino/libraries/TFT_eSPI (zu fin­den im aktu­el­len Benut­zer­ver­zeich­nis) muss die Datei User_Setup.h ange­passt wer­den.

Ach­tung
Nach einem Update der Biblio­thek gehen die Ände­run­gen ver­lo­ren.

Touchscreen

Touchscreen kalibrieren

Bei den Touch­screens wer­den resis­ti­ve oder kapa­zi­ti­ve Tech­ni­ken ver­wen­det:
Ein resis­ti­ver Touch­screen reagiert auf Druck mit einem Fin­ger oder einem Stift, bei einem kapa­zi­ti­ver Touch­screen reicht eine Berüh­rung um eine Reak­ti­on aus­zu­füh­ren. In der Regel ist aus Kos­ten­grün­den ein resis­ti­ver Touch­screen ver­baut.

Beim Modul mit USB-C-Anschluss kann der Touch-Con­trol­ler der Biblio­thek TFT_eSPI ver­wen­det wer­den.

Für jede gewünsch­te Rota­ti­on des Dis­plays muss das Pro­gramm sepe­rat aus­ge­führt wer­den.

Nach Abschluss des Pro­gramms wird das Ergeb­nis der Kali­brie­rung im Seri­el­len Moni­tor ange­zeigt.
Je nach­dem, wie genau du die Ecken des Bild­schirms “getrof­fen” hast, wer­den sich die Wer­te unter­schei­den.

Touchscreen testen

Anschluss des BME280

rot -> VCC
schwarz -> SDA
gelb -> SCL
grün -> GND

Info

Das Programm

Konfiguration

Das Pro­gramm kann auf viel­fäl­ti­ge Art und Wei­se ange­passt wer­den:

  • die Far­be der Zei­ger (Zeig­erfar­be)
    die Far­ben kannst du dem Kopf des Pro­gramms ent­neh­men
  • die Far­be des inne­ren Krei­ses (Kreis­far­be)
  • die Far­be der äuße­ren Umran­dung (Rand­far­be)
  • die Far­be der digi­ta­len Uhr­zeit (digi­ta­le­Zeit­Far­be)
  • Anzei­ge des Datums (Datu­m­An­zei­gen)
    true: Datum anzei­gen, fal­se: Datum ver­ber­gen
  • Anzei­ge der digi­ta­len Uhr­zeit (Zeit­Di­gi­tal)
    true: anzei­gen -> Sekun­den­zei­ger wird unab­hän­gig vom Wert der Varia­ble Sekun­den­zei­ger­Kreis als Kreis ange­zeigt
    fal­se: Zeit ver­ber­gen
  • Sekun­den­zei­ger voll­stän­dig oder nur als Kreis anzei­gen (Sekun­den­zei­ger­Kreis)
    true: nur den Kreis anzei­gen
    fal­se: Sekun­den­zei­ger als Linie mit Kreis am Ende der Linie anzei­gen
    (nur wenn die digi­ta­le Zeit nicht ange­zeigt wird)
  • Far­be des Sekun­den­zei­ger (Sekun­den­zeig­erFar­be)
  • die Anzei­ge der Stun­den­mar­kie­run­gen 12, 3, 6 und 9 (Zif­fern­an­zei­gen)
    true: Zif­fern anzei­gen, fal­se: Zif­fern ver­ber­gen

Bereiche für Touch-Aktionen

  • grü­ner Bereich: TFT dun­kel schal­ten
  • gel­ber Bereich: Mess­da­ten aus­blen­den

Erläuterungen zum Quellcode

  • das Pro­gramm ver­wen­det die Funk­ti­on WiFi­Mul­ti
    das WLAN-Netz­werk mit der bes­ten Signal­stär­ke wird auto­ma­tisch ver­bun­den
    ab Zei­le 138 wer­den die ver­füg­ba­ren WiFi-Net­ze als Wer­te-Paar defi­niert:
    SSID des Routers/Repeaters, Pass­wort
    WiFiNetzwerke.addAP("Router_SSID", "xxxxxxxx");
    WiFiNetzwerke.addAP("Repeater_1", "xxxxxxxx");
  • die Syn­chro­ni­sa­ti­on mit dem NTP-Ser­ver kann etwas Zeit in Anspruch neh­men
    kommt nach 90 Sekun­den kei­ne Ver­bin­dung zustan­de, wird das Pro­gramm been­det
  • der BME280 kann unter­schied­li­che HEX-Adres­sen haben:
    0x76 oder 0x77
    mit die­sem ⇒Pro­gramm kannst du die Adres­se ermit­teln
  • Lis­te der Zeit­zo­nen https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
    #defi­ne Zeit­zo­ne “CET-1CEST,M3.5.0/02,M10.5.0/03”
    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
  • Ele­men­te der Struk­tur tm der Biblio­thek time.h
    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)
  • im set­up-Teil wer­den ab Zei­le 157 die Daten aus der Kali­brie­rung ein­ge­tra­gen
    Bei­spiel:
    uint16_t calData[5] = {258, 3482, 313, 3556, 4};
    tft.setTouch(calData);

Der Quellcode

Quellen


Letzte Aktualisierung: Juni 17, 2026 @ 7:19

Inhalt