Skip to Content

Interface do Display TFT ST7789 com ESP32

Interface do Display TFT ST7789 com ESP32

Neste tutorial, vais aprender a ligar um módulo de ecrã TFT de 1,3″ 240×240 com um driver de ecrã ST7789 a um ESP32 (WEMOS Lolin32 lite).

As instruções e o código funcionam com algumas pequenas alterações para outros ESP32 e TFT, desde que o ecrã utilize o driver ST7789.

Peças Necessárias

Vais precisar de um ESP32 e de um ecrã TFT de 1,3 polegadas com resolução de 240×240 pixels e um driver ST7789. Alguns cabos e uma breadboard também podem ser úteis.

Ecrã TFT ST7789 de 1,3″

ESP32 lite Lolin32

ESP32 lite

USB data cable

Cabo USB de Dados

Dupont wire set

Conjunto de Fios 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.

Módulo de Ecrã TFT ST7789 de 1,3″

O módulo de ecrã TFT de 1,3″ que vamos usar tem uma resolução de 240×240 pixels com 65K cores RGB. A imagem abaixo mostra a frente e o verso do módulo de ecrã:

Front and Back of 1.3" TFT ST7789  Display Module
Frente e verso do módulo de ecrã TFT ST7789 de 1,3″ (source
)

O módulo usa o chip driver ST7789 e é controlado via interface SPI de 4 fios. A tensão de operação é 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.

Alguns módulos de ecrã TFT têm um conversor logic level que permite ligar o módulo a um Arduino UNO 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 opera com lógica CMOS a 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, IC 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 driver ST7735S em vez do ST7789. A configuração deste tutorial é para ecrãs com o driver ST7789 e não funcionará com outros.

Ligação do Ecrã TFT ST7735 de 1,8″ ao ESP32

Ligar o ecrã TFT ao ESP32 é simples, mas a identificação dos pinos no ecrã é um pouco confusa. Mostra pinos SDA e SCL, mas como tem interface SPI, esses pinos deveriam estar identificados como MOSI e SCLK.

O diagrama de ligação seguinte mostra como ligar o módulo de ecrã TFT ST7789 de 1,3″ a um WEMOS Lolin32 lite:

Connecting TFT ST7789 Display with WEMOS Lolin ESP32 lite
Ligação do ecrã TFT ST7789 ao WEMOS Lolin ESP32 lite

Aqui estão as ligações necessárias em formato de tabela. Note que este módulo de ecrã não tem chip select (CS), portanto não é necessário um pino para isso.

EcrãESP32
RST16
DC17
SDA / MOSI23
SCL / SCLK18
BKL/BL22
GNDGND
VCC3.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 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() { }

Este código imprime os pinos necessários 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 TFT_eSPI

Nesta secção, mostro como usar a TFT_eSPI library para controlar o ecrã. Para instalar esta biblioteca, abre o Library Manager, procura por “TFT_eSPI” e clica em “INSTALL”. Após a instalação, deverá ficar assim:

TFT_eSPI library in Library Manager
Biblioteca TFT_eSPI no Library Manager

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

Project Folder Structure
tft_test

Se quiseres aprender mais sobre esta configuração e outras opções para configurar um ecrã TFT com a biblioteca TFT_eSPI, dá uma vista de olhos ao tutorial How to configure TFT_eSPI Library for TFT display.

Depois de criar 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:

// 1.3" TFT Display (GMT130 V.10), 
// no CS pin
// 240x240, ST7789
// tft_setup.h
#define ST7789_DRIVER

#define TFT_WIDTH  240
#define TFT_HEIGHT 240

#define TFT_RGB_ORDER TFT_BGR

#define TFT_CS    -1   
#define TFT_RST   16  
#define TFT_DC    17  
#define TFT_MOSI  23  // SDA // HW MOSI
#define TFT_SCLK  18  // SCL // HW SCL
#define TFT_MISO  19  // not used
#define TFT_BL    22  // LED back-light
#define TFT_BACKLIGHT_ON HIGH


#define LOAD_GLCD   
#define LOAD_FONT2  
#define LOAD_FONT4  
#define LOAD_FONT6  
#define LOAD_FONT7  
#define LOAD_FONT8  
#define LOAD_GFXFF
#define SMOOTH_FONT 

#define SPI_FREQUENCY  27000000
#define SPI_READ_FREQUENCY  20000000
#define SPI_TOUCH_FREQUENCY  2500000

e o código do sketch vai para o ficheiro tft_test.ino:

// tft_test.ino
#include "tft_setup.h"
#include"TFT_eSPI.h"

TFT_eSPI tft = TFT_eSPI();

const int cw = tft.width()/2;
const int ch = tft.height()/2;
const int s = min(cw/4,ch/4);

void setup(void) {  
  tft.init();
  tft.fillScreen(TFT_BLACK);  
  tft.setRotation(1);

  tft.setTextFont(1);
  tft.setTextSize(2);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextDatum(CC_DATUM);
  tft.drawString("Makerguides", ch, cw+s);

  tft.fillCircle(ch, cw/2+s/2, s/2, TFT_RED);
  tft.fillRect(1.5*ch-s, cw/2, s, s, TFT_GREEN);
  tft.fillTriangle(ch/2, cw/2, ch/2+s, cw/2, ch/2, cw/2+s, TFT_BLUE);
}

void loop() { }

Note que tft_setup.h está incluído no topo do programa. O código em si é fácil de entender. Criamos um objeto TFT_eSPI e constantes para o centro (cw, ch) e o tamanho s dos objetos a desenhar.

Na função setup inicializamos o ecrã TFT, preenchemos o ecrã com preto e rodamos para modo retrato.

De seguida, definimos a fonte, o seu tamanho, cor e alinhamento, e escrevemos o texto “Makerguides” no ecrã. Nas três linhas seguintes desenhamos o círculo vermelho, o quadrado verde e o triângulo azul. A saída no teu ecrã TFT deverá ser semelhante a esta:

Saída do código de teste no TFT

Se não for, então algo está errado nas configurações em tft_test.ino ou na ligação do ecrã TFT. Dá uma vista de olhos ao tutorial How to configure TFT_eSPI Library for TFT display para ver outras configurações disponíveis e o que podes tentar para resolver o problema.

Conclusões

Neste tutorial aprendeste a ligar um módulo de ecrã TFT com driver ST7789 a um ESP32.

Usei a TFT_eSPI Library para controlar o ecrã. Também tentei a Adafruit-ST7735 Library mas não consegui fazê-la funcionar. Outros relataram o mesmo problema e tiveram sucesso com a ST7789_AVR library. No entanto, a ST7789_AVR library funciona apenas com placas AVR, mas não com um ESP32, por exemplo.

Se tiveres dificuldades com a biblioteca TFT_eSPI, o nosso How to configure TFT_eSPI Library for TFT display pode ajudar.

Se tiveres algum comentário, sente-te à vontade para deixar na secção de comentários.

Boas experiências a criar ; )