Display LCD 16×2 con Módulo I2C (PCF8574)

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

PinFunciónConexión en Arduino
GNDTierraGND
VCCAlimentación5V
SDALínea de datos I2CA4 en Arduino UNO
SCLLínea de reloj I2CA5 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

  1. Documentación oficial del expansor PCF8574
    NXP Semiconductors — PCF8574 Datasheet
  2. Referencia del bus I2C
    Arduino Docs → sección Wire
  3. Librería LiquidCrystal_I2C
    Repositorios: GitHub → johnrickman/LiquidCrystal_I2C
    y fmalpartida/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].

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio