ESP32-2432S028 mit 2.8" Touchscreen (Cheap Yellow Display) Vorstellung


Das ESP32-2432S028-Modul, wie es offiziell heißt, ist ein Modul mit ESP32 Wroom-32 MCU auf der Rückseite und einem 2.8 Zoll Touchscreen auf der Vorderseite. Da der Name "ESP32-2432S028" ein wenig sperrig klingt, hat sich auch die Bezeichnung "Cheap Yellow Display", auf deutsch "billiges, gelbes Display" eingebürgert, kurz CYD. Ich werde es aber auch Touchscreen-ESP32 nennen, weil ich finde, man sollte den ESP32 nicht unterschlagen.

Das ist ein Wroom-32-SoC, wie wir ihn ja bereits kennen. Der ESP32 ist ein Mikrocontroller-Modul des chinesischen Herstellers Espressif, der einiges bietet. Er bringt WLAN, Bluetooth, genügend Speicher und Rechenpower auch für anspruchsvollere Projekte mit und er ist günstig.

Am sinnvollsten für mich ist es, fertige Entwicklungs-Boards zu kaufen, auf denen das SoC-Modul bereits eingelötet ist und das über Spannungswandler, seriellen Adapter und Header-Pins verfügt. Wie zum Beispiel den ESPDuino-32. In dem verlinkten Artikel findet ihr auch grundsätzliche Infos zum ESP-32 und wie man ihn programmiert. Dass geht dann ganz einfach mit einer IDE wie Arduino IDE oder VSCode mit PlatformIO.

Ich benutze ESP32-Boards schon eine ganze Weile und habe die verschiedenen ESP32-Boards hier auch schon mal vorgestellt und verglichen.

Wer noch keine Ahnung von ESP32-Boards hat, sollte sich oben erwähnten Boardvergleich und auch meinen Artikel über die ESP 32 Erst-Einrichtung zu Gemüte führen. Das Wissen daraus setze ich für diesen Artikel voraus.


Die Hardware - ein Komplettpaket für einen super Preis

Aber das ESP32-2432S028-Modul geht hier weiter: Es ist nicht nur ein Entwicklungsboard mit ESP-32, sondern es hat auf der Vorderseite gleichen ein Touchscreen verbaut. Der ist mit 2.8 Zoll, 320 x 200 Pixel und Farbe wirklich nicht schlecht ausgestaltet. Außerdem findet sich auf der Vorderseite noch ein Lichtsensor, ein Fotowiderstand (Mehr zu Foto-Widerständen in diesem Artikel).

Der Touchscreen ist übrigens ein alter Bekannter, es ist auch in dem XPT2046 3.5 Zoll RPi Display TFT Touchscreen verbaut, dass ich an meinem Raspberry Pi benutze, dort allerdings in der Auflösung 480x320.

Es ist resistiv, nicht kapazitiv, dass heißt, es reagiert auf Druck und funktioniert nicht mit dem flachen Finger, sondern man muss eher den Fingernagel bemühen.

Auf der Unterseite findet man dann noch einen µSD-Karten-Slot, eine RGB-LED, einen Lautsprecheranschluss, Taster, drei vierpolige Mini-JST-Anschlüsse (mit jeweils 1.25 mm Pin-Abstand, PH_1.25_4P) und je nach Variante eine Micro-USB und eine USB-C-Buchse.

Damit hat man alles kompakt zusammen, was man für viele Projekte braucht: Und das ganze Paket kostet aus China (z. B. über AliExpress) gerade einmal 10 bis 15 Euro. Über Amazon Deutschland muss man derzeit (Stand Mitte März 2024) 25 Euro bezahlen, hat es dann aber auch schneller.

Ein toller Preis, für den man sonst vielleicht nur ein Display bekäme. Das man dann über Dupont-Kabel verbinden müsste. Genauso ein SD-Card-Slot, das man zusätzlich kaufen müsste und so weiter.

Hier spart man sich jede Menge Arbeit, alles ist schon auf die Platine gelötet. Und die ist so kompakt es geht und man kann easy ein Gehäuse für den 3D-Drucker dafür designen. Wen das Thema 3D-Druck interessiert: auch dazu habe ich einige Artikel geschrieben.

Für IoT-Projekte ist der Touchscreen-ESP32 ideal, da der ESP32 ja auch über WiFi verfügt. Einfach den gewünschten Sensor anklemmen, das Ganze in ein Gehäuse und vor Ort an der Wand befestigen. Das Display zeigt die aktuellen Werte an, die SD-Karten protokolliert den Langzeitverlauf und über WLAN kann man die Werte auch aus der Ferne abrufen.

