Neste tutorial, vais aprender a interligar e controlar o Display TFT GMT020-02 com um ESP32. O Display GMT020-02 usa o driver IC ST7789, por isso este tutorial também será útil para outros displays TFT com o mesmo driver IC.
O GMT020-02 é um pequeno e agradável display TFT de 2,0″ com resolução de 240×320 pixels e 262K cores, que podes comprar barato no AliExpress. No entanto, a documentação é escassa e por vezes até enganadora, o que torna o uso do display desnecessariamente difícil. Espero que este pequeno tutorial ajude.
Características do Display GMT020-02
O GMT020-02 Versão 1.1 é um módulo de display com interface SPI integrada. A imagem abaixo mostra a frente e o verso do módulo.

Podes encontrá-lo no AliExpress, onde está identificado como usando um driver IC ST7735 e sendo adequado para Arduino.

Driver IC para o Display GMT020-02
Isto é enganador pois a folha de dados indica que o driver IC é um ST7789 e que o módulo funciona a 3,3V. Segundo os esquemas, não há conversor de nível no módulo, o que torna arriscadoligá-lo a um Arduino UNO com lógica a 5V. As folhas de dados do módulo GMT020-02 e do ST7789 estão ligadas abaixo.
Retroiluminação do Display GMT020-02
Também uma palavra sobre a retroiluminação. O módulo GMT020-02 tem retroiluminação, mas infelizmente parece estar ligada diretamente (ver LED+ e LED- nos esquemas abaixo) e, portanto, não pode ser controlada por software. Vais notar que também não há pino BLK ou LED, que permitisse controlar a retroiluminação externamente.

A única forma seria desligar completamente a alimentação do módulo. Mas como o LED da retroiluminação já consome 60mA, não podes fornecer VCC diretamente a partir de uma saída GPIO! Terás de usar um transistor/MOSFET para comutar a alimentação (VCC)!
Interface de comunicação do Display GMT020-02
A propósito, os pinos IM0, IM1 e IM2 nos esquemas acima servem para selecionar a interface de comunicação (SPI ou paralelo de 8 bits). Pela tabela abaixo e pelos esquemas, podes ver que o módulo está fixado para usar SPI:

Ligação do Display GMT020-02 ao ESP32
Ligar o GMT020-02 a um ESP32 é fácil, mas a identificação dos pinos no GMT020-02 é um pouco confusa. Mostra pinos SDA e SCL, mas como usa interface SPI, estes não são os pinos SDA e SCL do I2C!
O seguinte diagrama de ligação mostra como conectar o GMT020-02 a um WEMOS Lolin32 lite:

E aqui, para tua conveniência, as ligações necessárias numa tabela:
| Display | ESP32 |
|---|---|
| CS / SS | 5 |
| RST | 17 |
| DC | 16 |
| SDA / MOSI | 23 |
| SCL / SCLK | 18 |
| GND | GND |
| VCC | 3.3V |
Dependendo do ESP32 e da placa de desenvolvimento que estiveres a usar, estes pinos podem variar. Deves usar os pinos para SPI hardware. Podes encontrá-los selecionando a tua placa na 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 / SCK: ");
Serial.println(SCK);
Serial.print("CS / SS: ");
Serial.println(SS);
}
void loop() { }
Ele imprime os pinos que precisas para SPI hardware. Os restantes pinos podes escolher livremente.
Código de teste para o Display GMT020-02
Vamos usar a Adafruit-ST7735 Library para escrever e desenhar no display GMT020-02. Para a instalar, basta abrir o Library Manager, procurar por “Adafruit-ST7735” e clicar 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 display. Basta compilar e carregar o código seguinte. Ele imprime o texto “Makerguides” no display:
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
// WEMOS LOLIN32 lite
#define TFT_CS 5
#define TFT_RST 17
#define TFT_DC 16
#define TFT_MOSI 23 // SDA, HW MOSI
#define TFT_SCLK 18 // SCL, HW SCLK
// #define TFT_MISO 19 // not used
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); // Hardware SPI
void setup() {
tft.init(240, 320);
tft.setRotation(1);
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(3);
tft.setCursor(50, 100);
tft.println("Makerguides");
}
void loop() {
}
Se ligaste o display aos pinos SPI hardware corretos do teu ESP32, na verdade não precisas de definir TFT_MOSI e TFT_SCLK e podes usar o seguinte construtor (como no código acima):
Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
O SPI hardware é mais rápido, mas se tiveres problemas, podes tentar o SPI por software definindo os teus pinos TFT_MOSI e TFT_SCLK e usando-os no construtor.
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
Em qualquer caso, a saída no display deverá ser a seguinte:

Se isso funcionar, podes então executar o código graphicstest_st7789 que vem com a Adafruit-ST7735 Library. Só certifica-te de selecionar o display correto no código e alterar os pinos conforme a tua ligação:
// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique // to each board and not reassignable. Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); // OPTION 2 lets you interface the display using ANY TWO or THREE PINS, // tradeoff being that performance is not as fast as hardware SPI above. //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
void setup(void) {
Serial.begin(9600);
Serial.print(F("Hello! ST77xx TFT Test"));
// Use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT:
// tft.init(240, 240); // Init ST7789 240x240
// OR use this initializer (uncomment) if using a 1.69" 280x240 TFT:
//tft.init(240, 280); // Init ST7789 280x240
// OR use this initializer (uncomment) if using a 2.0" 320x240 TFT:
tft.init(240, 320); // Init ST7789 320x240
// OR use this initializer (uncomment) if using a 1.14" 240x135 TFT:
//tft.init(135, 240); // Init ST7789 240x135
// OR use this initializer (uncomment) if using a 1.47" 172x320 TFT:
//tft.init(172, 320); // Init ST7789 172x320
// OR use this initializer (uncomment) if using a 1.9" 170x320 TFT:
//tft.init(170, 320); // Init ST7789 170x320
Display GMT020-02 com a biblioteca TFT_eSPI
Se quiseres usar a TFT_eSPI library em vez da Adafruit-ST7735 Library também é possível. Aqui está o ficheiro tft_setup.h com a configuração necessária (novamente para um WEMOS Lolin32 lite):
#define ST7789_DRIVER #define TFT_WIDTH 240 #define TFT_HEIGHT 320 #define TFT_RGB_ORDER TFT_BGR // WEMOS Lolin32 lite #define TFT_CS 5 #define TFT_RST 17 #define TFT_DC 16 #define TFT_MOSI 23 // SDA // HW MOSI #define TFT_SCLK 18 // SCL // HW SCLK // #define TFT_MISO 19 // not used #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 40000000 #define SPI_READ_FREQUENCY 20000000
e aqui está um exemplo de código que, como antes, imprime o texto “Makerguides” no display:
#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(100, 100, 2);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextSize(2);
tft.println("Makerguides");
}
void loop() { }
Lembra-te que o ficheiro tft_setup.h deve fazer parte da pasta do projeto. Se precisares de mais detalhes, dá uma vista de olhos no tutorial How to configure TFT_eSPI Library for TFT display.
Conclusão
Neste tutorial aprendeste a interligar e controlar o Display TFT GMT020-02 com um ESP32.
Para outros displays TFT, dá uma vista de olhos nos tutoriais Interface TFT ILI9341 Touch Display with ESP32,
Interface TFT ST7735 Display with ESP32, Digital Clock on CrowPanel 1.28″ Round Display e CrowPanel 2.8″ ESP32 Display : Easy Setup Guide.
Se tiveres algum comentário, sente-te à vontade para o deixar na secção de comentários.
Boas experiências ; )

