Skip to Content

Interfaz de pantalla GMT020-02 con ESP32

Interfaz de pantalla GMT020-02 con ESP32

En este tutorial aprenderás cómo conectar y controlar la pantalla TFT GMT020-02 con un ESP32. La pantalla GMT020-02 utiliza el controlador ST7789, por lo que este tutorial también será útil para otras pantallas TFT con el mismo controlador.

La GMT020-02 es una pequeña pantalla TFT de 2.0″ con una resolución de 240×320 píxeles y 262K colores que puedes conseguir barata en AliExpress. Sin embargo, la documentación es escasa y a veces incluso confusa, lo que dificulta innecesariamente su uso. Espero que este pequeño tutorial te sea de ayuda.

Características de la pantalla GMT020-02

La GMT020-02 Versión 1.1 es un módulo de pantalla con interfaz SPI integrada. La imagen a continuación muestra el frente y la parte trasera del módulo.

Front and Back of GMT020-02 Vers 1.1 Display
Frontal y trasera de la pantalla GMT020-02 Versión 1.1

Puedes encontrarla en AliExpress, donde está etiquetada como que usa un controlador ST7735 y es compatible con Arduino.

GMT020-02 en AliExpress

Controlador IC para la pantalla GMT020-02

Esto es engañoso ya que la hoja de datos indica que el controlador es un ST7789 y que el módulo funciona a 3.3V. Según el esquema, no hay un convertidor de nivel en el módulo, lo que hace que sea arriesgado conectarlo a un Arduino UNO con lógica de 5V. Las hojas de datos del módulo GMT020-02 y del ST7789 están enlazadas a continuación.

Retroiluminación de la pantalla GMT020-02

También una palabra sobre la retroiluminación. El módulo GMT020-02 tiene retroiluminación pero, desafortunadamente, parece estar cableada directamente (ver LED+ y LED- en el esquema abajo) y por lo tanto no puede controlarse por software. Notarás que tampoco hay un pin BLK o LED que permita controlar la retroiluminación externamente.

Schematics for Backlight LED
Esquema para el LED de retroiluminación (source)

La única forma sería apagar completamente la alimentación del módulo. Pero dado que el LED de retroiluminación ya consume 60mA, ¡no puedes alimentar VCC directamente desde un pin GPIO! Tendrás que usar un transistor/MOSFET para conmutar la alimentación (VCC).

Interfaz de comunicación de la pantalla GMT020-02

Por cierto, los pines IM0, IM1 e IM2 en el esquema anterior son para seleccionar la interfaz de comunicación (SPI o paralelo de 8 bits). Según la tabla y el esquema, el módulo está cableado para usar SPI:

Interface table for GMT020-02
Tabla de interfaces para GMT020-02 (source)

Conexión de la pantalla GMT020-02 con ESP32

Conectar la GMT020-02 a un ESP32 es fácil, pero el etiquetado de los pines en la GMT020-02 es un poco confuso. Muestra pines SDA y SCL, pero como usa interfaz SPI, ¡estos no son los pines SDA y SCL para I2C!

El siguiente diagrama de conexiones muestra cómo conectar la GMT020-02 a un WEMOS Lolin32 lite:

Conexión de GMT020-02 con WEMOS Lolin ESP32 lite

Y aquí, para tu comodidad, las conexiones requeridas en forma de tabla:

PantallaESP32
CS / SS5
RST17
DC16
SDA / MOSI23
SCL / SCLK18
GNDGND
VCC3.3V

Dependiendo del ESP32 y la placa de desarrollo que uses, estos pines pueden variar. Debes usar los pines para SPI hardware. Puedes encontrarlos seleccionando tu placa en el IDE de Arduino y luego ejecutando el código a continuación.

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() { }

Imprime los pines que necesitas para SPI hardware. Los pines restantes puedes elegirlos libremente.

Código de prueba para la pantalla GMT020-02

Vamos a usar la Adafruit-ST7735 Library para escribir y dibujar en la pantalla GMT020-02. Para instalarla, simplemente abre el Library Manager, busca «Adafruit-ST7735» y haz clic en el botón verde INSTALL:

Adafruit-ST7735 in Library Manager
Adafruit-ST7735 en Library Manager

El instalador probablemente te pedirá instalar las dependencias también. Haz clic en INSTALL ALL:

Install the dependencies for Adafruit-ST7735 Library
Instalar dependencias para la librería Adafruit-ST7735

Con la librería instalada, ahora podemos probar la pantalla. Solo compila y sube el siguiente código. Imprime el texto «Makerguides» en la pantalla:

#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() {
}

Si conectaste la pantalla a los pines SPI hardware correctos de tu ESP32, en realidad no necesitas definir TFT_MOSI ni TFT_SCLK y puedes usar el siguiente constructor (como en el código anterior):

Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

SPI hardware es más rápido, pero si tienes problemas, puedes probar SPI por software definiendo tus pines TFT_MOSI y TFT_SCLK y usándolos en el constructor.

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

En cualquier caso, la salida en la pantalla debería verse así:

Output on GMT020-02 display
Salida en la pantalla GMT020-02

Si eso funciona, entonces puedes ejecutar el código graphicstest_st7789 que viene con la Adafruit-ST7735 Library. Solo asegúrate de seleccionar la pantalla correcta en el código y cambiar los pines según tu conexión:

// 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

Pantalla GMT020-02 con la librería TFT_eSPI

Si quieres usar la TFT_eSPI library en lugar de la Adafruit-ST7735 Library también es posible. Aquí está el archivo tft_setup.h con la configuración requerida (de nuevo para un 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

y aquí un ejemplo de código que, como antes, imprime el texto «Makerguides» en la pantalla:

#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() { }

Recuerda que el archivo tft_setup.h debe estar en la carpeta del proyecto. Si necesitas más detalles, echa un vistazo al tutorial How to configure TFT_eSPI Library for TFT display.

Conclusión

En este tutorial aprendiste cómo conectar y controlar la pantalla TFT GMT020-02 con un ESP32.

Para otras pantallas TFT, echa un vistazo a los tutoriales Interface TFT ILI9341 Touch Display with ESP32,
Interface TFT ST7735 Display with ESP32, Digital Clock on CrowPanel 1.28″ Round Display y CrowPanel 2.8″ ESP32 Display : Easy Setup Guide.

Si tienes algún comentario, no dudes en dejarlo en la sección de comentarios.

¡Feliz bricolaje ; )