Con un display tu proyecto muestra una temperatura, un menú o el estado de una máquina sin conectarlo a un computador. En Arduino y ESP32 se usan casi siempre cuatro familias: LCD de caracteres, OLED monocromo, TFT a color y e-paper. Cambian en lo que dibujan, en los pines que ocupan, en la memoria que piden y en lo que consumen. Esta guía las compara y trae código base para dos de ellas. Nuestro catálogo de Display se centra en pantallas gráficas de 128x64; si buscas un LCD 16x2, un TFT o un e-paper, consúltanos.
LCD de caracteres 16x2 y 20x4
El LCD de caracteres usa el controlador HD44780 y muestra texto en una grilla fija de 16 columnas por 2 filas, o de 20 por 4. Trabaja a 5 V y necesita luz de fondo (retroiluminación) para leerse en la oscuridad. Sin adaptador ocupa unos 6 pines de datos y control. Casi todos los módulos que se venden traen soldado un adaptador I2C con un chip PCF8574, y con él bastan cuatro cables: VCC, GND, SDA y SCL. Sirve para mostrar un valor y un texto corto con el mínimo de cableado. No dibuja gráficos, salvo ocho caracteres que puedes definir tú.
OLED monocromo de 128x64
Un OLED no lleva luz de fondo porque cada píxel emite su propia luz. Por eso tiene alto contraste y se lee desde cualquier ángulo. El módulo más común mide 0,96 pulgadas, tiene 128x64 píxeles, usa el controlador SSD1306 y se conecta por I2C con cuatro cables; también hay versiones SPI. Dibuja texto de cualquier tamaño, líneas, barras y mapas de bits. En un Arduino Uno, la librería de Adafruit reserva 1 KB de los 2 KB de RAM para el buffer de pantalla, y U8g2 en modo de página ocupa menos. Los píxeles que pasan horas encendidos se desgastan antes que el resto, así que conviene apagar la pantalla o mover la imagen cuando el contenido no cambia.
TFT a color
Los TFT de 1,8 a 3,5 pulgadas (controladores ST7735, ILI9341 y similares) muestran color y gráficos a velocidad de animación. Se conectan por SPI y ocupan pines extra para reloj, datos, selección, reset y comando; muchos traen además lector de tarjeta SD y panel táctil. Su lógica es de 3,3 V, así que con un Arduino Uno de 5 V necesitas un módulo con adaptador de nivel o resistencias divisoras. Un ESP32 los maneja sin problema con la librería TFT_eSPI. Piden más memoria y más cálculo que un OLED, y la luz de fondo sube bastante el consumo.
Pantalla e-paper
El e-paper (o e-ink) conserva la imagen sin energía. Solo consume al refrescar, y un refresco completo tarda un par de segundos. Se conecta por SPI y la librería habitual es GxEPD2. Funciona bien en etiquetas, indicadores de estado y paneles a batería que cambian cada varios minutos. Para animaciones o un valor que cambia cada segundo, elige otra pantalla. Muchos sensores que deben durar años con una pila usan e-paper por esa razón.
Cuál elegir según tu proyecto
Para una lectura y un texto corto, con el menor costo y cableado, un LCD 16x2 con I2C. Para gráficos simples, íconos o texto pequeño en poco espacio, un OLED 128x64. Para una interfaz con color, botones dibujados o fotos, un TFT, mejor con ESP32 que con Uno. Para algo a batería que cambia poco, e-paper. Si la pantalla debe leerse a pleno sol, el e-paper y los LCD reflectivos se ven mejor que un OLED. Si necesitas tocar la pantalla para elegir opciones, busca un TFT con panel táctil o una pantalla HMI con procesador propio. Con ESP32, el OLED es lo más directo: trabaja a 3,3 V y no necesita adaptador de nivel.
Qué pantallas encuentras en Zamper
En la categoría Display tenemos la Pantalla OLED 128x64, que funciona de 3 a 5 V, y la Pantalla LCD 128x64; antes de comprar la LCD, confirma con nosotros su controlador y su interfaz. Para LCD 16x2, TFT o e-paper, consúltanos. Antes de programar cualquier módulo, mira la serigrafía de la placa. Si ves SDA y SCL, es I2C; si ves MOSI, CLK, DC y CS, es SPI. El controlador define la librería, y para un LCD gráfico de 128x64 la opción habitual es U8g2. Si prefieres una pantalla ya integrada, el Milesight AM103 trae una pantalla E-Ink y el TS301 una pantalla LCD; los dos son sensores LoRaWAN que muestran sus propias lecturas.
Cómo conectar un LCD 16x2 I2C a Arduino
En un Arduino Uno, conecta VCC a 5 V, GND a GND, SDA al pin A4 y SCL al pin A5. En un ESP32 DevKit clásico (ESP32-WROOM-32), SDA va al GPIO 21 y SCL al GPIO 22, los pines I2C por defecto; en las variantes S3 y C3 son otros, así que revisa el pinout de tu placa. El módulo se alimenta con 5 V desde VIN, y la placa entrega 5 V ahí solo si está conectada por USB. Entre el módulo y el ESP32 pon un adaptador de nivel I2C bidireccional (tipo BSS138): el adaptador del LCD trae resistencias pull-up a 5 V y los pines del ESP32 no toleran 5 V. La dirección depende del chip del adaptador: 0x27 si usa PCF8574 y 0x3F si usa PCF8574A (direcciones por defecto, con los puentes A0-A2 sin soldar). Si la pantalla enciende y no muestra letras, gira el potenciómetro azul de la parte trasera para ajustar el contraste y comprueba la dirección con un escáner I2C. Instala la librería LiquidCrystal_I2C desde el gestor de librerías.
Código para el LCD 16x2 con I2C
Este sketch muestra un texto fijo en la primera fila y un contador de segundos en la segunda. Cambia 0x27 por 0x3F si tu escáner I2C encuentra esa dirección. Para un LCD de 20x4, cambia los parámetros a (0x27, 20, 4).
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // dirección, columnas, filas
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Hola Zamper");
}
void loop() {
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
lcd.print(" s "); // los espacios borran dígitos viejos
delay(500);
}Cómo conectar un OLED 0,96" I2C
Usa los mismos cuatro cables que en el LCD (VCC, GND, SDA y SCL) y los mismos pines en Uno y en ESP32. La dirección I2C habitual del SSD1306 es 0x3C, y algunos módulos usan 0x3D. Muchos módulos de 0,96 pulgadas aceptan de 3,3 a 5 V; confírmalo en la ficha del tuyo. Instala Adafruit_SSD1306 y Adafruit_GFX desde el gestor de librerías. U8g2 sirve como alternativa y soporta muchos más controladores, entre ellos los LCD gráficos de 128x64.
Código para el OLED SSD1306
Este sketch inicializa la pantalla, escribe un texto en tamaño 2 y dibuja un rectángulo. Si la pantalla queda en blanco, revisa la dirección y que el controlador sea SSD1306.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1); // -1: sin pin de reset
void setup() {
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
for (;;); // no responde: revisa cableado y dirección
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Zamper");
display.drawRect(0, 24, 128, 20, SSD1306_WHITE);
display.display(); // sin esta línea no se ve nada
}
void loop() {}Errores comunes con displays
Si la pantalla enciende y no muestra nada, en un LCD ajusta el contraste y en un OLED revisa la dirección I2C. Si el escáner no encuentra ningún dispositivo, revisa que SDA y SCL no estén invertidos y que el módulo reciba alimentación. Si en un OLED no aparece lo que dibujaste, te faltó llamar a display.display(). Si un LCD muestra caracteres cortados o raros con la dirección correcta, ajusta el contraste o prueba con otra fuente: un USB débil hace caer la alimentación. Con señales de 5 V puedes dañar un TFT, porque su lógica es de 3,3 V y necesita adaptación de nivel. Si dos módulos I2C del mismo bus tienen la misma dirección, cambia una con los puentes de soldadura del módulo o usa otro bus.
¿Puedo usar un LCD de 5 V con un ESP32?
Sí, con un adaptador de nivel. El adaptador I2C del LCD lleva resistencias pull-up hacia su alimentación; a 5 V deja SDA y SCL en 5 V, y los pines del ESP32 aguantan 3,3 V. Pon un adaptador de nivel I2C bidireccional entre los dos.
¿Cuántos pines necesito para un display I2C?
Dos de datos, SDA y SCL, más alimentación y tierra. En el mismo bus puedes conectar varios dispositivos si cada uno tiene una dirección distinta.
¿Qué display consume menos?
El e-paper, porque solo gasta energía al refrescar. Entre los demás, un OLED con poco contenido encendido suele gastar menos que un LCD con luz de fondo.
¿Cómo escribo tildes o ñ en un display?
Los LCD HD44780 traen un set limitado de caracteres, así que tendrás que definir esas letras como caracteres personalizados. En un OLED con Adafruit_GFX puedes cargar fuentes que las incluyan, o usar U8g2, que trae fuentes con caracteres latinos.
Fuentes técnicas
- Adafruit: monochrome OLED breakouts (SSD1306) (abre en otra pestaña)
- U8g2: librería gráfica para displays monocromos (abre en otra pestaña)
- LiquidCrystal_I2C: librería para LCD con adaptador I2C (abre en otra pestaña)
- TFT_eSPI: librería para pantallas TFT con ESP32 (abre en otra pestaña)
- GxEPD2: librería para pantallas e-paper (abre en otra pestaña)
- Arduino: referencia de la librería Wire (I2C) (abre en otra pestaña)