
Einleitung
Ich verwende ein „1,8-Zoll-LCD-Bildschirm-SPI-Seriellport-Modul TFT-Farbdisplay-Touchscreen ST7735 (128*160) für Arduino“, das ich für 9 € bei aliexpress.com gekauft habe.
Details: Display-Prozessor: ST7735, Touch-Prozessor: XPT2046, Display-Typ: ZJY180-TV2.0, 128×160; als ESP8266 verwende ich den WEMOS D1 Mini Pro (v 2.0) https://wiki.wemos.cc/products:d1:d1_mini_pro.
Es ist Teil meines Projekts „BigPi“, den PI4 als meinen zentralen Heimserver zu nutzen. Ich habe beschlossen, dass er ein Display braucht.
Es sollte gut aussehen… also was habe ich gemacht?
Tatsächlich habe ich das Touchdisplay nach vielen Versuchen auf dem RPI zum Laufen gebracht – aber was steht nun auf meinem Schreibtisch: Eine große schwarze RPI4-Box mit einem Touchdisplay. Sieht nicht gut aus.
Meine Alternative: Ich baue ein winziges Touchdisplay mit ESP8266 in einer kleinen Box mit Akku, die ich überall platzieren kann. Ich werde über WLAN mit meinem RPI kommunizieren. Keine schwarze Box auf dem Schreibtisch, nur ein cooler Multifunktionsschalter und eine Statusanzeige für die RPI-Fernsteuerung. Ein ziemlich langwieriges Projekt – mal sehen, wie es läuft.
Verkabelung – wie man alles zusammenbaut
Natürlich aus China – es gibt nicht viel Dokumentation. Unten ein paar Infos, die ich bei AliExpress zum Display gefunden habe, und alle Kontakte am Display sind beschriftet. Zu beachten: PEN (11) ist hoch und wird niedrig, wenn das Display berührt wird – kann also direkt mit dem Wemos verbunden werden (siehe unten).


Ein paar Details zum WEMOS D1 Mini Pro
Die Lötpads verstehen
Das ist ein sehr schöner ESP8266-Prozessor, klein und mit integriertem LiPo-Ladegerät, sodass jeder 3,7-V-Akku direkt angeschlossen und über den Mini-USB-Anschluss geladen werden kann. Er ist pinkompatibel mit dem bekannten WEMOS Mini, der auf der Rückseite einige interessante Lötpads hat:
- SLEEP: Dies verbindet den Reset-Pin mit dem XPD_DCD-Pin (Deep Sleep Wakeup), sodass sich das WEMOS selbst aus dem Deep Sleep wecken kann. Für eine einfache Programmierung und damit die serielle Schnittstelle funktioniert, sollte diese Verbindung nicht hergestellt werden. Tu dies also, bevor du das Gerät in Betrieb nimmst
- BAT-A0: Verbindet die Batteriespannung mit dem analogen A0-Eingang, sodass die Batteriespannung gemessen werden kann (um einen niedrigen Batteriestand zu erkennen).
- LDO_EN: Zum Deaktivieren des 5-V-Reglers, damit du deine eigene Stromquelle direkt an die 3,3-V- und GND-Pins anschließen kannst. Nützlich für den Batteriebetrieb. Wenn du Standard-Lithium-Ionen-Batterien mit 3,7–4,2 V verwendest, ist es besser, diese an den 5-V-Pin anzuschließen, da dieser mit einem LDO-Wandler verbunden ist.

Deep Sleep… tzzzzz…
Ich brauche „Deep Sleep“ mit extrem niedrigem Stromverbrauch, da das Gerät lange laufen soll.
Ich messe direkt nach dem Auspacken einen Strom von 0,15 mA (150 µA) für den WEMOS Pro Mini über ESP.deepSleep(); mit einem 1200-mAh-LiPo ergibt das eine Laufzeit von 300 Tagen.
Wenn es mit angeschlossenem Display, aber ohne Hintergrundbeleuchtung (BLK an GND) läuft, verbraucht es 0,48 mA (500 µA) – das entspricht einer Laufzeit von ca. 100 Tagen, 3 Monate sind okay 🙂
Wenn das Display aktiv ist und die Hintergrundbeleuchtung eingeschaltet ist, verbraucht es etwa 20 mA, wenn das Display aus ist, sinkt der Verbrauch auf 1 mA.
Zu beachten
Während der Deep-Sleep-Phase wird GPIO_16 auf High gehalten. Am Ende der Deep-Sleep-Phase geht GPIO_16 auf Low, zieht den Reset-Pin herunter (der Reset-Pin ist Low-aktiv, füge eventuell einen 1–10-kΩ-Widerstand dazwischen ein) und startet den Wemos neu.
Das Problem ist, dass beim Eintritt des ESP8266 in den Deep-Sleep-Modus alle I/Os auf High gehen – mein Display ist also „an“. Es wird ein Inverter benötigt.
SPI – Verwirrung
SPI hat mich verwirrt, es hat 3 Leitungen: MISO, MOSI und Clock, genau wie beim Touch-Display. Am Ende habe ich gemerkt, dass es 2 Controller hat, einen für den Touch-Sensor und einen für das Display. Beide sind am selben SPI-Bus angeschlossen und werden über Chip-Select ausgewählt. Es sieht also in etwa so aus:

SPI-Logik auf dem TFT-/Touch-Display
Software – Wie bringe ich es zum Laufen?
Ich nutze CLION von JetBrains und Platformio für die Entwicklung – was ich wirklich empfehlen kann. Die folgenden Bibliotheken unterstützen beide Controller:
Adafruit ST7735 and ST7789 Library
Adafruit GFX Library
XPT2046_Touchscreen
Dank dieser tollen Bibliotheken kannst du mit nur wenigen Zeilen Code auf dem kleinen Display mit einem Stift malen.
void setup(void) {
tft.initR(INITR_GREENTAB); // initialize a ST7735S chip, CN: My-chip has a "green flag at the protection foil"
tft.setRotation(1);
tft.fillScreen(ST7735_BLACK);
ts.begin();
ts.setRotation(0);
delay(500);
tft.fillScreen(ST7735_BLACK);
testdrawtext("Welcome", ST7735_WHITE);
delay(1000);
tft.drawPixel(150, 118, ST7735_GREEN);
}
void loop() {
if (ts.touched()) {
TS_Point p = ts.getPoint();
tft.drawPixel(p.y * x_tft_scale, p.x*y_tft_scale, ST7735_GREEN);
}
delay(5);
}
Mission erfüllt 🙂
