Die Bibliothek TFT_eSPI stellt ausschließlich für ESP-Mikrocontroller (ESP32-Wroom und ESP8266) eine gemeinsame Bibliothek für TFT-Displays in verschiedenen Formaten bereit. Weil die TFT-Displays über Steuerdateien angesprochen werden, sind keine individuellen Bibliotheken mehr notwendig.
Es gibt Schriftarten in verschiedenen Größen, aber leider unterstützen sie nur den einfachen ASCII-Zeichensatz. Die Darstellung von Umlauten ist nicht möglich.
Abhilfe schafft hier die Bibliothek ⇒u8g2_for_TFT_eSPI

Grafische Elemente (Widgets) können z. B. Messdaten grafisch darstellen.
Alle grafischen Funktionen der Adafruit_GFX-Bibliothek stehen zur Verfügung.
Funktionen der Bibliothek Adafruit_GFX_Library
Schlüsselwort | Parameter | Aktion |
---|---|---|
width(); | Bildschirmbreite feststellen | |
height(); | Bildschirmhöhe feststellen | |
setRotation(Richtung); | Richtung = 0 → nicht drehen Richtung = 1 → 90° drehen Richtung = 2 → 180° drehen Richtung = 3 → 270 ° drehen | Bildschirm ausrichten |
fillScreen(Farbe); | Bildschirmhintergrund | |
drawLine(StartX, StartY, EndeX, EndeY, Farbe); | Linie zeichnen | |
drawFastHLine(StartX, StartY, Länge, Farbe); | horizontale Linie zeichnen | |
drawFastVLine(StartX, StartY, Länge, Farbe); | vertikale Linie zeichnen | |
drawRect(StartX, StartY,, Breite, Höhe, Farbe); | Rechteck zeichnen | |
drawRoundRect(StartX, StartY, Breite, Höhe, Eckenradius, Farbe); | abgerundetes Rechteck zeichnen | |
fillRoundRect(StartX, StartY, Breite, Höhe, Eckenradius, Füllfarbe); | ausgefülltes abgerundetes Rechteck zeichnen | |
fillRect(StartX, StartY, Breite, Höhe, Füllfarbe); | ausgefülltes Rechteck zeichnen | |
drawCircle(MittelpunktX, MittelpunktY, Radius, Farbe); | Kreis zeichnen | |
fillCircle(MittelpunktX, MittelpunktY, Radius, Füllfarbe); | Ausgefüllten Kreis zeichnen | |
drawTriangle(x1, y1, x2, y2, x3, y3, Farbe); | Dreieck zeichnen: x1, y1: 1.Punkt x2, y2: 2.Punkt x3, y3: 3.Punkt | |
fillTriangle(x1, y1, x2, y2, x3, y3, Füllfarbe); | ausgefülltes Dreieck zeichnen: x1, y1: 1.Punkt x2, y2: 2.Punkt x3, y3: 3.Punkt | |
setCursor(x, y); | Cursor setzen | |
setTextSize(Textgröße); | Textgröße | Textgröße bestimmen |
setTextColor(Farbe); | Textfarbe setzen | |
print("Text"); println("Text"); | Text schreiben | |
setTextWrap(true/false); | false → Text fließt über den Rand des TFTs hinaus true → Text wird am Ende umgebrochen | Zeilenumbruch |
invertDisplay(); | 0 → Farben nicht tauschen 1 → Farben tauschen | |
color565(rot, grün, blau); | rot: 0 - 255 grün: 0 - 255 blau: 0 - 255 | beliebige Mischfarben erstellen |
drawBitmap(PosX, PosY, Array, ArrayGrößeX, ArrayGrößeY, Farbe); | Array als Bild darstellen | |
Bibliothek installieren

