Skip to Content

TFT ST7735 Display mit ESP32 verbinden

TFT ST7735 Display mit ESP32 verbinden

In diesem Tutorial lernst du, wie du ein 1,8″ 128×160 TFT-Displaymodul mit einem ST7735 Display-Treiber an einen ESP32 (WEMOS Lolin32 lite) anschließt.

Die Anleitungen und der Code funktionieren mit kleinen Anpassungen auch für andere ESP32-Boards und TFT-Displays, solange das Display den ST7735 Display-Treiber verwendet.

Benötigte Teile

Du benötigst einen ESP32 und ein 1,8 Zoll TFT-Display mit einer Auflösung von 128×160 Pixeln und einem ST7735 Display-Treiber-IC. Einige Kabel und ein Breadboard können ebenfalls nützlich sein.

1,8″ ST7735 TFT-Display

ESP32 lite Lolin32

ESP32 lite

USB data cable

USB-Datenkabel

Dupont wire set

Dupont-Kabelset

Half_breadboard56a

Breadboard

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

1,8″ TFT ST7735 Display-Modul

Das 1,8″ TFT-Displaymodul, das wir hier verwenden, hat eine Auflösung von 128×160 Pixeln mit 65K RGB-Farben. Das Bild unten zeigt die Vorder- und Rückseite des Displaymoduls:

Front and Back of 1.8" TFT ST7735 Display Module
Vorder- und Rückseite des 1,8″ TFT ST7735 Display-Moduls (source)

Das Modul verwendet den ST7735S Treiberchip und wird über eine SPI-4-Draht-Schnittstelle gesteuert. Die Betriebsspannung beträgt 3,3 V und das Display zieht maximal etwa 30 mA.

Beachte, dass es viele verschiedene Versionen dieses TFT-Displays gibt. Einige haben zusätzlich einen SD card oder einen touch display.

Am wichtigsten ist, dass einige von ihnen einen logic level Wandler haben, der es ermöglicht, das Displaymodul an ein Arduino anzuschließen, das mit 5 V arbeitet. Dieses hier hat das nicht, was bedeutet, dass du es nicht direkt an ein Arduino anschließen kannst! Wir verwenden daher einen ESP32, der mit CMOS 3,3 V Logik arbeitet.

Wenn du ein Arduino verwenden möchtest, musst du die Logikpegel konvertieren. Es gibt verschiedene Möglichkeiten (Spannungsteiler, Optokoppler, Pegelwandler-IC), aber am einfachsten ist es, einen level shifting module zu verwenden.

Schließlich gibt es ähnliche Displays, die den ST7789 Treiber-IC anstelle des ST7735S verwenden. Der Code in diesem Tutorial ist für Displays mit dem ST7735S Treiber-IC und funktioniert nicht für andere.

Anschluss des 1,8″ TFT ST7735 Displays an den ESP32

Das Anschließen des TFT-Displays an einen ESP32 ist einfach, aber die Beschriftung der Pins am Display ist etwas verwirrend. Es sind SDA- und SCL-Pins angegeben, aber da es eine SPI-Schnittstelle hat, sind dies nicht die SDA- und SCL-Pins für I2C! Stattdessen entspricht SDA dem MOSI und SCL dem SCLK für SPI.

Das folgende Schaltbild zeigt dir, wie du das 1,8″ TFT ST7735 Display an einen WEMOS Lolin32 lite anschließt:

Anschluss des TFT ST7735 Displays an WEMOS Lolin ESP32 lite

Und hier zur besseren Übersicht die benötigten Verbindungen in einer Tabelle:

DisplayESP32
CS / SS5
RST16
DC17
SDA / MOSI23
SCL / SCLK18
BKL/BL22
GNDGND
VCC3,3 V

Achte darauf, VCC des Displays an 3,3 V anzuschließen! Außerdem solltest du die Hardware-SPI Pins für MOSI und SCLK verwenden. Je nach Mikrocontroller unterscheiden sich die Hardware-SPI-Pins. Du findest sie, indem du dein Board in der Arduino IDE auswählst und dann den folgenden Code ausführst.

void setup() {
  Serial.begin(115200);
  Serial.print("MOSI: ");
  Serial.println(SDA / MOSI);
  Serial.print("MISO: ");
  Serial.println(MISO);
  Serial.print("SCL / SCLK: ");
  Serial.println(SCK);
  Serial.print("CS / SS: ");
  Serial.println(SS);  
}

void loop() { }

Er gibt die Pins aus, die du für Hardware-SPI brauchst – speziell MOSI und SCLK. Die übrigen Pins kannst du frei wählen, MISO wird nicht verwendet.

Code für TFT ST7735 Display mit Adafruit_ST7735 Library

In diesem Abschnitt verwenden wir die Adafruit-ST7735 Library, um auf das 1,8″ TFT ST7735 Display zu schreiben und zu zeichnen. Um sie zu installieren, öffne einfach den Library Manager, suche nach „Adafruit-ST7735“ und klicke auf den grünen INSTALL Button:

Adafruit-ST7735 in Library Manager
Adafruit-ST7735 im Library Manager

Der Installer wird dich wahrscheinlich auffordern, auch die Abhängigkeiten zu installieren. Klicke auf INSTALL ALL:

Install the dependencies for Adafruit-ST7735 Library
Abhängigkeiten für Adafruit-ST7735 Library installieren

Mit der installierten Bibliothek können wir nun das Display testen. Kompiliere und lade einfach den folgenden Code hoch. Er zeigt den Text „Makerguides“ mit einem gelben Rahmen auf dem Display an:

#include <Adafruit_GFX.h>     
#include <Adafruit_ST7735.h>  

#define TFT_CS  5
#define TFT_RST 16
#define TFT_DC  17
// #define TFT_MOSI  23  // SDA // HW MOSI
// #define TFT_SCLK  18  // SCL // HW SCLK
// #define TFT_MISO  19  // not used
#define TFT_BL  22  // LED back-light

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);  // hardware SPI
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

void setup(void) {
  //tft.initB();
  tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
  //tft.initR(INITR_GREENTAB); // Init ST7735S chip, green tab
  //tft.setSPISpeed(27000000);

  tft.setRotation(1);
  tft.fillScreen(ST77XX_BLACK);

  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(2);
  tft.setCursor(15, 50);
  tft.println("Makerguides");
  tft.drawRect(10, 40, 145, 40, ST77XX_YELLOW);
}

void loop() { }

Wenn du Hardware-SPI verwendest, brauchst du die Pin-Definitionen für TFT_MOSI und TFT_SCLK nicht. Alternative, wenn du Software-SPI nutzt, benötigst du sie und musst sie an den anderen Konstruktor des tft Objekts übergeben:

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

Wenn du den Code kompilierst und hochlädst, solltest du die folgende Ausgabe auf deinem Display sehen:

Output on TFT with Adafruit_ST7735 Library
Ausgabe auf TFT mit Adafruit_ST7735 Library

Wenn du nichts siehst, die Farben falsch sind oder der Text Artefakte zeigt, probiere einen der anderen Initialisierer für das TFT-Display im Code aus:

  //tft.initB();
  tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
  //tft.initR(INITR_GREENTAB); // Init ST7735S chip, green tab

Der schwarze Tab und der grüne Tab beziehen sich auf die farbigen Laschen, die meist an der Schutzfolie des Displays angebracht sind. Zum Beispiel zeigt das Bild unten ein TFT-Display mit grünem Tab:

TFT-Display mit grünem Tab (source)

Die Farbe der Lasche ist wichtig, da sie oft den Typ des verwendeten Display-Controllers anzeigt. Der Grüne Tab ist typischerweise für neuere oder alternative Controller wie ILI9341, ST7735 oder andere spezifische Modelle. Der Schwarze Tab weist auf einen älteren oder anderen Controller hin, wie ST7735R oder ähnliche Varianten, die leicht unterschiedliche Spezifikationen haben.

Schließlich kannst du versuchen, die SPI-Geschwindigkeit zu reduzieren, wenn der Text auf dem Display verzerrt aussieht:

 tft.setSPISpeed(27000000);

Übrigens, wenn du die Hintergrundbeleuchtung des Displays ein- oder ausschalten möchtest, kannst du folgenden Code verwenden:

pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, LOW);  

Code für TFT ST7735 Display mit TFT_eSPI Library

In diesem Abschnitt verwenden wir die TFT_eSPI library statt der Adafruit_ST7735 Bibliothek, um das Display zu steuern. Um sie zu installieren, öffne den Library Manager, suche nach „TFT_eSPI“ und klicke auf „INSTALL“. Nach der Installation sollte es so aussehen:

TFT_eSPI library in Library Manager
TFT_eSPI Bibliothek im Library Manager

Als nächstes müssen wir die richtige Projektordnerstruktur erstellen. Öffne deine Arduino IDE und erstelle ein Projekt „tft_test“ und speichere es (Speichern unter …). Dadurch wird ein Ordner „tft_test“ mit der Datei „tft_test.ino“ darin erstellt. In diesem Ordner erstelle eine weitere Datei namens „tft_setup.h„. Dein Projektordner sollte so aussehen

Project Folder Structure
tft_test

Wenn du mehr über diese Einrichtung und weitere Optionen zur Konfiguration eines TFT-Displays für die TFT_eSPI Bibliothek erfahren möchtest, schau dir das How to configure TFT_eSPI Library for TFT display Tutorial an.

Nachdem der Projektordner mit den zwei Dateien erstellt wurde, kopiere den folgenden Konfigurationscode für das TFT-Display in die tft_setup.h Datei:

// tft_setup.h
#define ST7735_DRIVER

