ESP32 S3 - ILI9341 ILI9488 ST7789 TFT-LCD-Touch-Display mit SPI-Schnittstelle
Lassen Sie uns ein Projekt bauen, das ein vollfarbiges SPI-TFT-Display mit einem ESP32 S3 zum Leben erweckt. Der ESP32 S3 ist ein leistungsstarker Dual-Core-Mikrocontroller mit WLAN, Bluetooth und zahlreichen GPIOs – und sein Hardware-SPI-Bus macht es einfach, ein schnelles TFT-Display mit der vollen vom Panel unterstützten Geschwindigkeit zu betreiben.
Was Sie bauen werden:
- Eine verdrahtete Verbindung zwischen einem ESP32 S3 und einem SPI-TFT-Display.
- Eine Formen-Demo mit der Zeichen-API von Adafruit GFX.
- Ein Beispiel zur Anzeige von Text und Zahlen.
- Einen Bitmap-Bildbetrachter, der aus dem Programmspeicher (PROGMEM) liest.
- Einen Bitmap-Bildbetrachter, der Bilder von einer SD-Karte liest.
- Eine Demo mit benutzerdefinierter externer Schriftart.
- Einen Leser für Touch-Koordinaten mit einem XPT2046-Controller.
- Eine Touch-Zeichenanwendung (Malen mit dem Finger auf dem Bildschirm).
- Eine interaktive Oberfläche mit Touch-Tasten.
- Ein Werkzeug zur Kalibrierung des Touchscreens.
- Ein Beispiel für einen benutzerdefinierten SPI-Bus mit einem zweiten SPI-Bus des ESP32 S3.
Dieses Projekt behandelt SPI-TFT-LCD-Displays mit und ohne Touch. Es funktioniert mit Panels in 1,3, 1,54, 2,2, 2,4, 2,8, 3,2 und 3,5 Zoll, die von ILI9341-, ILI9488- oder ST7789-Controllerchips angesteuert werden.

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables ESP32 S3 Starter-Kit (ESP32 S3 enthalten) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Was ist das SPI-TFT-Display?
Ein SPI-TFT-Modul kombiniert ein Farb-LCD mit einem Treiber-IC, der Zeichenbefehle über einen 4-Draht-SPI-Bus entgegennimmt. Die Bibliothek DIYables_TFT_SPI unterstützt drei gängige Controllerchips, die jeweils unterschiedliche Farbtiefen und Geschwindigkeiten bieten.
Wichtige Spezifikationen
- ILI9341 - 16-Bit-RGB565-Farbe, bis zu 40 MHz SPI.
- ILI9488 - 18-Bit-RGB666-Farbe über SPI, bis zu 24 MHz.
- ST7789 - 16-Bit-RGB565-Farbe, bis zu 40 MHz SPI.
Empfehlung: Wenn Sie noch kein Display gekauft haben, empfehlen wir den Treiber ST7789. Er ist weit verbreitet, läuft mit vollen 40 MHz SPI-Geschwindigkeit und ist die einfachste Wahl für neue Projekte.
Das Zeichnen erfolgt über die Adafruit-GFX-API, die Formen, Text, benutzerdefinierte Schriftarten und Bitmap-Ausgabe umfasst.
Hinweis: Der ESP32 S3 verwendet 3,3-V-Logik. Die meisten SPI-TFT-Module arbeiten mit 3,3 V. Überprüfen Sie vor der Verdrahtung die Spannungsangabe Ihres Moduls.
Pinbelegung
Die meisten SPI-TFT-LCD-Displays haben die folgenden Pins, aufgeteilt auf den Display-Controller, den optionalen SD-Kartensteckplatz und den optionalen XPT2046-Touch-Controller.
Display-Pins:
| Pin | Funktion |
|---|---|
| VCC | Stromversorgung |
| GND | Masse |
| CS | Chip Select – wird auf LOW gezogen, um das Display am SPI-Bus auszuwählen |
| DC / RS | Daten-/Befehlsauswahl – HIGH für Pixeldaten, LOW für Befehle |
| RST | Hardware-Reset – optional; bei Nichtverwendung mit 3,3 V verbinden |
| MOSI / SDI / SDA | SPI-Dateneingang (MCU → Display) |
| SCK / CLK | SPI-Takt |
| MISO / SDO | SPI-Datenausgang (Display → MCU) – optional bei reiner Anzeigenutzung |
| LED / BL / BLK | Stromversorgung der Hintergrundbeleuchtung – mit 3,3 V oder einem PWM-Pin zum Dimmen verbinden |
SD-Karten-Pins (falls Ihre Anwendung auf die SD-Karte zugreifen muss):
| Pin | Funktion |
|---|---|
| SD_CS / TF_CS | Chip Select der SD-Karte |
| MOSI / SDI | MOSI – Daten von der MCU zur SD-Karte |
| SCK / CLK | SCK – SPI-Takt |
| MISO / SDO | MISO – Daten von der SD-Karte zur MCU |
Bei TFT-Displays mit Touch-Unterstützung gibt es zusätzliche Touch-Pins (falls Ihre Anwendung die Touch-Funktion nutzt und das Display sie unterstützt):
| Pin | Funktion |
|---|---|
| T_CS | Chip Select des Touch-Controllers |
| T_CLK | SCK – SPI-Takt |
| T_DIN | MOSI – Daten von der MCU zum Touch-Controller |
| T_DO | MISO – Daten vom Touch-Controller zur MCU |
| T_IRQ | Touch-Interrupt – optional; signalisiert, wenn der Bildschirm berührt wird |
Hinweis: Einige Displaymodule ohne Touch haben ebenfalls die Pins T_CS, T_CLK, T_DIN, T_DO und T_IRQ. Diese sind auf solchen Boards funktionslos – der Touch-Controller-IC ist nicht bestückt. Sie sind vorhanden, weil die Platine dasselbe Layout wie die Touch-Version verwendet, um die Anzahl der Fertigungsvarianten zu reduzieren.