Einen kleinen Nachteil hat das Modul aber vielleicht: es ist nicht mehr so offen wie ein Entwicklungsboard ohne Alles. Die meisten GPIO-Pins sind schon vergeben und nur noch wenige frei. Es taugt also nichts für Projekte, bei denen man sehr viele freie Pins braucht. Aber da würde ich sowieso zu einem noch günstigeren Developerboard greifen.

Spezifikationen

Pinouts

Es gibt das ESP32-2432S028 in mehreren Revisions: eine ganz alte, bei denen das Board noch richtig satt gelb ist und neuere, bei denen das Board eher ein orange ist. Und es gibt eine neue Revision, die nicht nur einen Micro-USB-Port hat, sondern auch einen USB-C-Port. Beide Ports sind hier aber parallel geschaltet, es ist also egal, welchen Port man benutzt; man sollte nur nicht beide Port gleichzeitg benutzen.

Die Boards sind sehr gut beschriftet, so dass man meist direkt auf der Platine sieht, welcher Pin welche Bedeutung hat. Trotzdem ist es schön, davon eine Dokumentation zu haben, ohne immer aufs Board schauen zu müssen.

Wir betrachten das Board von der Rückseite aus und zwar so, dass das ESP32-Modul und die schwarze Antenne nach rechts zeigt.

Dann ist an der Oberkante ein Anschluss namens "SPEAK" . Nicht schwer zu erraten, dass dies der Speaker-Anschluss, also der für einen Lautsprecher ist. Dieser sollte laut macsbug (1) 8 Ω haben und über einen 100 Ω Widerstand an (+) angeschlossen werden. Der Treiber ist ein SC8002B-Chip.

Oben links finden wir die serielle Schnittstelle ("Power supply base") mit: Hier kann man einen seriellen Monitor anschließen, oder Geräte, die via seriellen Schnittstelle gesteuert und ausgelesen werden wie zum Beispiel ein NEO-6M-GPS-Empfänger-Modul oder ein SIM800L-Modul für das Mobilfunknetz.

So könnte man sein eigener GPS-Empfänger zur Anzeige der Geokoordinaten oder der sehr genauen GPS-Zeit bauen oder sogar sein eigenes Mobilfunk-Telefon.

Unten rechts findet man einen Anschluss, der auf dem Board als P3 bzw. "Extended IO" bezeichnet wird

Links daneben findet man einen Anschluss, der auf dem Board als CN1 bzw. "Temperature and humidity interface" bezeichnet wird:

Direkt über dem Anschluss CN1 findet sich die RGB-LED, die mit "LED1" gekennzeichnet ist. Sie wird angesteuert mit:

Weitere angeschlossene Geräte: Außerdem finden sich oben rechts zwei Taster, einmal für Reset (RST) und einmal Boot.

Unterschiede in den Board-Versionen

Die Board-Revision 1 und 2, erkennbar daran, dass sie nur einen Micro-USB-Port haben, benutzen als Display ein ILI9341. Die Revision 3, die neben dem Micro-USB-Port auch noch einen USB-C-Port hat, benutzt als Display ein ST7789 (Mode 3). Die Displays sind jeweils über SPI angeschlossen, haben aber eine andere Byte-Reihenfolge und benötigen deshalb den jeweils richtigen Treiber / Library. Der Touch-Digitizer ist bei beiden dergleiche, nämlich der XPT2046.

Wird die Revision 1 oder 2 mit einer Firmware für Revision 3 beschrieben, so passt der Treiber nicht und das Bild erscheint horizontal als auch vertikal gespiegelt. Da der Digitizer aber noch der gleiche ist, bleiben die Klickpositionen gleich und man klickt stets daneben.

Je nach Board-Revision muss also eine andere Display-Library eingebunden werden und eine eigene Firmware erstellt werden.

Die Board-Revision 1 ist noch mit einem 8-Pin seriellen Flash-Speicher auf U4 bestückt. Bei Rev. 2 und 3 fehlt dieser. Der U4-Flash benutzt den selben CS-Pin (Client Select) wie der interne Flash-Speicher und es kommt zu Problemen beim Flashen von Firmware auf den ESP32. Abhilfe hilft das Entlöten des Chips auf U4 neben der ESP32-Can.

Probleme mit schlechter Sound-Wiedergabe?

Laut HexeguitarDIY (2) sollen CYD-Exemplare, die vor 2023 verkauft worden sind, eine vereinfachte Schaltung mit nur zwei Widerständen R4 mit 4.7 kΩ (Aufschrift 472) und R9 mit 68 kΩ (Aufschrift 683) haben:



