Neste tutorial, vais aprender a ligar um módulo de ecrã TFT de 1,8″ 128×160 com um driver de ecrã ST7735 a um ESP32 (WEMOS Lolin32 lite).
As instruções e o código funcionarão com algumas pequenas alterações para outros ESP32 e TFT, desde que o ecrã utilize o driver ST7735.
Peças Necessárias
Vais precisar de um ESP32 e de um ecrã TFT de 1,8 polegadas com resolução de 128×160 pixels e um CI driver ST7735. Alguns cabos e uma breadboard também podem ser úteis.

Ecrã TFT ST7735 de 1,8″

ESP32 lite

Cabo USB de Dados

Conjunto de Cabos 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.
Módulo de Ecrã TFT ST7735 de 1,8″
O Módulo de Ecrã TFT de 1,8″ que vamos usar tem uma resolução de 128×160 pixels com 65K cores RGB. A imagem abaixo mostra a frente e o verso do módulo de ecrã:

O módulo usa o chip driver ST7735S e é controlado via uma interface SPI de 4 fios. A tensão de funcionamento é 3,3V e o ecrã consome cerca de 30mA no máximo.
Note que existem várias versões diferentes deste tipo de ecrã TFT. Algumas têm um SD card adicional ou um touch display.
Mais importante, algumas têm um conversor logic level que permite ligar o módulo de ecrã a um Arduino que funciona a 5V. Este aqui não tem, o que significa que não podes ligá-lo diretamente a um Arduino! Por isso usamos um ESP32 que funciona com lógica CMOS de 3,3V.
Se quiseres usar um Arduino, precisas de converter os níveis lógicos. Existem várias formas de fazer isso (divisor de tensão, optoacoplador, CI de mudança de nível), mas a forma mais fácil é usar um level shifting module.
Finalmente, existem ecrãs semelhantes que usam o CI driver ST7789 em vez do ST7735S. O código deste tutorial é para ecrãs com o CI driver ST7735S e não funcionará para outros.
Ligação do Ecrã TFT ST7735 de 1,8″ ao ESP32
Ligar o ecrã TFT a um ESP32 é fácil, mas a identificação dos pinos no ecrã é um pouco confusa. Mostra pinos SDA e SCL, mas como tem uma interface SPI, estes não são os pinos SDA e SCL do I2C! Em vez disso, SDA corresponde a MOSI e SCL a SCLK para SPI.
O diagrama de ligação seguinte mostra como ligar o ecrã TFT ST7735 de 1,8″ a um WEMOS Lolin32 lite:

E aqui, para tua conveniência, as ligações necessárias numa tabela:
| Ecrã | ESP32 |
|---|---|
| CS / SS | 5 |
| RST | 16 |
| DC | 17 |
| SDA / MOSI | 23 |
| SCL / SCLK | 18 |
| BKL/BL | 22 |
| GND | GND |
| VCC | 3.3V |
Certifica-te de ligar o VCC do ecrã a 3,3V! Também deves usar os pinos hardware SPI para MOSI e SCLK. Dependendo do microcontrolador, os pinos hardware SPI podem variar. Podes encontrá-los selecionando a tua placa no Arduino IDE e depois executando o código abaixo.
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() { }
Ele imprime os pinos que precisas para hardware SPI – especificamente MOSI e SCLK. Os restantes pinos podes escolher livremente e o MISO não é usado.
Código para Ecrã TFT ST7735 com a Biblioteca Adafruit_ST7735
Nesta secção vamos usar a Adafruit-ST7735 Library para escrever e desenhar no ecrã TFT ST7735 de 1,8″. Para a instalar, abre o Library Manager, procura por “Adafruit-ST7735” e clica no botão verde INSTALL:

O instalador provavelmente vai pedir para instalar as dependências também. Clica em INSTALL ALL:

Com a biblioteca instalada, podemos agora testar o ecrã. Basta compilar e carregar o código seguinte. Ele imprime o texto “Makerguides” com uma moldura amarela no ecrã:
#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 usares hardware SPI, não precisarás das definições dos pinos para TFT_MOSI e TFT_SCLK. No entanto, se usares software SPI, precisarás deles e de os passar para o outro construtor do objeto tft:
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
Se compilares e carregares o código, deverás ver a seguinte saída no teu ecrã:

Se não vires nada, ou as cores estiverem erradas, ou o texto apresentar artefactos, experimenta um dos outros inicializadores para o ecrã TFT no código:
//tft.initB(); tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab //tft.initR(INITR_GREENTAB); // Init ST7735S chip, green tab
A aba preta e a aba verde referem-se às abas coloridas presas à película protetora do ecrã que estes ecrãs normalmente trazem. Por exemplo, a imagem abaixo mostra um ecrã TFT com uma aba verde:

