1.8 inch TFT LCD display met ST7735S driver aansluiten op een ESP32 of Arduino
Over het 1.8" TFT display met ST7735S driver
Een 1.8 inch TFT LCD display met een ST7735S driver is een compact kleurenschermpje dat vaak wordt gebruikt in Arduino-, ESP8266- en ESP32-projecten. Het scherm heeft meestal een resolutie van 128 × 160 pixels en communiceert via SPI. Daardoor heb je meer aansluitdraden nodig dan bij een eenvoudige I²C-sensor, maar je krijgt daar een snel en kleurrijk display voor terug.
Dit type scherm is erg geschikt voor kleine standalone projecten, zoals een binnenthermometer, bliksemdetector, windmeter, weerstation, statusdisplay of een compact dashboard naast Home Assistant. In dit artikel lees je hoe je het scherm aansluit op een ESP32, welke libraries je nodig hebt en wat je kunt doen als het scherm wit blijft, verkeerde kleuren toont of niet volledig wordt bijgewerkt.
⚙️ Specificaties
🖥️ Algemene informatie
🏷️ Naam: 1.8 inch TFT LCD display
🔧 Driver: ST7735S / ST7735
📐 Resolutie: meestal 128 × 160 pixels
🎨 Type: kleuren TFT LCD
🔗 Communicatie
Protocol: SPI
Datalijnen: SCK, MOSI, CS, DC en RST
MISO nodig: meestal niet
Geschikt voor ESP32: ja
🔋 Voeding
Logica: bij voorkeur 3.3 V
Voeding displaymodule: vaak 3.3 V of 5 V, afhankelijk van de module
Backlight: meestal apart via LED/BL pin
Let op: een kaal display zonder level shifting is niet 5 V tolerant
🧰 Typische toepassingen
🌡️ Binnenthermometer of klimaatdisplay
🌩️ Bliksemdetector met AS3935
🌬️ Windmeter of weerstation
🏠 Home Assistant statusdisplay
🔋 Batterij-, WiFi- of MQTT-status
Aansluitschema ESP32 – ST7735S TFT display
Onderstaand schema gebruikt de standaard SPI-pinnen van veel ESP32-bordjes. Je kunt andere GPIO-pinnen gebruiken, maar pas dan ook de pin-definities in de Arduino-code aan.
| ST7735S display | ESP32 | Functie |
|---|---|---|
| VCC | 3.3V | Voeding |
| GND | GND | Massa |
| SCL / SCK / CLK | GPIO 18 | SPI klok |
| SDA / MOSI / DIN | GPIO 23 | SPI data naar display |
| RES / RST | GPIO 17 | Reset |
| DC / A0 | GPIO 16 | Data/command selectie |
| CS | GPIO 5 | Chip select |
| BL / LED | 3.3V of GPIO 25 | Backlight |
Tip: sluit de backlight-pin eerst rechtstreeks aan op 3.3 V. Werkt het scherm goed, dan kun je de backlight later eventueel via een GPIO-pin met PWM dimmen. Gebruik bij twijfel een transistor of MOSFET als de backlight meer stroom vraagt dan een GPIO veilig kan leveren.
Benodigde Arduino libraries
Voor een snelle test kun je de Adafruit libraries gebruiken. Installeer via de Arduino Library Manager:
- Adafruit GFX Library
- Adafruit ST7735 and ST7789 Library
Voor grotere projecten is TFT_eSPI ook een populaire keuze. Die library is sneller en flexibeler, maar vraagt wel wat meer configuratie. Voor een eerste test is de Adafruit library meestal het eenvoudigst.
Arduino-code voorbeeld voor ESP32
Deze testcode tekent tekst, lijnen en kleurvlakken op het scherm. Daarmee kun je controleren of de voeding, SPI-aansluiting, resolutie en kleurvolgorde kloppen.
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
// Pin-definities ESP32
#define TFT_CS 5
#define TFT_DC 16
#define TFT_RST 17
#define TFT_BL 25 // optioneel: backlight via GPIO, anders BL aan 3.3V
// Hardware SPI op ESP32: SCK = GPIO 18, MOSI = GPIO 23
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(115200);
delay(500);
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH); // backlight aan
// Voor veel 1.8 inch 128x160 displays werkt INITR_BLACKTAB goed.
// Werkt je scherm niet goed? Probeer dan INITR_REDTAB of INITR_GREENTAB.
tft.initR(INITR_BLACKTAB);
tft.setRotation(1); // 0/1/2/3 proberen als de oriëntatie niet klopt
tft.fillScreen(ST77XX_BLACK);
tft.setTextWrap(true);
tft.setCursor(10, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.println("ST7735S");
tft.setTextSize(1);
tft.setTextColor(ST77XX_CYAN);
tft.println("1.8 inch TFT");
tft.println("128 x 160 pixels");
delay(1500);
kleurentest();
schermtest();
}
void loop() {
static int teller = 0;
tft.fillRect(0, 120, 160, 20, ST77XX_BLACK);
tft.setCursor(5, 125);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(1);
tft.print("Teller: ");
tft.print(teller++);
delay(1000);
}
void kleurentest() {
tft.fillScreen(ST77XX_RED);
delay(500);
tft.fillScreen(ST77XX_GREEN);
delay(500);
tft.fillScreen(ST77XX_BLUE);
delay(500);
tft.fillScreen(ST77XX_BLACK);
}
void schermtest() {
tft.drawRect(0, 0, tft.width(), tft.height(), ST77XX_WHITE);
tft.drawLine(0, 0, tft.width() - 1, tft.height() - 1, ST77XX_RED);
tft.drawLine(tft.width() - 1, 0, 0, tft.height() - 1, ST77XX_GREEN);
tft.setCursor(5, 30);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(1);
tft.println("Display OK");
}
Veelvoorkomende problemen
⬜ Het scherm blijft wit
Een wit scherm betekent meestal dat de backlight wel aan staat, maar dat de displaycontroller geen goede data ontvangt. Controleer vooral SCK, MOSI, CS, DC en RST.
🎨 Verkeerde kleuren
Sommige modules gebruiken een andere kleurvolgorde. Probeer in de code een andere init-variant:
INITR_BLACKTAB, INITR_REDTAB of INITR_GREENTAB.
📏 Beeld staat verschoven
Bij goedkope 1.8 inch modules kan er een kleine offset in X- of Y-richting zijn. Ook dit hangt vaak samen met de gekozen init-tab. Probeer eerst de andere init-varianten voordat je handmatig offsets gaat aanpassen.
⚡ Scherm knippert bij verversen
Vul niet telkens het hele scherm opnieuw. Teken alleen de delen die veranderen, bijvoorbeeld met fillRect() achter een waarde.
Dit geeft een rustiger beeld en is veel mooier voor een thermometer, windmeter of statusdisplay.
Display gebruiken zonder hinderlijk knipperen
Een veelgemaakte fout is het volledig wissen en opnieuw tekenen van het hele display in elke loop(). Dat werkt technisch wel, maar het scherm gaat dan
zichtbaar knipperen. Beter is om de vaste onderdelen, zoals titel, iconen en kaders, één keer te tekenen in setup(). Daarna werk je alleen de variabele
waarden bij.
// Slecht idee: dit wist elke seconde het hele scherm
// tft.fillScreen(ST77XX_BLACK);
// tekenAllesOpnieuw();
// Beter: alleen het gebied achter de waarde wissen
void tekenTemperatuur(float temperatuur) {
tft.fillRect(20, 55, 100, 30, ST77XX_BLACK);
tft.setCursor(20, 55);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(3);
tft.print(temperatuur, 1);
tft.print(" C");
}
Backlight dimmen met PWM
Als de backlight-pin van jouw module geschikt is om via een GPIO aan te sturen, kun je de helderheid dimmen met PWM. Op een ESP32 kan dat met
ledcWrite(). Bij twijfel is het veiliger om de backlight via een transistor of MOSFET te schakelen.
#define TFT_BL 15
#define PWM_CHANNEL 0
#define PWM_FREQ 5000
#define PWM_RESOLUTION 8
void setupBacklight() {
ledcSetup(PWM_CHANNEL, PWM_FREQ, PWM_RESOLUTION);
ledcAttachPin(TFT_BL, PWM_CHANNEL);
// 0 = uit, 255 = maximaal
ledcWrite(PWM_CHANNEL, 120);
}
Toepassing in Home Assistant projecten
Het ST7735S display wordt niet rechtstreeks door Home Assistant uitgelezen zoals een sensor. Het scherm is vooral handig als lokale weergave op een ESP32. De ESP32 kan bijvoorbeeld gegevens meten met sensoren, deze via MQTT naar Home Assistant sturen en tegelijk de belangrijkste waarden lokaal op het display tonen.
- Binnenthermometer: temperatuur, luchtvochtigheid, luchtdruk en WiFi-status.
- Weerstation: temperatuur, lux, luchtdruktrend, windrichting en windkracht.
- Bliksemdetector: afstand tot bliksem, storing/ruis, laatste detectie en teller.
- MQTT-statusdisplay: verbinding, laatste bericht en sensorwaarden.
Tips
- Gebruik voor een ESP32 bij voorkeur 3.3 V logica.
- Controleer goed of jouw displaypin SDA eigenlijk MOSI betekent. Bij SPI is dit geen I²C-SDA.
- Gebruik korte draden, zeker bij hogere SPI-snelheden.
- Test eerst met een eenvoudige kleurentest voordat je een uitgebreid project gaat bouwen.
- Probeer bij beeldproblemen eerst
INITR_BLACKTAB,INITR_REDTABenINITR_GREENTAB. - Teken alleen gewijzigde schermdelen opnieuw om knipperen te voorkomen.
Waarom kiezen voor een 1.8 inch ST7735S TFT display?
Een 1.8 inch ST7735S display is klein, goedkoop en veelzijdig. Het scherm is groot genoeg om meerdere waarden overzichtelijk te tonen, maar compact genoeg om in een kleine 3D-geprinte behuizing te passen. Voor standalone ESP32-projecten is dit display daarom een mooie stap omhoog ten opzichte van een klein OLED-scherm of een simpel 7-segment display.
Vooral voor projecten die je ook zonder Home Assistant wilt kunnen gebruiken, zoals een lokale windmeter, bliksemdetector of binnenthermometer, is dit type display erg praktisch.
☕ Steun deze website met een kop koffie
Op matteman.nl deel ik al mijn projecten, schema’s, uitleg en code gratis — zonder advertenties of sponsordeals. Alles wat je hier vindt, is met zorg gemaakt om hobbyisten, makers en automatiseringsliefhebbers op weg te helpen.Heb je iets gehad aan de informatie op deze site? Dan kun je mij helpen door een eenmalige bijdrage te doen via Buy Me a Coffee. Daarmee steun je niet alleen mijn werk, maar ook de kosten voor hosting, onderdelen en het onderhouden van de 3D-printer (die het altijd begeeft op het verkeerde moment 😉).
Elke bijdrage — groot of klein — wordt enorm gewaardeerd. Dankjewel! 🙌