Die Steuerdateien
User_Setup.h
Diese Datei enthält die Definition des verwendeten Treibers und die ⇒SPI-Pins des Mikrocontrollers. Sie muss entsprechend angepasst werden.
Du musst beim verwendeten Treiber und beim verwendeten Mikrocontroller die Kommentarzeichen (//) entfernen.
// TFT 160x128
// #define ST7735_DRIVER
// #define TFT_WIDTH 128
// #define TFT_HEIGHT 160
// #define ST7735_BLACKTAB
// TFT 320x240
// #define ILI9341_DRIVER
// #define TFT_WIDTH 240
// #define TFT_HEIGHT 320
// TFT 480x320
// #define ST7796_DRIVER
// #define TFT_WIDTH 320
// #define TFT_HEIGHT 480
// ESP32-Wroom
// #define TFT_CS 5
// #define TFT_DC 2
// #define TFT_RST 4
// Wemos D1/NodeMCU
// #define TFT_CS D8
// #define TFT_RST D1
// #define TFT_DC D2
// Schriftarten
// Font 2-4: Buchstaben, Zahlen und Satzzeichen, keine Umlaute
// Font 6-8: Zahlen und Satzzeichen
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define SMOOTH_FONT
User_Setup_Select.h
Diese Datei enthält die den TFT-Displays zugeordnete Treiber. Ich habe mich hier auf die Displays mit 160×128, 320×240 und 480×320 beschränkt.
#include "User_Setup.h"
// 320x240
#if defined (ILI9341_DRIVER) || defined(ILI9341_2_DRIVER) || defined (ILI9342_DRIVER)
#include <TFT_Drivers/ILI9341_Defines.h>
#define TFT_DRIVER 0x9341
// 160x128
#elif defined (ST7735_DRIVER)
#include <TFT_Drivers/ST7735_Defines.h>
#define TFT_DRIVER 0x7735
#define ST7735_BLACKTAB
// 480x320
#elif defined (ST7796_DRIVER)
#include "TFT_Drivers/ST7796_Defines.h"
#define TFT_DRIVER 0x7796
#endif
Neben der Standardkonfiguration in der Datei User_Setup.h kannst du auch individuelle Konfigurationen anlegen. Weil mit jedem Update der Bibliothek alle Dateien überschrieben werden, ist es sinnvoll, diese individuellen Konfigurationen in einem anderen Ordner abzulegen. Ich habe mich für den Ordner libraries (Unterordner des Ordners Arduino, hier liegen alle installierten Bibliotheken) entschieden.
Ich habe dort einen Ordner TFT_eSPI_Konfiguration erstellt und die individuellen Konfigurationen und die geänderte Datei User_Setup_Select.h dort abgelegt. Beim nächsten Update gehen die Konfigurationsdateien im Ordner libraries/TFT_eSPI zwar verloren, sie können aber aus dem Ordner libraries/TFT-eSPI_Konfiguration leicht wieder zurück kopiert werden.
ESP32-Wroom mit TFT 160×128 Pixeln
Datei: ESP32-Wroom_TFT_160x128
// TFT 160x128
#define ST7735_DRIVER
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
#define ST7735_BLACKTAB
// SPI-Pins Wemos D1 Mini/NodeMCU
#define TFT_CS 5
#define TFT_DC 2
#define TFT_RST 4
// Schriftarten
// Font 2-4: Buchstaben, Zahlen und Satzzeichen, keine Umlaute
// Font 6-8: Zahlen und Satzzeichen
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define SMOOTH_FONT
Wemos D1 Mini/NodeMCU mit TFT 160×128 Pixeln
Datei: Wemos-D1_TFT_160x128.h
// TFT 160x128
#define ST7735_DRIVER
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
#define ST7735_BLACKTAB
// SPI-Pins Wemos D1
#define TFT_CS D8
#define TFT_RST D1
#define TFT_DC D2
// Schriftarten
// Font 2-4: Buchstaben, Zahlen und Satzzeichen, keine Umlaute
// Font 6-8: Zahlen und Satzzeichen
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define SMOOTH_FONT
ESP32-Wroom mit TFT 320×240 Pixeln
Datei: ESP32-Wroom_TFT_320x240.h"
// TFT 320x240
#define ILI9341_DRIVER
#define TFT_WIDTH 240
#define TFT_HEIGHT 320
// SPI-Pins ESP32-Wroom
#define TFT_CS 5
#define TFT_DC 2
#define TFT_RST 4
// Schriftarten
// Font 2-4: Buchstaben, Zahlen und Satzzeichen, keine Umlaute
// Font 6-8: Zahlen und Satzzeichen
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define SMOOTH_FONT
Wemos D1 Mini/NodeMCU mit TFT 320×240 Pixeln
Datei: Wemos-D1_TFT_320x240.h
// TFT 480x320
#define ILI9341_DRIVER
#define TFT_WIDTH 240
#define TFT_HEIGHT 320
// SPI-Wemos D1/NodeMCU
#define TFT_CS D8
#define TFT_RST D1
#define TFT_DC D2
// Schriftarten
// Font 2-4: Buchstaben, Zahlen und Satzzeichen, keine Umlaute
// Font 6-8: Zahlen und Satzzeichen
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define SMOOTH_FONT
ESP32-Wroom mit TFT 480×320 Pixeln
Datei: ESP32-Wroom_TFT_480x320.h
// TFT 480x320
#define ST7796_DRIVER
#define TFT_WIDTH 320
#define TFT_HEIGHT 480
// SPI-Pins ESP32-Wroom
#define TFT_CS 5
#define TFT_DC 2
#define TFT_RST 4
// Schriftarten
// Font 2-4: Buchstaben, Zahlen und Satzzeichen, keine Umlaute
// Font 6-8: Zahlen und Satzzeichen
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define SMOOTH_FONT
Wemos D1 Mini/NodeMCU mit TFT 480×320 Pixeln
Datei: Wemos-D1_TFT_480x320.h
// TFT 480x320
#define ST7796_DRIVER
#define TFT_WIDTH 320
#define TFT_HEIGHT 480
// SPI-Wemos D1/NodeMCU
#define TFT_CS D8
#define TFT_RST D1
#define TFT_DC D2
// Schriftarten
// Font 2-4: Buchstaben, Zahlen und Satzzeichen, keine Umlaute
// Font 6-8: Zahlen und Satzzeichen
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define SMOOTH_FONT
Die Datei User_Setup_Select.h muss geändert werden. Statt der Standarddatei User_Setup.h muss die individuelle Konfiguration eingebunden werden.
// individuelle Konfigurationen
// #include "../TFT_eSPI_Konfiguration/ESP32-Wroom_TFT_480x320.h"
// #include "../TFT_eSPI_Konfiguration/ESP32-Wroom_TFT_320x240.h"
// #include "../TFT_eSPI_Konfiguration/ESP32-Wroom_TFT_160x128.h"
// #include "../TFT_eSPI_Konfiguration/Wemos-D1_TFT_480x320.h"
// #include "../TFT_eSPI_Konfiguration/Wemos-D1_TFT_320x240.h"
// #include "../TFT_eSPI_Konfiguration/Wemos-D1_TFT_160x128.h"
// Standard-Konfiguration
// #include "User_Setup.h"
// 320x240
#if defined (ILI9341_DRIVER) || defined(ILI9341_2_DRIVER) || defined (ILI9342_DRIVER)
#include <TFT_Drivers/ILI9341_Defines.h>
#define TFT_DRIVER 0x9341
// 160x128
#elif defined (ST7735_DRIVER)
#include <TFT_Drivers/ST7735_Defines.h>
#define TFT_DRIVER 0x7735
#define ST7735_BLACKTAB
// 480x320
#elif defined (ST7796_DRIVER)
#include "TFT_Drivers/ST7796_Defines.h"
#define TFT_DRIVER 0x7796
#endif
Beispiel: grafische Funktionen
Das Programm kann für alle Konfigurationen verwendet werden.
#include "TFT_eSPI.h"
TFT_eSPI tft = TFT_eSPI();
// Farben
#define SCHWARZ 0x0000
#define WEISS 0xFFFF
#define BLAU 0x001F
#define ROT 0xF800
#define GRUEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define GELB 0xFFE0
#define BRAUN 0x9A60
#define GRAU 0x7BEF
#define GRUENGELB 0xB7E0
#define DUNKELCYAN 0x03EF
#define ORANGE 0xFDA0
#define PINK 0xFE19
#define BORDEAUX 0xA000
#define HELLBLAU 0x867D
#define VIOLETT 0x915C
#define SILBER 0xC618
#define GOLD 0xFEA0
void setup()
{
tft.init();
}
void loop()
{
tft.fillScreen(SCHWARZ);
tft.setTextSize(1);
tft.setCursor(1, 5);
tft.setTextColor(BLAU);
tft.print("Text");
delay(500);
tft.setTextSize(2);
tft.setCursor(1, 20);
tft.setTextColor(ORANGE);
tft.print("Text");
delay(500);
tft.setTextSize(3);
tft.setCursor(1, 40);
tft.setTextColor(GRUEN);
tft.print("Text");
delay(500);
tft.setTextSize(5);
tft.setCursor(1, 70);
tft.setTextColor(ROT);
tft.print("Text");
delay(500);
delay(2000);
// zufällige Pixel
tft.fillScreen(SCHWARZ);
for (int i = 0; i < 700; i++)
{
int PixelX = random(1, tft.width());
int PixelY = random(1, tft.height());
tft.drawPixel(PixelX, PixelY, tft.color565(random(255),random(255),random(255)));
delay(5);
}
delay(2000);
// Linien ziehen
tft.fillScreen(SCHWARZ);
for (int i = 1; i < tft.height(); i+=10)
{
tft.drawLine(1, i, tft.width(), i, ORANGE);
}
delay(2000);
// Kreise vom Mittelpunkt zeichnen
tft.fillScreen(SCHWARZ);
for (int i = 1; i < tft.width() / 2; i+=10)
{
tft.fillCircle(tft.width() / 2, tft.height() / 2, tft.width() / 2 - i, tft.color565(random(255),random(255),random(255)));
delay(50);
}
delay(2000);
// Rechtecke zeichnen
tft.fillScreen(SCHWARZ);
for (int i = 1; i < tft.width(); i+=10)
{
tft.drawRect(tft.width() / 2 - i / 2, tft.height() / 2 - i / 2 , i, i, tft.color565(random(255),random(255),random(255)));
}
delay(2000);
// ausgefüllte Rechtecke zeichnen
tft.fillScreen(SCHWARZ);
for (int i = 1; i < tft.width() / 2; i+=10)
{
tft.fillRect(i, i, i, i, tft.color565(random(ROT),random(GRUEN),random(BLAU)));
delay(50);
}
delay(2000);
// Dreiecke
tft.fillScreen(SCHWARZ);
for (int i = 1; i <tft.width(); i+=10)
{
tft.fillTriangle(i, i, 100, 100, 1, tft.width(), tft.color565(random(255),random(255),random(255)));
delay(50);
}
}
Schriften mit der Bibliothek u8g2_for_TFT_eSPI
Die Bibliothek u8g2_for_TFT_eSPI kann Umlaute und Sonderzeichen darstellen.
Sie nutzt die 🔗Schriften der Bibliothek u8g2.
An der Endung der Schriftart kannst du erkennen, welcher Zeichensatz unterstützt wird.
u8g2_for_AdafruitGFX Zeichensatz
Zeichensatz | Beschreibung |
---|---|
r | ASCII-Zeichen zwischen 30 und 127 enthält alle Zahlen, Groß und Kleinbuchstaben |
f | ASCII-Zeichen zwischen 30 und 255 erweiterter Zeichensatz mit Symbolen und Umlauten |
u | ASCII-Zeichen zwischen 32 und 95 Großbuchstaben |
n | ASCII-Zeichen zwischen 30 und 39 Zahlen und Satzzeichen |

Die Bibliothek kann nicht über die Bibliotheksverwaltung installiert werden, sie muss heruntergeladen
https://github.com/Bodmer/U8g2_for_TFT_eSPI
und mit
Sketch -> Bibliothek einbinden -> zip-Bibliothek hinzufügen
installiert werden.
Das Programm:
#include "TFT_eSPI.h"
// https://github.com/Bodmer/U8g2_for_TFT_eSPI
#include "U8g2_for_TFT_eSPI.h"
// Objekt der Bibliothek TFT_eSPI erstellen
TFT_eSPI tft = TFT_eSPI();
// Objekt für Schriften von U8g2 (u8g2Schriften)
U8g2_for_TFT_eSPI u8g2Schriften;
void setup()
{
// Schriften von u8g2 tft zuordnen
u8g2Schriften.begin(tft);
// tft starten
tft.init();
// wenn die Farben invertiert sind
// weiß = schwarz, schwarz = weiss ...
// wenn nicht: Zeile mit // versehen
// tft.invertDisplay(1);
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
u8g2Schriften.setCursor(5, 55);
u8g2Schriften.setForegroundColor(TFT_WHITE);
u8g2Schriften.setBackgroundColor(TFT_BLACK);
u8g2Schriften.setFont(u8g2_font_inb53_mf);
u8g2Schriften.print("Großstädte");
// Trennlinien
tft.drawFastHLine(1, 60, tft.width(), TFT_WHITE);
tft.drawFastHLine(1, 61, tft.width(), TFT_WHITE);
tft.drawFastHLine(1, 62, tft.width(), TFT_WHITE);
u8g2Schriften.setFont(u8g2_font_inb30_mf);
u8g2Schriften.setCursor(5, 120);
u8g2Schriften.print("München");
u8g2Schriften.setCursor(5, 180);
u8g2Schriften.print("Düsseldorf");
u8g2Schriften.setCursor(5, 240);
u8g2Schriften.print("Köln");
}
void loop()
{
// nichts zu tun, das Programm läuft nur einmal
}
Letzte Aktualisierung: