Skip to Content

Interfaz de pantalla TFT ST7735 con ESP32

Interfaz de pantalla TFT ST7735 con ESP32

En este tutorial aprenderás cómo conectar un módulo de pantalla TFT de 1.8″ 128×160 con un controlador ST7735 a un ESP32 (WEMOS Lolin32 lite).

Las instrucciones y el código funcionarán con algunos cambios menores para otros ESP32 y TFT, siempre que la pantalla use el controlador ST7735.

Partes necesarias

Necesitarás un ESP32 y una pantalla TFT de 1.8 pulgadas con resolución de 128×160 píxeles y un controlador ST7735. También pueden ser útiles algunos cables y una protoboard.

Pantalla TFT ST7735 de 1.8″

ESP32 lite Lolin32

ESP32 lite

USB data cable

Cable USB de datos

Dupont wire set

Juego de cables Dupont

Half_breadboard56a

Protoboard

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 pantalla TFT ST7735 de 1.8″

El módulo de pantalla TFT de 1.8″ que usaremos tiene una resolución de 128×160 píxeles con 65K colores RGB. La imagen a continuación muestra el frente y la parte trasera del módulo:

Front and Back of 1.8" TFT ST7735 Display Module
Frontal y trasera del módulo de pantalla TFT ST7735 de 1.8″ (source)

El módulo usa el chip controlador ST7735S y se controla mediante una interfaz SPI de 4 hilos. El voltaje de operación es 3.3V y la pantalla consume alrededor de 30mA como máximo.

Ten en cuenta que existen muchas versiones diferentes de este tipo de pantalla TFT. Algunas tienen un SD card adicional o un touch display.

Lo más importante es que algunas tienen un convertidor logic level que permite conectar el módulo a un Arduino que funciona a 5V. Este módulo no lo tiene, lo que significa que no puedes conectarlo directamente a un Arduino. Por eso usamos un ESP32 que opera con lógica CMOS de 3.3V.

Si quieres usar un Arduino, necesitas convertir los niveles lógicos. Hay varias formas de hacerlo (divisor de voltaje, optoacoplador, IC de cambio de nivel), pero lo más sencillo es conseguir un level shifting module.

Finalmente, hay pantallas similares que usan el controlador ST7789 en lugar del ST7735S. El código de este tutorial es para pantallas con el controlador ST7735S y no funcionará con otros.

Conexión de la pantalla TFT ST7735 de 1.8″ con ESP32

Conectar la pantalla TFT a un ESP32 es fácil, pero el etiquetado de los pines en la pantalla puede ser confuso. Muestra pines SDA y SCL, pero como tiene interfaz SPI, estos no son los pines SDA y SCL para I2C. En cambio, SDA corresponde a MOSI y SCL a SCLK para SPI.

El siguiente diagrama de conexiones muestra cómo conectar la pantalla TFT ST7735 de 1.8″ a un WEMOS Lolin32 lite:

Conexión de la pantalla TFT ST7735 con WEMOS Lolin ESP32 lite

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

PantallaESP32
CS / SS5
RST16
DC17
SDA / MOSI23
SCL / SCLK18
BKL/BL22
GNDGND
VCC3.3V

Asegúrate de conectar VCC de la pantalla a 3.3V. También deberías usar los pines hardware SPI para MOSI y SCLK. Dependiendo del microcontrolador, los pines hardware SPI varían. Puedes encontrarlos seleccionando tu placa en el Arduino IDE y 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 / SCLK: ");
  Serial.println(SCK);
  Serial.print("CS / SS: ");
  Serial.println(SS);  
}

void loop() { }

Este código imprime los pines que necesitas para hardware SPI, específicamente MOSI y SCLK. Los demás pines puedes elegirlos libremente y MISO no se usa.

Código para pantalla TFT ST7735 con la librería Adafruit_ST7735

En esta sección usaremos la Adafruit-ST7735 Library para escribir y dibujar en la pantalla TFT ST7735 de 1.8″. Para instalarla, 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» con un marco amarillo en la pantalla:

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

Si usas hardware SPI no necesitarás definir los pines para TFT_MOSI y TFT_SCLK. Sin embargo, si usas software SPI sí los necesitarás y deberás pasarlos al otro constructor del objeto tft:

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

Si compilas y subes el código, deberías ver la siguiente salida en tu pantalla:

Output on TFT with Adafruit_ST7735 Library
Salida en TFT con la librería Adafruit_ST7735

Si no ves nada, los colores están mal o el texto muestra artefactos, prueba uno de los otros inicializadores para la pantalla TFT en el código:

  //tft.initB();
  tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
  //tft.initR(INITR_GREENTAB); // Init ST7735S chip, green tab

La pestaña negra y la pestaña verde se refieren a las pestañas de color que suelen venir pegadas en el protector de pantalla de estas pantallas. Por ejemplo, la imagen a continuación muestra una pantalla TFT con pestaña verde:

Pantalla TFT con pestaña verde (source)

El color de la pestaña es importante porque suele indicar el tipo de controlador de pantalla usado. La Pestaña verde es típicamente para controladores más nuevos o alternativos como ILI9341, ST7735 u otros modelos específicos. La Pestaña negra indica un controlador más antiguo o diferente, como ST7735R o variantes similares, que tienen especificaciones ligeramente distintas.

Finalmente, puedes intentar reducir la velocidad SPI si el texto en la pantalla se ve corrupto:

 tft.setSPISpeed(27000000);

Por cierto, si quieres encender o apagar la luz de fondo de la pantalla, puedes usar el siguiente código:

pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, LOW);  

Código para pantalla TFT ST7735 con la librería TFT_eSPI

En esta sección usaremos la TFT_eSPI library en lugar de la librería Adafruit_ST7735 para controlar la pantalla. Para instalarla, abre el Library Manager, busca «TFT_eSPI» y presiona «INSTALL». Después de la instalación debería verse así:

TFT_eSPI library in Library Manager
Librería TFT_eSPI en Library Manager

Luego necesitamos crear la estructura correcta de carpetas para el proyecto. Abre tu Arduino IDE y crea un proyecto llamado «tft_test» y guárdalo (Guardar como…). Esto creará una carpeta «tft_test» con el archivo «tft_test.ino» dentro. En esta carpeta crea otro archivo llamado «tft_setup.h«. Tu carpeta de proyecto debería verse así

Project Folder Structure
tft_test

Si quieres aprender más sobre esta configuración y otras opciones para configurar una pantalla TFT con la librería TFT_eSPI, echa un vistazo al tutorial How to configure TFT_eSPI Library for TFT display.

Después de crear la carpeta del proyecto con los dos archivos, copia el siguiente código de configuración para la pantalla TFT en el archivo 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

y el código del sketch en el archivo 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() { }

Si compilas y subes el código deberías ver la misma salida que antes:

Output on TFT with TFT_eSPI Library
Salida en TFT con la librería TFT_eSPI

Similar a la librería Adafruit_ST7735, el archivo tft_setup.h para la librería TFT_eSPI ofrece diferentes inicializadores según la pantalla TFT específica (pestaña verde, pestaña negra, …) que estés usando. Si tienes problemas con la pantalla (colores incorrectos, texto corrupto), prueba primero uno de esos:

//#define ST7735_INITB
//#define ST7735_GREENTAB
//#define ST7735_GREENTAB2
//#define ST7735_GREENTAB3
//#define ST7735_REDTAB
#define ST7735_BLACKTAB

Como antes, la velocidad SPI es otro parámetro importante, que también se especifica en el archivo tft_setup.h:

#define SPI_FREQUENCY  27000000

Probé una frecuencia común y alta SPI_FREQUENCY de 40000000 pero el texto empezó a corromperse. La imagen a continuación muestra dos capturas de pantalla de la pantalla TFT. La primera con una SPI_FREQUENCY de 27000000 y la segunda con una frecuencia de 40000000.

TFT text output with different SPI frequencies
Salida de texto en TFT con diferentes frecuencias SPI

Se puede ver claramente que el texto con la frecuencia SPI más alta se corrompe. Así que ten cuidado con velocidades altas y baja la frecuencia SPI si empiezas a ver texto distorsionado.

Finalmente, la librería TFT_eSPI permite poner el controlador y la pantalla en modo de suspensión, además de apagar la luz de fondo:

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  

La siguiente tabla muestra el consumo de energía de la pantalla TFT con los diferentes componentes encendidos o apagados:

Luz de fondoPantallaControladorConsumo
ENCENDIDOENCENDIDOENCENDIDO15 mA
APAGADOENCENDIDOENCENDIDO2 mA
APAGADOAPAGADOENCENDIDO1.5 mA
APAGADOAPAGADOAPAGADO0.3 mA

Mostrar el texto «Makerguides» con la luz de fondo y todo lo demás encendido consume 15 mA. Pero si apagas todo (luz de fondo, pantalla, controlador) el consumo baja a 0.3 mA. ¡Esto es genial para proyectos alimentados con batería.

Conclusiones

En este tutorial aprendiste cómo conectar un módulo de pantalla TFT con controlador ST7735 a un ESP32. Usamos dos librerías diferentes, Adafruit_ST7735 y TFT_eSPI, para dibujar y escribir texto en la pantalla TFT.

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

¡Feliz bricolaje ; )