In questo tutorial imparerai come interfacciare un modulo display TFT da 1,8″ 128×160 con driver ST7735 con un ESP32 (WEMOS Lolin32 lite).
Le istruzioni e il codice funzioneranno con alcune piccole modifiche anche per altri ESP32 e TFT, purché il display utilizzi il driver ST7735.
Componenti necessari
Ti serviranno un ESP32 e un display TFT da 1,8 pollici con risoluzione 128×160 pixel e un driver ST7735. Alcuni cavi e una breadboard potrebbero essere utili.

Display TFT ST7735 da 1,8″

ESP32 lite

Cavo dati USB

Set di fili Dupont

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.
Modulo Display TFT ST7735 da 1,8″
Il modulo display TFT da 1,8″ che useremo ha una risoluzione di 128×160 pixel con 65K colori RGB. L’immagine sotto mostra il fronte e il retro del modulo display:

Il modulo utilizza il chip driver ST7735S ed è controllato tramite un’interfaccia SPI a 4 fili. La tensione di funzionamento è 3,3V e il display assorbe circa 30mA al massimo.
Nota che esistono molte versioni diverse di questo tipo di display TFT. Alcuni hanno un SD card aggiuntivo o un touch display.
Soprattutto, alcuni di essi hanno un convertitore logic level che permette di collegare il modulo display a un Arduino che funziona a 5V. Questo qui non ce l’ha, quindi non puoi collegarlo direttamente a un Arduino! Perciò usiamo un ESP32 che funziona con logica CMOS a 3,3V.
Se vuoi usare un Arduino devi convertire i livelli logici. Ci sono vari modi per farlo (partitore di tensione, optoisolatore, IC level-shifting) ma il più semplice è procurarsi un level shifting module.
Infine, ci sono display simili che usano il driver ST7789 invece del ST7735S. Il codice in questo tutorial è per display con driver ST7735S e non funzionerà con altri.
Collegare il display TFT ST7735 da 1,8″ con ESP32
Collegare il display TFT a un ESP32 è semplice, ma l’etichettatura dei pin sul display è un po’ confusa. Mostra i pin SDA e SCL ma, dato che ha un’interfaccia SPI, questi non sono i pin SDA e SCL per I2C! Invece, SDA corrisponde a MOSI e SCL a SCLK per SPI.
Lo schema di collegamento seguente mostra come collegare il display TFT ST7735 da 1,8″ a un WEMOS Lolin32 lite:

E qui, per comodità, le connessioni richieste in tabella:
| Display | ESP32 |
|---|---|
| CS / SS | 5 |
| RST | 16 |
| DC | 17 |
| SDA / MOSI | 23 |
| SCL / SCLK | 18 |
| BKL/BL | 22 |
| GND | GND |
| VCC | 3.3V |
Assicurati di collegare il VCC del display a 3,3V! Inoltre dovresti usare i pin hardware SPI per MOSI e SCLK. A seconda del microcontrollore i pin hardware SPI variano. Puoi trovarli selezionando la tua scheda nell’Arduino IDE e poi eseguendo il codice qui sotto.
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() { }
Il codice stampa i pin necessari per l’hardware SPI – specificamente MOSI e SCLK. Gli altri pin puoi sceglierli liberamente e MISO non è usato.
Codice per display TFT ST7735 con libreria Adafruit_ST7735
In questa sezione useremo la Adafruit-ST7735 Library per scrivere e disegnare sul display TFT ST7735 da 1,8″. Per installarla apri il Library Manager, cerca “Adafruit-ST7735” e clicca sul pulsante verde INSTALL:

L’installer probabilmente ti chiederà di installare anche le dipendenze. Clicca su INSTALL ALL:

Con la libreria installata, possiamo ora testare il display. Compila e carica il codice seguente. Visualizza il testo “Makerguides” con una cornice gialla sul display:
#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() { }
Se usi hardware SPI non ti serviranno le definizioni dei pin per TFT_MOSI e TFT_SCLK. Tuttavia, se usi software SPI ti serviranno e dovrai passarli al costruttore alternativo per l’oggetto tft:
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
Se compili e carichi il codice, dovresti vedere questo output sul display:

Se non vedi nulla, o i colori sono sbagliati, o il testo mostra artefatti, prova uno degli altri inizializzatori per il display TFT nel codice:
//tft.initB(); tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab //tft.initR(INITR_GREENTAB); // Init ST7735S chip, green tab
La tab nera e la tab verde si riferiscono alle linguette colorate attaccate alla pellicola protettiva dello schermo con cui questi display solitamente vengono forniti. Per esempio, l’immagine sotto mostra un display TFT con linguetta verde:

Il colore della linguetta è importante perché spesso indica il tipo di controller del display usato. La Linguetta verde è tipica per controller più recenti o alternativi come ILI9341, ST7735 o altri modelli specifici. La Linguetta nera indica un controller più vecchio o diverso, come ST7735R o varianti simili, che hanno specifiche leggermente diverse.
Infine, puoi provare a ridurre la velocità SPI se il testo sul display appare corrotto:
tft.setSPISpeed(27000000);
A proposito, se vuoi accendere o spegnere la retroilluminazione del display, puoi usare questo codice:
pinMode(TFT_BL, OUTPUT); digitalWrite(TFT_BL, LOW);
Codice per display TFT ST7735 con libreria TFT_eSPI
In questa sezione useremo la TFT_eSPI library invece della libreria Adafruit_ST7735 per controllare il display. Per installarla apri il Library Manager, cerca “TFT_eSPI” e premi “INSTALL”. Dopo l’installazione dovrebbe apparire così:

Ora dobbiamo creare la struttura corretta della cartella progetto. Apri l’Arduino IDE e crea un progetto “tft_test” e salvalo (Salva con nome …). Questo creerà una cartella “tft_test” con il file “tft_test.ino” dentro. In questa cartella crea un altro file chiamato “tft_setup.h“. La tua cartella progetto dovrebbe apparire così

Se vuoi saperne di più su questa configurazione e altre opzioni per configurare un display TFT con la libreria TFT_eSPI dai un’occhiata al tutorial How to configure TFT_eSPI Library for TFT display.
Dopo aver creato la cartella progetto con i due file, copia il seguente codice di configurazione per il display TFT nel file tft_setup.h:
// 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
e il codice dello sketch nel file tft_test.ino:
// 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() { }
Se compili e carichi il codice dovresti vedere lo stesso output di prima:

Simile alla libreria Adafruit_ST7735, il file tft_setup.h per la libreria TFT_eSPI offre diversi inizializzatori a seconda del display TFT specifico (linguetta verde, linguetta nera, …) che stai usando. Se hai problemi con il display (colori sbagliati, testo corrotto), prova prima uno di questi:
//#define ST7735_INITB //#define ST7735_GREENTAB //#define ST7735_GREENTAB2 //#define ST7735_GREENTAB3 //#define ST7735_REDTAB #define ST7735_BLACKTAB
Come prima, la velocità SPI è un altro parametro importante, specificato anch’esso nel file tft_setup.h:
#define SPI_FREQUENCY 27000000
Ho provato una frequenza comune e alta SPI_FREQUENCY di 40000000 ma ho iniziato a vedere testo corrotto. L’immagine sotto mostra due schermate del display TFT. La prima con una SPI_FREQUENCY di 27000000 e la seconda con frequenza 40000000.

Si vede chiaramente che il testo con frequenza SPI più alta diventa corrotto. Quindi fai attenzione alle velocità elevate e abbassa la frequenza SPI se il testo inizia a essere distorto.
Infine, la libreria TFT_eSPI ti permette di mettere in sleep il driver e il display, oltre a spegnere la retroilluminazione:
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
La tabella seguente mostra il consumo energetico del display TFT con i vari componenti accesi o spenti:
| Retroilluminazione | Display | Driver | Consumo |
|---|---|---|---|
| ACCESO | ACCESO | ACCESO | 15 mA |
| SPENTO | ACCESO | ACCESO | 2 mA |
| SPENTO | SPENTO | ACCESO | 1.5 mA |
| SPENTO | SPENTO | SPENTO | 0.3 mA |
Visualizzare il testo “Makerguides” con retroilluminazione e tutto il resto acceso consuma 15 mA. Ma se spegni tutto (retroilluminazione, display, driver) il consumo scende a 0,3 mA! Ottimo per progetti a batteria.
Conclusioni
In questo tutorial hai imparato come interfacciare un modulo display TFT con driver ST7735 con un ESP32. Abbiamo usato due librerie diverse, Adafruit_ST7735 e TFT_eSPI, per disegnare e scrivere testo sul display TFT.
Se hai commenti, sentiti libero di lasciarli nella sezione commenti.
Buon divertimento con il tinkering ; )