//#define ST7735_INITB
//#define ST7735_GREENTAB
//#define ST7735_GREENTAB2
//#define ST7735_GREENTAB3
//#define ST7735_REDTAB
#define ST7735_BLACKTAB
   
#define TFT_WIDTH  128
#define TFT_HEIGHT 160

#define TFT_RGB_ORDER TFT_RGB  

// WEMOLS Lolin32 lite
#define TFT_CS    5   
#define TFT_RST   16  
#define TFT_DC    17   
// #define TFT_MOSI  23  // SDA // HW MOSI
// #define TFT_SCLK  18  // SCL // HW SCLK
// #define TFT_MISO  19  // not used
#define TFT_BL    22   // LED back-light
#define TFT_BACKLIGHT_ON HIGH

#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT

#define SPI_FREQUENCY  27000000
#define SPI_READ_FREQUENCY  20000000
#define SPI_TOUCH_FREQUENCY  2500000

und den Code für den Sketch in die tft_test.ino Datei:

// tft_test.ino
#include "tft_setup.h"
#include"TFT_eSPI.h"

TFT_eSPI tft = TFT_eSPI();

void setup(void) {  
  tft.init();
  tft.fillScreen(TFT_BLACK);  
  tft.setRotation(1);

  tft.setCursor(15, 50, 1);  
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextSize(2);
  tft.println("Makerguides");
  tft.drawRect(10, 40, 145, 40, TFT_YELLOW);  
}

void loop() { }

Wenn du den Code kompilierst und hochlädst, solltest du die gleiche Ausgabe wie zuvor sehen:

Output on TFT with TFT_eSPI Library
Ausgabe auf TFT mit TFT_eSPI Library

Ähnlich wie die Adafruit_ST7735 Bibliothek bietet die tft_setup.h Datei für die TFT_eSPI Bibliothek verschiedene Initialisierer, abhängig vom spezifischen TFT-Display (grüner Tab, schwarzer Tab, …) das du verwendest. Wenn du Probleme mit dem Display hast (falsche Farben, verzerrter Text), probiere zuerst einen davon aus:

//#define ST7735_INITB
//#define ST7735_GREENTAB
//#define ST7735_GREENTAB2
//#define ST7735_GREENTAB3
//#define ST7735_REDTAB
#define ST7735_BLACKTAB

Wie zuvor ist die SPI-Geschwindigkeit ein weiterer wichtiger Parameter, der ebenfalls in der tft_setup.h Datei angegeben ist:

#define SPI_FREQUENCY  27000000

Ich habe eine übliche, höhere SPI_FREQUENCY von 40000000 ausprobiert, aber der Text wurde verzerrt. Das Bild unten zeigt zwei Screenshots des TFT-Displays. Der erste mit einer SPI_FREQUENCY von 27000000 und der zweite mit einer Frequenz von 40000000.

TFT text output with different SPI frequencies
TFT Textausgabe mit verschiedenen SPI-Frequenzen

Man sieht deutlich, dass der Text bei der höheren SPI-Frequenz verzerrt wird. Sei also vorsichtig mit höheren Geschwindigkeiten und reduziere die SPI-Frequenz, wenn der Text anfängt, fehlerhaft auszusehen.

Schließlich erlaubt die TFT_eSPI Bibliothek, den Display-Treiber und das Display in den Schlafmodus zu versetzen, zusätzlich zum Ausschalten der Hintergrundbeleuchtung:

pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, LOW);         // Switch off Backlight
tft.writecommand(ST7735_DISPOFF);  // Switch off the display 
tft.writecommand(ST7735_SLPIN);    // Sleep the display driver  

Die folgende Tabelle zeigt den Stromverbrauch des TFT-Displays mit den verschiedenen Komponenten ein- oder ausgeschaltet:

HintergrundbeleuchtungDisplayTreiberStromverbrauch
ANANAN15 mA
AUSANAN2 mA
AUSAUSAN1,5 mA
AUSAUSAUS0,3 mA

Die Anzeige des Textes „Makerguides“ mit eingeschalteter Hintergrundbeleuchtung und allem anderen verbraucht 15 mA. Wenn du jedoch alles ausschaltest (Hintergrundbeleuchtung, Display, Treiber), sinkt der Stromverbrauch auf 0,3 mA! Das ist ideal für batteriebetriebene Projekte.

Fazit

In diesem Tutorial hast du gelernt, wie man ein TFT-Displaymodul mit einem ST7735 Display-Treiber an einen ESP32 anschließt. Wir haben zwei verschiedene Bibliotheken verwendet, die Adafruit_ST7735 und die TFT_eSPI Bibliothek, um auf dem TFT-Display zu zeichnen und Text anzuzeigen.

Wenn du Kommentare hast, kannst du sie gerne im Kommentarbereich hinterlassen.

Viel Spaß beim Basteln ; )