Skip to Content

Interfaccia Arduino Uno con ST7735 TFT usando un Level Shifter

Interfaccia Arduino Uno con ST7735 TFT usando un Level Shifter

In questo tutorial imparerai come interfacciare un display TFT da 1,8 pollici 128×160 con driver ST7735 con un Arduino Uno usando un TXS0108E Logic Level Shifter.

L’Arduino Uno e molte altre schede Arduino funzionano con logica a 5V, mentre molti display TFT, sensori e altri dispositivi operano con logica a 3,3V. Perciò spesso non puoi collegare direttamente questi dispositivi ad un Arduino, ma devi usare un convertitore di livello logico che converte tra i livelli 5V e 3,3V.

Le istruzioni e il codice in questo tutorial funzioneranno con piccole modifiche anche per altri Arduino e TFT. L’unico requisito è avere un Arduino con logica a 5V, un TFT con logica a 3,3V e che il display utilizzi il driver ST7735.

Componenti necessari

Per questo tutorial ho usato un Arduino Uno, un modulo TXS0108E Logic Level Shifter e un display TFT da 1,8 pollici con risoluzione 128×160 pixel e driver ST7735. Alcuni cavi e una breadboard possono essere utili.

Display TFT ST7735 da 1,8″

TXS0108E Logic Level Shifter

Arduino

Arduino Uno

USB Data Sync cable Arduino

Cavo USB per Arduino UNO

Dupont wire set

Set di cavi Dupont

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.

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:

Front and Back of 1.8" TFT ST7735 Display Module
Fronte e retro del modulo display TFT ST7735 da 1,8″ (source)

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.

Alcuni di essi hanno un convertitore logic level integrato che permette di collegare il modulo display ad un Arduino che funziona a 5V. Questo qui non ce l’ha, il che significa che dobbiamo usare un convertitore di livello logico altrimenti potresti danneggiare il chip controller del display.

Esistono display simili che usano il driver IC ST7789 invece del ST7735S. Il codice in questo tutorial è per display con il driver IC ST7735S e non funzionerà con altri.

Il modulo TXS0108E Logic Level Shifter

Il TXS0108E è un convertitore di livello logico bidirezionale a 8 canali. Converte tra diversi livelli di tensione, tipicamente 3,3V e 5V. L’immagine sotto mostra una tipica scheda breakout con il chip TXS0108E al centro.

Breakout board for TXS0108E Logic Level Shifter
Scheda breakout per TXS0108E Logic Level Shifter

Si possono vedere gli 8 canali (A1A8, B1B8) etichettati sulla scheda. Colleghi un segnale logico a 5V su uno dei canali B e questo viene convertito in livelli logici a 3,3V sul corrispondente canale A, ad esempio A1 <-> B1.

Il TXS0108E è bidirezionale, il che significa che A può essere un ingresso e B un’uscita o viceversa. Inoltre supporta comunicazioni SCM, I²C e SPI, e useremo SPI per interfacciare l’Arduino con il display TFT.

Per informazioni più dettagliate consulta il datasheet del TXS0108E linkato qui sotto:

Come collegare il TXS0108E Logic Level Shifter

Collegare il TXS0108E è semplice. Devi fornire la tensione più alta a 5V al pin VB sul lato dei canali B e la tensione più bassa a 3,3V al pin VA sul lato dei canali A. Vedi lo schema di collegamento sotto:

La massa va al pin GND e c’è un pin OE per “Output Enable” che devi collegare a 3,3V per abilitare i canali.

Come detto prima, tutti i segnali a 5V devono essere collegati ai canali B e tutti i segnali a 3,3V ai canali A. Non è necessario usare tutti i canali e nella sezione successiva collegheremo il display TFT all’Arduino usando 6 canali.

Collegare il display TFT ST7735 da 1,8″ con Level Shifter e Arduino Uno

Collegare il display TFT a un Arduino Uno tramite il Logic Level Shifter richiede molti fili ed è facile sbagliare. Quindi prenditi il tempo necessario e fai attenzione a fare i collegamenti corretti.

Nota anche che l’etichettatura dei pin sul display TFT è un po’ confusa. Mostra i pin SDA e SCL ma poiché il display 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″ tramite il TXS0108E Logic Level Shifter a un Arduino Uno:

Connecting TFT ST7735 Display with TXS0108E and Arduino
Collegamento display TFT ST7735 con TXS0108E e Arduino

Per semplificare, ecco una tabella con i collegamenti da effettuare:

Arduino UNOLevel Shifter BLevel Shifter ADisplay TFT
13 (SCLK)B1A1SCL
11 (MOSI)B2A2SDA
8 (RST)B3A3RES
9 (DC)B4A4DC
10 (CS)B5A5CS
7 (BLK)B6A6BL
5VVB
3.3VVAVCC
3.3VOE
GNDGNDGND

Codice per display TFT ST7735 con libreria Adafruit_ST7735

In questa sezione useremo la libreria Adafruit-ST7735 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:

Adafruit-ST7735 in Library Manager
Adafruit-ST7735 nel Library Manager

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

Install the dependencies for Adafruit-ST7735 Library
Installa dipendenze per la libreria Adafruit-ST7735

Con la libreria installata, ora possiamo testare il display. Compila e carica il seguente codice. Stampa il testo “Makerguides” con una cornice gialla sul display:

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

#define TFT_CS    10   
#define TFT_RST   8  
#define TFT_DC    9   
// #define TFT_MOSI  11  // SDA // HW MOSI
// #define TFT_SCLK  13  // SCL // HW SCLK
// #define TFT_MISO  12  // not used
#define TFT_BL    7   // 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) {
  pinMode(TFT_BL, OUTPUT);
  digitalWrite(TFT_BL, HIGH); 

  //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 SPI hardware non avrai bisogno di definire i pin per TFT_MOSI e TFT_SCLK. Nel caso di Arduino i pin per SPI hardware sono

  • SCLK -> 13
  • MISO -> 12
  • MOSI -> 11
  • SS/CS -> 10

Tuttavia, se usi SPI software dovrai definirli e 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 il seguente output sul display:

Output on TFT with Adafruit_ST7735 Library
Output sul TFT con libreria Adafruit_ST7735

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 black tab e la green tab 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:

Display TFT con linguetta verde (source)

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.

Conclusioni

In questo tutorial hai imparato come interfacciare un display TFT da 1,8 pollici 128×160 con driver ST7735 con un Arduino Uno usando un TXS0108E Logic Level Shifter.

Se hai un microcontrollore che funziona con logica a 3,3V non avrai bisogno del convertitore di livello logico. Dai un’occhiata al tutorial Interface TFT ST7735 Display with ESP32, dove colleghiamo lo stesso TFT a un ESP32.

Se il tuo display usa il driver ST7789 invece del ST7735, puoi comunque usare la Adafruit-ST7735 Library per controllare il display e sono necessarie solo piccole modifiche al codice.

Se hai commenti, sentiti libero di lasciarli nella sezione commenti.

Buon divertimento con il fai-da-te ; )