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

Cable USB de datos

Juego de cables Dupont

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:

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:

Y aquí, para tu comodidad, las conexiones requeridas en forma de tabla:
| Pantalla | ESP32 |
|---|---|
| CS / SS | 5 |
| RST | 16 |
| DC | 17 |
| SDA / MOSI | 23 |
| SCL / SCLK | 18 |
| BKL/BL | 22 |
| GND | GND |
| VCC | 3.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:

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

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:

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:

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í:

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í

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:

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.

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 fondo | Pantalla | Controlador | Consumo |
|---|---|---|---|
| ENCENDIDO | ENCENDIDO | ENCENDIDO | 15 mA |
| APAGADO | ENCENDIDO | ENCENDIDO | 2 mA |
| APAGADO | APAGADO | ENCENDIDO | 1.5 mA |
| APAGADO | APAGADO | APAGADO | 0.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 ; )

