El Display LCD 16×2 con interfaz I2C es uno de los módulos más utilizados en proyectos con Arduino cuando se necesita mostrar texto, estados del sistema, valores de sensores o menús interactivos.
La interfaz I2C reduce la conexión desde 16 pines a solo 4, lo que lo convierte en una opción eficiente, compacta y altamente confiable para sistemas embebidos educativos y profesionales.
1. ¿Qué es y cómo funciona un LCD 16×2 con I2C?
Un LCD 16×2 puede mostrar 2 filas de 16 caracteres. En su versión original requiere 8–16 pines de control, pero el módulo I2C basado en el expansor PCF8574 permite controlarlo usando solo:
- GND
- VCC
- SDA
- SCL
1.1 Interfaz I2C (PCF8574)
El chip PCF8574 es un expansor de puertos que convierte las señales I2C del Arduino en las señales necesarias para controlar el LCD.
El Arduino solo envía datos por el bus I2C usando una dirección (típicamente 0x27 o 0x3F).
Esto reduce el cableado y permite operar múltiples dispositivos I2C en el mismo bus.
2. Alcances del módulo
- Permite mostrar texto, números y símbolos.
- Excelente para debug sin depender del monitor serial.
- Compatible con casi todas las placas Arduino.
- Tolerante a ruido eléctrico típico de entornos embebidos.
- Permite controlar retroiluminación y contraste.
- Posibilidad de crear caracteres personalizados (p.ej., barras de nivel, flechas, íconos).
- Adecuado para proyectos educativos y prototipos avanzados.
3. Limitaciones
- Solo permite mostrar caracteres, no gráficos complejos.
- Requiere ajustar contraste mediante potenciómetro físico.
- La velocidad del I2C puede causar un ligero retardo en actualizaciones rápidas.
- Tiene un ángulo de visión limitado comparado con pantallas OLED.
- Requiere librería adicional (LiquidCrystal_I2C o equivalente).
4. Pinout y conexión correcta
| Pin | Función | Conexión en Arduino |
|---|---|---|
| GND | Tierra | GND |
| VCC | Alimentación | 5V |
| SDA | Línea de datos I2C | A4 en Arduino UNO |
| SCL | Línea de reloj I2C | A5 en Arduino UNO |
En Arduino MEGA: SDA = 20, SCL = 21
En Arduino Leonardo: SDA = 2, SCL = 3
5. Código básico de prueba
Usaremos la librería:
LiquidCrystal_I2C by Frank de Brabander
Ejemplo simple
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Dirección I2C del módulo (0x27 o 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init(); // Inicializa LCD
lcd.backlight(); // Activa luz de fondo
lcd.setCursor(0, 0);
lcd.print("Hola mundo!");
lcd.setCursor(0, 1);
lcd.print("LCD I2C listo");
}
void loop() {
}
Si no muestra nada, cambiar la dirección I2C a 0x3F.
6. Crear caracteres personalizados
byte barra[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
void setup() {
lcd.init();
lcd.backlight();
lcd.createChar(0, barra);
lcd.setCursor(0,0);
lcd.write(byte(0));
}
7. Tres aplicaciones reales del módulo con Arduino
1. Estación ambiental
Muestra temperatura, humedad, luz y estado del sistema en tiempo real sin depender de un computador.
2. Menús interactivos
Ideal para seleccionar opciones en una incubadora, sistema de riego o un robot mediante botones o encoder.
3. Monitor de procesos
En proyectos industriales o académicos permite visualizar valores de sensores, alarmas o tiempos de ciclo.
8. Fuentes de consulta recomendadas
- Documentación oficial del expansor PCF8574
NXP Semiconductors — PCF8574 Datasheet - Referencia del bus I2C
Arduino Docs → sección Wire - Librería LiquidCrystal_I2C
Repositorios: GitHub →johnrickman/LiquidCrystal_I2C
yfmalpartida/New-LiquidCrystal
9. Prompt para que el lector genere su propio código con IA
Puedes sugerir este prompt en tu blog:
Estoy usando un Display LCD 16x2 con módulo I2C en Arduino.
Mi LCD utiliza la dirección I2C [0x27 o 0x3F] y quiero un programa que haga lo siguiente:
1. Mostrar un mensaje inicial durante 2 segundos.
2. Actualizar datos en pantalla cada [valor] milisegundos.
3. Mostrar variables como: [lista de variables].
4. Incluir funciones separadas para limpiar pantalla y actualizar texto.
5. Opcional: crear caracteres personalizados.
Genera el código bien estructurado, con comentarios y compatible con mi placa Arduino [modelo].
