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.



1.8 inch TFT LCD display met ST7735S driver

⚙️ 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 displayESP32Functie
VCC3.3VVoeding
GNDGNDMassa
SCL / SCK / CLKGPIO 18SPI klok
SDA / MOSI / DINGPIO 23SPI data naar display
RES / RSTGPIO 17Reset
DC / A0GPIO 16Data/command selectie
CSGPIO 5Chip select
BL / LED3.3V of GPIO 25Backlight
ST7735S TFT display aansluiten op ESP32

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:

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.


Tips


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! 🙌
☕ Geef een kop koffie