Terminkalender mit ESP32 mit 2,8 Zoll TFT (CYD)



Ziel des Projekts

Pas­send zu jedem Tag sol­len die anste­hen­den Ter­mi­ne auf dem TFT ange­zeigt wer­den. Die Daten befin­den sich auf einer SD-Kar­te und wer­den täg­lich um Mit­ter­nacht aktua­li­siert. Zusätz­lich wer­den Datum und Uhr­zeit ange­zeigt.

Anwendungsbeispiel

Dan­ke an Nor­bert Schrills

Die Hardware

Für die­se Pro­jekt wird ein CYD (Cheap Yel­low Dis­play) ver­wen­det. Auf der Rück­sei­te des TFTs mit 2,8-Zoll und 320×240 Pixeln befin­den sich ein ESP32-Wroom, ein SD-Kar­ten-Modul, eine RGB-LED und Anschluss­mög­lich­kei­ten für Peri­phe­rie­ge­rä­te mit­hil­fe von JST-Ste­ckern.

Es gibt meh­re­re Ver­sio­nen des CYD: ⇒ESP32-2432S028 und ESP32-JC2432W328C. Sie unter­schei­den sich im ver­wen­de­ten Gra­fik­trei­ber:

  • mit Mikro-USB-Anschluss (ESP32-2432S028)
    Gra­fik­trei­ber ⇒ILI9341
  • mit USB-C-Anschluss (ESP32-2432S028 und ESP32-JC2432W328)
    Gra­fik­trei­ber ⇒ST7789

Konfiguration des Mikrocontrollers

Der Datensatz auf der SD-Karte

Die Daten müs­sen im For­mat tt.mm./Name des Ein­trags vor­lie­gen. Der Datei­na­me ist zwin­gend Kalender.txt. Wenn Tag oder Monat ein­stel­lig sind, muss eine 0 vor­an­ge­stellt wer­den. Die Rei­hen­fol­ge der Ein­trä­ge darf belie­big sein. Es wer­den maxi­mal vier Ein­trä­ge für den jewei­li­gen Tag auf dem Dis­play dar­ge­stellt. Für jeden Ein­trag muss eine neue Zei­le erstellt wer­den.
Das gilt auch für meh­re­re Ter­mi­ne an einem Tag.
Die Datei wird nur ein­mal um Mit­ter­nacht neu gele­sen, daher kann die SD-Kar­te zwi­schen­durch her­aus­ge­nom­men und neu beschrie­ben wer­den.

Als Trenn­zei­chen zwi­schen Datum und Kalen­der­ein­trag dient der /.

Aufbau der Datei

Kalenderdaten schreiben

Mit die­sem Pro­gramm kannst du Daten auf die SD-Kar­te schrei­ben, sie wird auto­ma­tisch als Kalender.txt gespei­chert. Wenn du eine neue Datei erstel­len willst, musst du in Zei­le 52 die // ent­fer­nen.

Du musst nach jeder Zei­le die Ein­ga­be-Tas­te drü­cken.
Zum Spei­chern musst du nach der letz­ten Zei­le die Tas­te # drü­cken.
Anschlie­ßend wird die Datei ange­zeigt.

So sieht es dann aus:

Natür­lich kannst du die Datei auch mit einem belie­bi­gen Text­edi­tor erstel­len oder bear­bei­ten. Weil das Durch­su­chen der Datei eini­ge Zeit in Anspruch nimmt, emp­fiehlt es sich abge­lau­fe­ne Ter­mi­ne zu löschen.

Das Programm

Vorbemerkungen

  • Das Pro­gramm ver­wen­det die Schrift­ar­ten von ⇒u8g2. Wenn du grö­ße­re Schrift­ar­ten ver­wen­den willst, musst du aus­pro­bie­ren, ob die Ein­trä­ge noch auf das Dis­play pas­sen.
    Eini­ge Bei­spie­le:
    14pt: u8g2_font_luRS14_tf
    16pt: u8g2_fnt_logisoso16_tf
    18pt: u8g2_font_luBS18_tf
    20pt: u8g2_font_fub20_tf
    22pt: u8g2_font_logisoso22_tf
    24pt: u8g2_font_helvB24_tf
    26pt: u8g2_font_logisoso26_tf
    28pt: u8g2_font_logisoso28_tf
    Die Schrif­ten wer­den mit setFont(Name_der_Schrift) defi­niert.
  • Vor­der­grund- und Hin­ter­grund­far­be kön­nen aus der Lis­te im Kopf des Pro­gramms in den ent­spre­chen­den Varia­blen getrennt für den Bereich von Datum und Zeit und für den Bereich der Ter­mi­ne fest­ge­legt wer­den:
    Far­ben Datum/Zeit:
    int Hin­ter­grund­Far­be­Da­tum = SCHWARZ;
    int Vor­der­grund­Far­be­Da­tum = WEISS;
    Far­ben Ter­mi­ne:
    int Hin­ter­grund­Far­be­Ter­mi­ne = SCHWARZ;
    int Vor­der­grund­Far­be­Ter­mi­ne = WEISS;
  • Es kön­nen höchs­ten 50 Daten­sät­ze gele­sen wer­den. Wenn du mehr benö­tigst, musst du den Wert der Varia­blen Daten­Max erhö­hen.
  • Bis zu 90 Sekun­den ver­sucht das Pro­gramm eine Ver­bin­dung zum Zeit­ser­ver auf­zu­bau­en und das kor­rek­te Datum und die aktu­el­le Zeit zu holen.
    Gelingt das nicht, wird das Pro­gramm been­det.
    Beim nächs­ten Start ant­wor­tet der Zeit­ser­ver zumeist in kur­zer Zeit.

Benötigte Bibliotheken

Je nach Art des USB-Anschlus­ses wird ein ande­rer Gra­fik-Trei­ber benö­tigt:

oder:

Wenn du zuvor die Biblio­thek SdFat instal­liert hast kann es zu Kon­flik­ten kom­men. In die­sem Fall musst du sie über die Biblio­theks­ver­wal­tung deinstal­lie­ren und statt­des­sen den Adafruit Fork instal­lie­ren.

Einbindung der Bibliotheken und setup-Teil

Grafiktreiber ST7789

Für den ESP-JC2432W328 gibt es eine Beson­der­heit:
Der Wert der Varia­blen TFT_BL muss auf 27 gesetzt wer­den.

Grafiktreiber ILI9341

Beim Start des Pro­gramms zei­gen die Mel­dun­gen, ob die SD-Kar­te gestar­tet wur­de, die Datei Kalender.txt gele­sen wer­den konn­te und ob Datum und Zeit kor­rekt sind.

Der loop-Teil

Die Funktion ZeigeDatum()

Das Datum wird beim Start des Pro­gramms und danach nur noch beim Wech­sel des Datums um Mit­ter­nacht ange­zeigt.

Die Funktion KalenderDurchsuchen()

Die Funk­ti­on wird ein­ma­lig beim Start des Pro­gramms und danach nur noch zum Datums­wech­sel um Mit­ter­nacht auf­ge­ru­fen. Für den Ver­gleich des aktu­el­len Datums mit einem Ein­trag auf der SD-Kar­te wird der String Datum aus der vom Zeit­ser­ver über­mit­tel­ten Zeit zusam­men gesetzt und dann mit dem ers­ten Teil des getrenn­ten Strings (Datum­Ein­trag) ver­gli­chen. Der zwei­te Teil des getrenn­ten Strings (Kalen­der­Ein­trag) wird auf dem Dis­play ange­zeigt.


Quellen


Letzte Aktualisierung: Feb. 1, 2026 @ 11:13

Inhalt