Verdrahtungsdiagramm
Hinweis – SDO (MISO) ist optional: Die SDO-Leitung (MISO) überträgt nur Daten vom Display zurück zum Board. Keiner der Beispielcodes in diesem Tutorial liest Daten vom Display, daher kann dieser Pin unverbunden bleiben. Bei Modulen, bei denen der Touch-Controller denselben SPI-Bus nutzt, kann eine angeschlossene SDO-Leitung die Kommunikation stören, daher wird empfohlen, sie nicht anzuschließen.
Ohne Touch
Verbinden Sie MOSI mit GPIO11, SCK mit GPIO12 und MISO mit GPIO13 des ESP32 S3. CS, DC und RST können beliebige freie GPIOs sein – in den Beispielen werden GPIO1, GPIO42 und GPIO2 verwendet.
Display:
| TFT-Pin | ESP32 S3 Pin | Beschreibung |
|---|---|---|
| VCC | 3.3V | Stromversorgung (nur 3,3 V) |
| GND | GND | Masse |
| CS | GPIO1 | Chip Select |
| DC / RS | GPIO42 | Daten-/Befehlsauswahl |
| RST | GPIO2 | Reset (optional) |
| MOSI / SDI | GPIO11 | Hardware-SPI MOSI |
| SCK | GPIO12 | Hardware-SPI-Takt |
| MISO / SDO | GPIO13 | Hardware-SPI MISO (optional) |
| LED / BL | 3.3V | Stromversorgung der Hintergrundbeleuchtung |
SD-Karte (falls Ihre Anwendung auf die SD-Karte zugreifen muss):
| SD-Pin | ESP32 S3 Pin | Beschreibung |
|---|---|---|
| SD_CS / TF_CS | beliebiger freier GPIO | Chip Select der SD-Karte |
| MOSI / SDI | GPIO11 | Gemeinsam mit Display-MOSI (GPIO11) |
| SCK / CLK | GPIO12 | Gemeinsam mit Display-SCK (GPIO12) |
| MISO / SDO | GPIO13 | Gemeinsam mit Display-MISO (GPIO13) |

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Mit Touch
Verbinden Sie den XPT2046-Touch-Controller mit dem SPI-Bus des ESP32 S3, wobei GPIO11, GPIO12 und GPIO13 gemeinsam mit dem Display genutzt werden.
Display:
| TFT-Pin | ESP32 S3 Pin | Beschreibung |
|---|---|---|
| VCC | 3.3V | Stromversorgung (nur 3,3 V) |
| GND | GND | Masse |
| CS | GPIO1 | Chip Select |
| DC / RS | GPIO42 | Daten-/Befehlsauswahl |
| RST | GPIO2 | Reset (optional) |
| MOSI / SDI | GPIO11 | Hardware-SPI MOSI |
| SCK | GPIO12 | Hardware-SPI-Takt |
| MISO / SDO | GPIO13 | Hardware-SPI MISO (optional) |
| LED / BL | 3.3V | Stromversorgung der Hintergrundbeleuchtung |
Touch-Controller (falls Ihre Anwendung die Touch-Funktion nutzt und das Display sie unterstützt):
| Touch-Pin | ESP32 S3 Pin | Beschreibung |
|---|---|---|
| T_CS | GPIO21 | Touch Chip Select |
| T_IRQ | beliebiger freier GPIO | Touch-Interrupt (optional) |
| T_DIN | GPIO11 | Gemeinsam mit Display-MOSI (GPIO11) |
| T_CLK | GPIO12 | Gemeinsam mit Display-SCK (GPIO12) |
| T_DO | GPIO13 | Gemeinsam mit Display-MISO (GPIO13) |

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Wenn Ihre MCU zwei oder mehr Hardware-SPI-Schnittstellen hat, können Sie jedem Peripheriegerät (Display, SD-Karte, Touch-Controller) einen eigenen SPI-Bus zuweisen. Wenn Ihre MCU nur eine Hardware-SPI-Schnittstelle hat, teilen sich alle drei Peripheriegeräte dieselben drei Datenleitungen (MOSI, SCK, MISO). Jedes Peripheriegerät hat einen eigenen CS-Pin, sodass immer nur eines aktiv ist. Die Bibliothek DIYables_TFT_SPI verwaltet sowohl das Display als auch den XPT2046-Touch-Controller über eine einzige API – für die Touch-Seite ist keine separate SPI-Bibliothek erforderlich.
Bibliotheksinstallation
- Verbinden Sie das ESP32-S3-Board über seinen USB-C-Anschluss mit Ihrem Computer.
- Öffnen Sie die Arduino IDE. Wählen Sie Ihre ESP32-S3-Board-Variante im Board-Menü aus und wählen Sie den richtigen COM-Port.
- Öffnen Sie das Panel Libraries.
- Suchen Sie nach "DIYables_TFT_SPI". Suchen Sie den Eintrag von DIYables.
- Klicken Sie auf Install und bestätigen Sie die Installation aller Abhängigkeiten.
- Search for DIYables TFT SPI created by DIYables.io and click the Install button.
Projektgrundlage
Der folgende Code bildet den Basis-Sketch für jedes ESP32-S3-TFT-Projekt mit dieser Bibliothek. Er initialisiert das Display am Hardware-SPI-Bus und legt die Bildschirmausrichtung fest, bevor die Zeichenschleife beginnt.
Los geht's - Formen zeichnen
Das Beispiel DrawShapes zeichnet die gesamte Palette der Adafruit-GFX-Grundformen: Kreise, Dreiecke, Rechtecke, abgerundete Rechtecke und Linien. Der folgende Code durchläuft jede Formart in kontrastierenden Farben, sodass Sie jede Zeichenfunktion auf einen Blick überprüfen können.
Hochladen und testen
- Verdrahten Sie das TFT-Modul gemäß der obigen Tabelle mit dem ESP32 S3.
- Schließen Sie das USB-C-Kabel an.
- Wählen Sie in der Arduino IDE Board und Port aus, fügen Sie den Code ein und drücken Sie Upload.
- Nach dem Hochladen zeigt das Display eine Schleife farbiger Formen.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| begin() | Initialisiert das Display. | TFT_display.begin(); |
| setRotation(r) | Legt die Bildschirmausrichtung 0-3 fest. | TFT_display.setRotation(1); |
| fillScreen(color) | Füllt den gesamten Bildschirm mit einer Farbe. | TFT_display.fillScreen(BLACK); |
| colorRGB(r,g,b) | Erzeugt einen 16-Bit-Farbwert. | colorRGB(255,128,0) |
| fillCircle(x,y,r,color) | Gefüllter Kreis. | TFT_display.fillCircle(120,160,60,RED); |
| fillRect(x,y,w,h,color) | Gefülltes Rechteck. | TFT_display.fillRect(0,0,100,50,BLUE); |
| drawLine(x0,y0,x1,y1,color) | Gerade Linie zwischen zwei Punkten. | TFT_display.drawLine(0,0,320,240,WHITE); |
Los geht's - Text und Zahlen anzeigen
Das Beispiel ShowTextAndNumber verwendet die Text-Engine von Adafruit GFX, um Zeichenketten und Zahlenwerte in einstellbaren Größen und Farben auszugeben. Der folgende Code zeigt mehrere Schriftgrößen und Farbkombinationen, damit Sie gut lesbare Bildschirm-Dashboards erstellen können.
Hochladen und testen
- Verdrahten und hochladen wie oben.
- Das Display zeigt mehrere Zeilen mit Text und Zahlen in unterschiedlichen Farben und Größen.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| setTextColor(color) | Legt die Vordergrundfarbe des Textes fest. | TFT_display.setTextColor(WHITE); |
| setTextSize(size) | Skaliert den Text. Größe 1 = 6×8 px, Größe 2 = 12×16 px. | TFT_display.setTextSize(2); |
| setCursor(x, y) | Setzt den Textcursor auf Pixel (x, y). | TFT_display.setCursor(10, 20); |
| print(value) | Gibt eine Zeichenkette oder Zahl an der Cursorposition aus. | TFT_display.print("ESP32 S3!"); |
| println(value) | Gibt aus und setzt den Cursor in die nächste Zeile. | TFT_display.println(42); |
Los geht's - Bild zeichnen
Lassen Sie uns einen Bildbetrachter bauen. Das Beispiel DrawImage lädt eine vollfarbige RGB565-Bitmap aus dem Programm-Flash des ESP32 S3 und stellt sie auf dem Display dar. Die Pixeldaten sind in bitmap.h als const uint16_t-Array mit PROGMEM deklariert. Beim ESP32 S3 werden PROGMEM-Daten aus dem Flash in den virtuellen Adressraum abgebildet, sodass das Bild ohne Verbrauch von Heap-RAM gezeichnet wird.
Kopieren Sie bitmap.h vor dem Kompilieren in den Sketch-Ordner.
Hochladen und testen
- Legen Sie bitmap.h in denselben Ordner wie den Sketch.
- Verdrahten Sie das TFT-Modul wie oben gezeigt mit dem ESP32 S3 (MOSI=GPIO11, SCK=GPIO12, MISO=GPIO13, CS=GPIO1, DC=GPIO42, RST=GPIO2). Verwenden Sie 3,3 V für VCC.
- Schließen Sie das USB-C-Kabel an.
- Wählen Sie in der Arduino IDE Board und Port aus und drücken Sie Upload.
- Das Display stellt das Bitmap-Bild aus dem Flash dar.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| drawRGBBitmap(x,y,bitmap,w,h) | Zeichnet eine RGB565-PROGMEM-Bitmap mit der oberen linken Ecke bei (x, y). | TFT_display.drawRGBBitmap(0, 0, myImage, 240, 320); |
| fillScreen(color) | Löscht das Display vor dem Zeichnen des Bildes. | TFT_display.fillScreen(BLACK); |
Los geht's - Bild von SD-Karte zeichnen
Lassen Sie uns einen SD-Karten-Bildbetrachter bauen. Das Beispiel DrawImageSDcard liest ein rohes RGB565-Binärbild von einer microSD-Karte und überträgt die Pixeldaten blockweise an das Display. Der ESP32 S3 betreibt sowohl die SD-Karte als auch das Display am selben SPI-Bus und schaltet zwischen den CS-Leitungen um, um den Zugriff zu regeln.
Verdrahten Sie das SD-Modul mit GPIO11 (MOSI), GPIO12 (SCK) und GPIO13 (MISO). Definieren Sie im Sketch einen separaten CS-Pin für das SD-Modul als SD_CS_PIN.
Hochladen und testen
- Verdrahten Sie das SD-Modul mit dem SPI-Bus des ESP32 S3. Nutzen Sie GPIO11/12/13 gemeinsam mit dem Display. Verbinden Sie SD CS mit dem als SD_CS_PIN definierten Pin.
- Kopieren Sie eine rohe RGB565-Binärbilddatei in das Stammverzeichnis der SD-Karte. Die Abmessungen müssen zu Ihrem Panel passen.
- Schließen Sie das USB-C-Kabel an.
- Wählen Sie in der Arduino IDE Board und Port aus und drücken Sie Upload.
- Das Display stellt das von der SD-Karte übertragene Bild dar.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| startWrite() | Öffnet eine direkte SPI-Schreibsitzung und aktiviert den CS des Displays. | TFT_display.startWrite(); |
| setAddrWindow(x0,y0,x1,y1) | Legt den rechteckigen Pixel-Schreibbereich auf dem Panel fest. | TFT_display.setAddrWindow(0, 0, 239, 319); |
| pushColors(buf, len) | Sendet einen Puffer mit RGB565-Pixelwerten an das Display. | TFT_display.pushColors(buf, 512); |
| endWrite() | Schließt die SPI-Sitzung und gibt den CS des Displays frei. | TFT_display.endWrite(); |
Los geht's - Externe Schriftart verwenden
Lassen Sie uns eine benutzerdefinierte Textanzeige bauen. Das Beispiel UseExternalFont ersetzt die Standardschrift mit 5×7 Pixeln durch eine schärfere, mit Adafruit GFX kompatible Konturschrift. Ein einziger Aufruf von setFont() genügt, um die Typografie aufzuwerten. Mit setFont(NULL) stellen Sie jederzeit die ursprüngliche integrierte Schrift wieder her.
Hochladen und testen
- Verdrahten Sie das TFT-Modul wie oben gezeigt mit dem ESP32 S3.
- Schließen Sie das USB-C-Kabel an.
- Wählen Sie in der Arduino IDE Board und Port aus und drücken Sie Upload.
- Das Display stellt den Text in der benutzerdefinierten Schriftart dar.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| setFont(&FontName) | Aktiviert eine benutzerdefinierte GFX-kompatible Schriftart. Übergeben Sie NULL, um die integrierte 5×7-Schrift wiederherzustellen. | TFT_display.setFont(&FreeSans12pt7b); |
| setCursor(x, y) | Positioniert den Textcursor an der angegebenen Pixelkoordinate. | TFT_display.setCursor(10, 40); |
| setTextColor(color) | Legt die Vordergrundfarbe für nachfolgenden Text fest. | TFT_display.setTextColor(WHITE); |
| print(text) | Gibt eine Zeichenkette mit der aktiven Schriftart an der Cursorposition aus. | TFT_display.print("ESP32 S3 Project"); |
Los geht's - Touch-Punkt auslesen
Lassen Sie uns einen Leser für Touch-Koordinaten bauen. Das Beispiel TouchGetPoint initialisiert den XPT2046 am SPI-Bus des ESP32 S3 und gibt rohe ADC-Werte im seriellen Monitor aus, sobald der Bildschirm gedrückt wird. Dies ist der erste Schritt zu einem Touch-fähigen Projekt: den Bereich der Rohwerte Ihres Panels kennenzulernen.
Verdrahtung (alle Signale mit 3,3 V):
| Touch-Pin | ESP32 S3 Pin | Beschreibung |
|---|---|---|
| T_CLK | GPIO12 | SCK – gemeinsam mit dem Display |
| T_DIN | GPIO11 | MOSI – gemeinsam mit dem Display |
| T_DO | GPIO13 | MISO – gemeinsam mit dem Display |
| T_CS | GPIO21 | Touch Chip Select |
| T_IRQ | GPIO45 | Touch-Interrupt (optional) |
Hochladen und testen
- Verdrahten Sie den XPT2046 mit dem SPI-Bus des ESP32 S3, wobei GPIO11/12/13 gemeinsam mit dem Display genutzt werden. T_CS→GPIO21, T_IRQ→GPIO45.
- Schließen Sie das USB-C-Kabel an.
- Wählen Sie in der Arduino IDE Board und Port aus und drücken Sie Upload.
- Öffnen Sie den seriellen Monitor mit 9600 Baud. Berühren Sie das Display, um die ausgegebenen Rohwerte für X, Y und Z zu sehen.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| initTouchSPI(cs, irq) | Initialisiert den XPT2046 am gemeinsamen SPI-Bus. Übergeben Sie -1 für irq, wenn der Interrupt-Pin nicht angeschlossen ist. | TFT_display.initTouchSPI(21, 45); |
| readTouchRaw(x, y, z) | Gibt rohe ADC-Werte des Controllers ohne Kalibrierung zurück. Gibt true zurück, wenn gedrückt. | TFT_display.readTouchRaw(x, y, z); |
Los geht's - Touch-Zeichnen
Lassen Sie uns eine Fingermal-App bauen. Das Beispiel TouchDraw kombiniert den XPT2046-Touch-Controller mit der Zeichen-API des Displays. Jede Touch-Position wird einer kalibrierten Pixelkoordinate zugeordnet, und dort wird ein kleiner gefüllter Kreis gezeichnet, sodass beim Bewegen des Fingers ein Strich entsteht.
Hochladen und testen
- Verdrahten Sie den XPT2046 wie im obigen Abschnitt „Touch-Punkt auslesen“ beschrieben mit dem ESP32 S3.
- Schließen Sie das USB-C-Kabel an.
- Wählen Sie in der Arduino IDE Board und Port aus und drücken Sie Upload.
- Ziehen Sie einen Finger über das Display, um auf dem Bildschirm zu malen.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| initTouchSPI(cs, irq) | Initialisiert den XPT2046 am gemeinsamen SPI-Bus. | TFT_display.initTouchSPI(21, 45); |
| setTouchCalibration(minX,maxX,minY,maxY) | Ordnet rohe ADC-Werte den Pixelkoordinaten des Bildschirms zu. Die vier Werte erhalten Sie aus dem Beispiel TouchCalibration. | TFT_display.setTouchCalibration(200, 3800, 300, 3700); |
| setTouchInvertX(invert) / setTouchInvertY(invert) | Kehrt die Touch-Achse um, wenn X oder Y bei Ihrem Panel oder Ihrer Charge gespiegelt ist. VOR setTouchCalibration() aufrufen. | TFT_display.setTouchInvertY(true); |
| getTouch(x, y) | Gibt kalibrierte Touch-Koordinaten in Bildschirmpixeln zurück. Gibt true zurück, solange der Bildschirm gedrückt wird. | if (TFT_display.getTouch(x, y)) { ... } |
| fillCircle(x, y, r, color) | Zeichnet einen kleinen Punkt an der Touch-Position, um das Bild aufzubauen. | TFT_display.fillCircle(x, y, 3, RED); |
Los geht's - Touch-Taste
Lassen Sie uns ein Bedienfeld mit Touch-Tasten bauen. Das Beispiel TouchButton zeichnet rechteckige Tasten als farbige Bereiche auf dem Display und fragt dann bei jedem Schleifendurchlauf die Touch-Koordinaten ab. Wenn ein Touch-Punkt innerhalb der Grenzen einer Taste liegt, wird die Taste hervorgehoben und die Aktion ausgelöst – das ist das Grundmuster jeder Touch-Oberfläche mit dem ESP32 S3.
T_IRQ ist optional. Übergeben Sie -1 als irq-Argument, um den Polling-Modus ohne Interrupt-Pin zu verwenden.
Hochladen und testen
- Verbinden Sie T_CS mit GPIO21. T_IRQ kann unverbunden bleiben.
- Schließen Sie das USB-C-Kabel an.
- Wählen Sie in der Arduino IDE Board und Port aus und drücken Sie Upload.
- Tippen Sie auf jede Taste auf dem Display und prüfen Sie, ob sie hervorgehoben wird und ihre Aktion auslöst.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| initTouchSPI(cs, irq) | Initialisiert den XPT2046. Übergeben Sie -1 für irq, um den Interrupt-Pin zu deaktivieren. | TFT_display.initTouchSPI(21, -1); |
| setTouchCalibration(minX,maxX,minY,maxY) | Wendet die Kalibrierung an, damit getTouch() genaue Pixelkoordinaten liefert. | TFT_display.setTouchCalibration(200, 3800, 300, 3700); |
| setTouchInvertX(invert) / setTouchInvertY(invert) | Kehrt die Touch-Achse um, wenn X oder Y bei Ihrem Panel oder Ihrer Charge gespiegelt ist. VOR setTouchCalibration() aufrufen. | TFT_display.setTouchInvertY(true); |
| getTouch(x, y) | Liefert die aktuelle kalibrierte Touch-Position. Gibt true zurück, solange gedrückt wird. | if (TFT_display.getTouch(x, y)) { ... } |
| fillRect(x, y, w, h, color) | Zeichnet eine Taste als gefülltes Rechteck. | TFT_display.fillRect(10, 10, 120, 60, BLUE); |
Los geht's - Touch-Kalibrierung
Lassen Sie uns ein Kalibrierungswerkzeug bauen. Das Beispiel TouchCalibration führt Sie durch die Messung der rohen ADC-Extremwerte Ihres XPT2046-Panels. Berühren Sie nach Aufforderung jede Ecke des Displays und notieren Sie die ausgegebenen minimalen und maximalen X- und Y-Werte. Diese vier Zahlen sind die Konstanten für setTouchCalibration() in allen anderen Touch-Projekten.
Hochladen und testen
- Verdrahten Sie den XPT2046 wie im Abschnitt „Touch-Punkt auslesen“ beschrieben mit dem ESP32 S3.
- Schließen Sie das USB-C-Kabel an.
- Wählen Sie in der Arduino IDE Board und Port aus und drücken Sie Upload.
- Öffnen Sie den seriellen Monitor mit 9600 Baud. Folgen Sie den Anweisungen auf dem Bildschirm und berühren Sie jede Ecke.
- Notieren Sie die vier ausgegebenen Werte und verwenden Sie sie in setTouchCalibration() in Ihren anderen Touch-Projekten.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| initTouchSPI(cs, irq) | Initialisiert den XPT2046-Touch-Controller. | TFT_display.initTouchSPI(21, 45); |
| readTouchRaw(x, y, z) | Liest rohe ADC-Werte, um den Kalibrierungsbereich zu bestimmen. | TFT_display.readTouchRaw(x, y, z); |
| setTouchCalibration(minX,maxX,minY,maxY) | Speichert Kalibrierungskonstanten, damit getTouch() Rohwerte korrekt auf Pixelkoordinaten abbildet. | TFT_display.setTouchCalibration(200, 3800, 300, 3700); |
| setTouchInvertX(invert) / setTouchInvertY(invert) | Kehrt die Touch-Achse um, wenn X oder Y bei Ihrem Panel oder Ihrer Charge gespiegelt ist. VOR der Kalibrierung aufrufen, damit die gespeicherten Werte zu Ihrem Panel passen. | TFT_display.setTouchInvertY(true); |
Los geht's - Benutzerdefinierter SPI-Bus
Lassen Sie uns mit einem benutzerdefinierten SPI-Bus arbeiten. Der ESP32 S3 unterstützt mehrere Hardware-SPI-Controller. Das Beispiel CustomSPI zeigt, wie Sie eine SPIClass-Instanz für einen zweiten SPI-Bus erstellen und an den Konstruktor des Displays übergeben. Dadurch wird der primäre SPI-Bus für andere Peripheriegeräte wie SD-Karten oder Sensormodule frei, die SPI gemeinsam nutzen.
Hochladen und testen
- Verdrahten Sie das TFT-Display mit den ESP32-S3-Pins, die dem im Sketch definierten benutzerdefinierten SPI-Bus entsprechen.
- Schließen Sie das USB-C-Kabel an.
- Wählen Sie in der Arduino IDE Board und Port aus und drücken Sie Upload.
- Das Display startet am ausgewählten SPI-Bus und zeigt zur Bestätigung ein Farbbalkenmuster an.
Referenz der Zeichen-API
| Methode | Zweck | Verwendung |
|---|---|---|
| SPIClass myBus(HSPI) | Erstellt eine SPIClass-Instanz, die an einen zweiten SPI-Controller gebunden ist. | SPIClass SPI2_bus(HSPI); |
| DIYables_ILI9341_SPI(w,h,cs,dc,rst,spi) | Konstruktor, der einen Zeiger auf eine beliebige SPIClass akzeptiert. Standardmäßig &SPI, wenn weggelassen. | DIYables_ILI9341_SPI tft(240, 320, 10, 9, 8, &SPI2_bus); |
| begin() | Initialisiert das Display am konfigurierten SPI-Bus. | TFT_display.begin(); |
Schnelle Schritte
- Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
- Installieren Sie die Bibliothek DIYables_TFT_SPI über das Libraries-Panel der Arduino IDE.
- Verdrahten Sie das TFT-Display mit den SPI-Pins des ESP32 S3 anhand der Verdrahtungstabelle für Ihren Anwendungsfall (mit oder ohne Touch).
- Öffnen Sie den Sketch für das gewünschte Teilprojekt und prüfen Sie, ob die Pin-Definitionen zu Ihrer Verdrahtung passen.
- Wählen Sie die richtige Konstruktorzeile für Ihren Treiberchip (ILI9341, ILI9488 oder ST7789) und kommentieren Sie die anderen aus.
- Wählen Sie in der Arduino IDE das ESP32-S3-Board und den richtigen COM-Port aus und drücken Sie dann Upload.
- Führen Sie bei Touch-Projekten zuerst das Beispiel TouchCalibration aus und notieren Sie die vier ausgegebenen Werte, bevor Sie Ihren Haupt-Sketch laden.
- Profi-Tipp: Nutzen Sie GPIO11, GPIO12 und GPIO13 gemeinsam für Display, SD-Karte und Touch-Controller – die Bibliothek regelt den Buszugriff automatisch über die einzelnen CS-Pins.
Ausgabe im seriellen Monitor
Öffnen Sie bei Touch-fähigen Sketches den seriellen Monitor mit 9600 Baud. Erwartete Ausgabe während einer Touch-Sitzung:
Anwendungen
SPI-TFT-Displays in Kombination mit dem ESP32 S3 eignen sich gut für Embedded-Projekte, die eine kompakte, farbintensive visuelle Ausgabe benötigen. Einige praktische Anwendungen sind:
- Dashboard: Sensorwerte wie Temperatur, Luftfeuchtigkeit und Luftdruck in Echtzeit auf einem farbcodierten Anzeigebildschirm darstellen.
- IoT-Monitor: Live-Daten aus MQTT-Topics oder REST-APIs anzeigen und den Bildschirm aktualisieren, sobald neue Werte über WLAN eintreffen.
- Touch-Bedienfeld: Eine Oberfläche mit mehreren Tasten zur Steuerung von Relais, Motoren oder Smart-Home-Geräten ohne physische Taster bauen.
- Tragbarer Datenlogger: Den SD-Kartenleser mit dem Display kombinieren, um Sensordaten auf einer microSD-Karte zu protokollieren und als Live-Diagramm auf dem Bildschirm darzustellen.
- Digital Signage: Auf der SD-Karte gespeicherte Bitmap-Bilder nacheinander anzeigen, um eine stromsparende Werbe- oder Informationsanzeige zu erstellen.
Video Tutorial
Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.
Sehen Sie sich unten die Schritt-für-Schritt-Videoanleitung für dieses ESP32-S3-Projekt an.
Herausforderungen
Bringen Sie Ihr ESP32-S3-TFT-Display-Projekt weiter voran, indem Sie diese zunehmend schwierigeren Erweiterungen ausprobieren. Jede Herausforderung vertieft einen anderen Aspekt der Bibliothek und der Hardware.
- Anfänger: Ändern Sie den Sketch DrawShapes so, dass er Ihre Initialen mit Linien und Rechtecken in Ihren beiden Lieblingsfarben zeichnet.
- Anfänger: Ändern Sie den Sketch ShowTextAndNumber so, dass er einen Live-Millisekundenzähler anzeigt, der mit millis() alle 500 ms aktualisiert wird.
- Fortgeschritten: Kombinieren Sie die Beispiele DrawImageSDcard und ShowTextAndNumber, um eine Beschriftung über ein von der SD-Karte geladenes Bitmap-Bild zu legen.
- Fortgeschritten: Bauen Sie eine Touch-Oberfläche mit zwei Tasten, die eine an einen GPIO-Pin angeschlossene LED umschaltet – eine Taste EIN, eine Taste AUS –, wobei die Tastenfarbe den aktuellen LED-Zustand widerspiegelt.
- Experte: Erstellen Sie eine Touch-Oberfläche mit mehreren Bildschirmen – einem Startbildschirm und zwei Unterbildschirmen –, zwischen denen Sie mit Zurück- und Weiter-Tasten auf dem Bildschirm navigieren, wobei jeder Bildschirm andere Sensordaten anzeigt.
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| Leerer Bildschirm | Falsche SPI-Pins oder falsche Stromversorgung | Verwenden Sie die richtigen Hardware-SPI-Pins für Ihre ESP32-S3-Variante; prüfen Sie, ob VCC 3,3 V beträgt |
| Verzerrtes Bild | Falscher Treiber aktiv | Nur den passenden Konstruktor auskommentieren |
| Bild ist verschoben | Breite/Höhe im Konstruktor stimmen nicht | Werte an die tatsächlichen Abmessungen Ihres Panels anpassen |
| Keine Touch-Reaktion | Fehlende Kalibrierungsdaten | Beispiel TouchCalibration ausführen und die ausgegebenen Werte übernehmen |
| Port nicht sichtbar | USB-Treiber fehlt | Den richtigen USB-Treiber für Ihr ESP32-S3-Board installieren |
Plattformunterstützung
Die Bibliothek basiert auf der Standard-SPI-API von Arduino und unterstützt alle Arduino-kompatiblen ESP32-S3-Varianten (architectures=*).