statt der eigentlich nach Original Schaltplan zu verbauenden R4 mit 4.7 kΩ, R7 mit 47 kΩ, R8 mit 22 kΩ und R9 mit 68 kΩ:



Bei mir sind bei R7 und R8 Null-Ohm-Widerstände eingelötet, was nicht richtig ist und zu einem sehr unsauberen Sound führen soll, weil die untere Hälfte der Amplitude abgeschnitten wird. HexeguitarDIY schlägt vor (2), die Original-Werte wiederherzustellen und einen 56 kΩ parallel zu R9 einzulöten oder R9 durch einen Widerstand mit 33 kΩ bis 47 kΩ zu ersetzen, um einen sauberen Sound zu bekommen. Die Bauform der Widerstände ist SMD-Größe 0603, das Löten solch kleiner Bauteile ist nicht ganz trivial.

Sichern der Demo-Firmwares für später

Damit der Firmwares mit den Demo-Benutzeroberfläche nicht verloren gehen, bevor wir im nächsten Teil beginnen, diese mit unserer eigenen Software zu programmieren und zu überschreiben, möchte ich die beiden Firmwares, die auf meinen CYDs bereits drauf sind, als Datei sichern.

Dazu müssen wir uns ein Tool von der Herstellerseite Espressiv besorgen, und zwar das esptool. Es kann aber auch gut sein, dass ihr das schon auf eurer Platte habt, weil ihr es mit der Arduino IDE oder der Platform IO mitinstalliert habt. Diese beiden IDEs benutzen das esptool ebenfalls zu Upload.

Bitte nicht verwechseln mit den Flash Download Tools von Espressiv. Das suggeriert zwar, man könnte die Firmware damit vom ESP-32 downloaden, in Wirklichkeit macht diese aber ein Upload und lädt Firmwares auf den ESP32 rauf. Einen Download (ESP32 zu Datei) bietet es gar nicht an.

Das esptool finden wir auf Github bei espressig/esptool/releases. Bei mir war gerade Version esptool-v4.7.0-win64.zip aktuell.

Das esptool ist ein Kommandozeilen-Tool und vielleicht nicht so wirklich intuitiv zu bedienen, darum hier eine Anleitung: Zu allererst solltet ihr euer CYD an den PC anstecken und herausfinden, welchen COM-Port er benutzt. Den COM-Port sieht man ggf. im Geräte-Manager in Windows unter "Anschlüsse (COM & LPT). Der ESP32 meldet sich dort als "USB Serial Port (COMxx)" an. Falls es da keinen Eintrag gibt, muss ggf. der serielle Windows-Treiber installiert werden. Dazu siehe auch meinen Artikel ESP32 Erst-Einrichtung. Habt ihr sonst nichts an seriellen Sachen am PC angesteckt, findet das esptool den richtigen vielleicht auch von allein. Ihr könnte das ja erst einmal ohne ausprobieren und dann tiefer forschen, falls es nicht klappt.

Bei mir ist der COM17-Port der richtige. Als nächstes machen wir ein DOS-Fenster (neudeutsch Einganeaufforderung) auf und wechseln in das Verzeichnis, in dem wir das esptool entpackt haben. Dann schauen wir uns einmal an, welches Flash auf unserem CYD sitzt:
d:\ESP32 >> esptool.exe -p COM17 flash_id esptool.py v4.7.0 Serial port COM17 Connecting.... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting..... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: e4:65:b8:76:89:7c Uploading stub... Running stub... Stub running... Manufacturer: 68 Device: 4016 Detected flash size: 4MB Hard resetting via RTS pin...
Okay, unter COM17 findet das esptool schon mal einen ESP32 und der hat 4 MB Flash. Oder neudeutsch 4 MiB, also gute, alte echte 4 MB mit 4 x 1024 x 1024 Bytes, also 4'194'304 Bytes genau, oder in hexadezimal: 0x400000. Das wird jetzt wichtig.

Denn wir wollen den gesamten Flash auslesen, also alle 4 MiB Bytes. Das wir den Flash von Anfang (0x0 oder einfach nur 0) bis Ende (0x400000, 400 Tausend, nicht 4 Mio.!) auslesen wollen, und wohin wir das Gelesene als Datei schreiben wollen geben wir als weitere Parameter ein.

Bei mir kam es allerdings immer wieder zum Abbruch und er hat es nie wirklich bis zum Ende geschafft. Als ich aber die Baudrate, also die ÜBertragungsgeschwindigkeit auf 460800 festgelegt habe, funktionierte es im ersten oder zweiten Anlauf. Das wird wohl auch die beste Baudrate bei euch sein, solltet ihr Probleme haben. Ansonsten versucht vielleicht auch mal 115200, 57600 oder 38400.

