Skip to Content

Interface do Display GMT020-02 com ESP32

Interface do Display GMT020-02 com ESP32

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.

Front and Back of GMT020-02 Vers 1.1 Display
Frente e verso do Display GMT020-02 Versão 1.1

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

GMT020-02 no AliExpress

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.

Schematics for Backlight LED
Esquemas para o LED de retroiluminação (source)

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:

Interface table for GMT020-02
Tabela de interface para GMT020-02 (source)

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:

Ligação do GMT020-02 ao WEMOS Lolin ESP32 lite

E aqui, para tua conveniência, as ligações necessárias numa tabela:

DisplayESP32
CS / SS5
RST17
DC16
SDA / MOSI23
SCL / SCLK18
GNDGND
VCC3.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:

Adafruit-ST7735 in Library Manager
Adafruit-ST7735 no Library Manager

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

Install the dependencies for Adafruit-ST7735 Library
Instalar dependências para a biblioteca Adafruit-ST7735

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:

Output on GMT020-02 display
Saída no display GMT020-02

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 ; )