A cor da aba é importante porque muitas vezes indica o tipo de controlador do ecrã usado. A Aba Verde é tipicamente para controladores mais recentes ou alternativos como ILI9341, ST7735, ou outros modelos específicos. A Aba Preta indica um controlador mais antigo ou diferente, como ST7735R ou variantes similares, que têm especificações ligeiramente diferentes.
Finalmente, podes tentar reduzir a velocidade do SPI se o texto no ecrã parecer corrompido:
tft.setSPISpeed(27000000);
A propósito, se quiseres ligar ou desligar a luz de fundo do ecrã, podes usar o seguinte código:
pinMode(TFT_BL, OUTPUT); digitalWrite(TFT_BL, LOW);
Código para Ecrã TFT ST7735 com a Biblioteca TFT_eSPI
Nesta secção, vamos usar a TFT_eSPI library em vez da biblioteca Adafruit_ST7735 para controlar o ecrã. Para a instalar, abre o Library Manager, procura por “TFT_eSPI” e clica em “INSTALL”. Depois da instalação, deverá ficar assim:

De seguida, precisamos criar a estrutura correta da pasta do projeto. Abre o Arduino IDE e cria um projeto “tft_test” e guarda-o (Guardar Como …). Isto vai criar uma pasta “tft_test” com o ficheiro “tft_test.ino” dentro. Nesta pasta, cria outro ficheiro chamado “tft_setup.h“. A pasta do teu projeto deverá ficar assim

Se quiseres aprender mais sobre esta configuração e outras opções para configurar um ecrã TFT para a biblioteca TFT_eSPI, dá uma vista de olhos ao tutorial How to configure TFT_eSPI Library for TFT display.
Depois de criada a pasta do projeto com os dois ficheiros, copia o seguinte código de configuração para o ecrã TFT no ficheiro 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 o código do sketch vai no ficheiro 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 compilares e carregares o código, deverás ver a mesma saída de antes:

Semelhante à biblioteca Adafruit_ST7735, o ficheiro tft_setup.h para a Biblioteca TFT_eSPI oferece diferentes inicializadores dependendo do ecrã TFT específico (aba verde, aba preta, …) que estás a usar. Se estiveres a ter problemas com o ecrã (cores erradas, texto corrompido), experimenta um destes primeiro:
//#define ST7735_INITB //#define ST7735_GREENTAB //#define ST7735_GREENTAB2 //#define ST7735_GREENTAB3 //#define ST7735_REDTAB #define ST7735_BLACKTAB
Como antes, a velocidade do SPI é outro parâmetro importante, que também é especificado no ficheiro tft_setup.h:
#define SPI_FREQUENCY 27000000
Experimentei uma frequência comum e mais alta SPI_FREQUENCY de 40000000 mas comecei a ter texto corrompido. A imagem abaixo mostra duas capturas do ecrã TFT. A primeira com uma SPI_FREQUENCY de 27000000 e a segunda com uma frequência de 40000000.

Podes ver claramente que o texto para a frequência SPI mais alta fica corrompido. Por isso, tem cuidado com velocidades elevadas e baixa a frequência SPI se começares a ver texto distorcido.
Finalmente, a Biblioteca TFT_eSPI permite colocar o driver do ecrã e o ecrã em modo de suspensão, além de desligar a luz de fundo:
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
A tabela seguinte mostra o consumo de energia do ecrã TFT com os diferentes componentes ligados ou desligados:
| Luz de Fundo | Ecrã | Driver | Consumo |
|---|---|---|---|
| LIGADO | LIGADO | LIGADO | 15 mA |
| DESLIGADO | LIGADO | LIGADO | 2 mA |
| DESLIGADO | DESLIGADO | LIGADO | 1.5 mA |
| DESLIGADO | DESLIGADO | DESLIGADO | 0.3 mA |
Exibir o texto “Makerguides” com a luz de fundo e tudo o resto ligado consome 15 mA. Mas se desligares tudo (luz de fundo, ecrã, driver), o consumo de energia cai para 0,3 mA! Isto é ótimo para projetos alimentados por bateria.
Conclusões
Neste tutorial aprendeste a ligar um módulo de ecrã TFT com driver ST7735 a um ESP32. Usámos duas bibliotecas diferentes, Adafruit_ST7735 e TFT_eSPI, para desenhar e escrever texto no ecrã TFT.
Se tiveres algum comentário, sente-te à vontade para deixar na secção de comentários.
Boas experiências ; )