d:\ESP32 >> esptool.exe -p COM17 -b 460800 read_flash 0 0x400000 CYD-demo1.bin esptool.py v4.7.0 Serial port COM17 Connecting...... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting.... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: e4:65:b8:76:89:7c Uploading stub... Running stub... Stub running... Changing baud rate to 460800 Changed. 4194304 (100 %) 4194304 (100 %) Read 4194304 bytes at 0x00000000 in 102.9 seconds (326.1 kbit/s)... Hard resetting via RTS pin...
Bravo! Wir haben nun eine CYD-demo1.bin-Datei mit exakt 4 MiB auf unserer Festplatte. Das ist ein genaues Abbild der Firmware, sogar mit den leeren Speicherbereichen.

Und Flashen des ESP32-2432S028 mit Firmware

Nachdem ich meine Firmwares nun als CYD-demo1.bin bzw. CYD-demo2.bin gesichert habe, mache ich jetzt mal einen Test und schreibe die Firmware des neueren Modells mit USB-C-Port auf das alte CYD, dann sind beide gleich und ich kann die Bildschirme besser vergleichen, so meine Idee. Dies geht mit:
d:\ESP32 >> esptool.exe -p COM17 -b 460800 write_flash 0 CYD-demo2.bin esptool.py v4.7.0 Serial port COM17 Connecting.... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting.... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.0) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 24:d7:eb:15:89:f0 Uploading stub... Running stub... Stub running... Changing baud rate to 460800 Changed. Configuring flash size... Flash will be erased from 0x00000000 to 0x003fffff... Compressed 4194304 bytes to 1024210... Wrote 4194304 bytes (1024210 compressed) at 0x00000000 in 33.2 seconds (effective 1010.2 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin...
Die Länge von 0x400000 müssen wir diesmal nicht angeben, denn die holt sich das esptool aus der Dateilänge. Es schreibt halt soviel, wie das File lang ist.


Nach dem Flashen des alten CYD mit der neuen Firmware erlebe ich eine Überraschung. Das Display ist nicht nur ein anderes, sondern es wird scheinbar auch anders angesprochen.

Nun steht das Bild auf dem Kopf und ist gespiegelt. Wenn die Bildschirm-Koordinate 0, 0 vorher oben links war, ist sie nun unten links und werden von dort aus geschrieben. Außerdem sind scheinbar die Bytes für die Farben in einer anderen Reihenfolge. Was vorher blau war ist jetzt rot und was rot war ist blau. Das führt zu einem ziemlich unterkühlten Teint bei der Lady.

Witzigerweise funktioniert die Ermittlung der X und Y-Position durch den XT2046-Digitizer genau wie zuvor: hier ist oben oben und links links. Den hat man wohl nicht ausgetaucht, sondern nur das Display. Das führt dazu, dass ich oben links tippe und sich damit unten links die Grafik ändert - strange.

Abgesehen davon funktioniert die Firmware aber einwandfrei. Dennoch beweist das, dass man hier nicht einfach eine Firmware programmieren und dann als .bin-File zur Verfügung stellen kann. Zumindest nicht mit der Erwartung, es würde dann auf allen Revisionen funktionieren.

Man muss dann schon eine Firmwre für jede Version bereitstellen. Diese ließe sich dann für den Benutzer relativ einfach mit dem esptool hochladen. Besser wäre aber vielleicht doch, den Source-Code bereitzustellen und dort zu hinterlegen, welche Version man hat. Die kann der Nutzer dann anpassen, sich die Firmware selbst kompilieren und dann hochladen.

Mit Arduino IDE oder VS Code und PlatformIO kein Hexenwerk, aber halt auch nicht ganz so einfach. Besonders, wenn man bedenkt, dass man ja auch ein paar Batches um das esptool schreiben kann, so dass der Nutzer nur noch einen Doppelklick machen muss und der Rest erledigt ein Script.

Video

Die Demo-Versionen, die auf meinen CYDs drauf waren und zeigen, was mit der Benutzeroberfläche möglich ist, möchte ich euch natürlich nicht vorenthalten. Viel Spaß beim Schauen:



Weitere Aussichten

Im nächsten Teil werden wir uns mit der Programmierung des Touchscreen-ESP32 beschäftigen und ein kleines Beispielprogramm erstellen. Vielleicht die RGB-LED programmieren. Dabei lernen wir dann, wie wir unsere IDE grundsätzlich einstellen müssen, um Dinge für das CYD zu programmieren.

Quellen, Literaturverweise und weiterführende Links