Pantalla LCD 16x2 con Módulo I2C: Guía de Conexión y Programación con Arduino
La pantalla LCD 16×2 con módulo I2C (PCF8574) es la forma más fácil de añadir salida de texto a proyectos Arduino. Reduce conexiones de 6+ pines (paralelo) a 2 pines (SDA, SCL) más alimentación. Muestra 16 caracteres × 2 líneas. Controlador: HD44780 compatible. Voltaje: 5 V (algunos 3,3 V). Corriente: ~10–20 mA (backlight encendido). Dirección I²C típica: 0x27 o 0x3F (verifica con escáner). Contraste ajustable por potenciómetro azul en módulo trasero.
Pinout (Módulo I2C trasero del LCD)
| Pin | Nombre | Función |
|---|---|---|
| 1 | GND | Tierra |
| 2 | VCC | Alimentación 5 V |
| 3 | SDA | Datos I²C (Arduino Uno: A4) |
| 4 | SCL | Reloj I²C (Arduino Uno: A5) |
Conexión con Arduino Uno / Nano
LCD I2C Arduino Uno / Nano GND ──────── GND VCC ──────── 5V SDA ──────── A4 SCL ──────── A5
En Arduino Mega: SDA=20, SCL=21. En ESP8266: SDA=D2 (GPIO4), SCL=D1 (GPIO5). En ESP32: SDA=21, SCL=22 (por defecto; configurables).
Escáner I²C — Encontrar Dirección
Sube este sketch para detectar dirección real de tu módulo:
#include
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("Escaneando bus I2C...");
}
void loop() {
byte count = 0;
for (byte i = 8; i < 120; i++) {
Wire.beginTransmission(i);
if (Wire.endTransmission() == 0) {
Serial.print("Dispositivo en 0x");
if (i < 16) Serial.print("0");
Serial.println(i, HEX);
count++;
}
}
if (count == 0) Serial.println("Ninguno");
delay(5000);
}
Direcciones comunes: 0x27 (PCF8574T) o 0x3F (PCF8574AT). Usa la que detecte.
Librería Recomendada
LiquidCrystal_I2C (por Frank de Brabander / Mario H. / DFRobot). Instala desde Gestor de Librerías buscando "LiquidCrystal I2C". Versión popular: LiquidCrystal_I2C.h con constructor LiquidCrystal_I2C lcd(0x27, 16, 2);.
Código Básico: Hola Mundo
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2); // Cambia 0x27 por tu dirección
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Hola Mundo!");
lcd.setCursor(0, 1);
lcd.print("LCD I2C 16x2");
}
void loop() {
// Ejemplo: contador segundos
lcd.setCursor(0, 1);
lcd.print("Seg: ");
lcd.print(millis() / 1000);
lcd.print(" "); // Limpia residuos
delay(1000);
}
Funciones Principales
lcd.init()/lcd.begin()— Inicializalcd.backlight()/lcd.noBacklight()— Encender/apagar retroiluminaciónlcd.setCursor(col, fila)— Posición (0-15, 0-1)lcd.print(valor)— Escribe texto/númeroslcd.clear()— Limpia pantallalcd.home()— Cursor a (0,0)lcd.createChar(num, array[])— Crea carácter personalizado (0-7)lcd.scrollDisplayLeft/Right()— Desplaza textolcd.autoscroll()/noAutoscroll()
Ejemplo: Caracteres Personalizados (Iconos)
byte corazon[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
void setup() {
lcd.init();
lcd.backlight();
lcd.createChar(0, corazon);
lcd.setCursor(7, 0);
lcd.write(0); // Escribe char 0 (corazón)
lcd.print(" Arduino ");
lcd.setCursor(7, 1);
lcd.write(0);
}
Proyecto: Monitor Temp/Humedad (DHT22 + LCD I2C)
#include
#include
#include
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
dht.begin();
lcd.print("Iniciando...");
delay(2000);
lcd.clear();
}
void loop() {
delay(2500);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
lcd.setCursor(0,0);
lcd.print("Error DHT22");
return;
}
lcd.setCursor(0, 0);
lcd.print("T: ");
lcd.print(t, 1);
lcd.print((char)223); // Símbolo °
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("H: ");
lcd.print(h, 1);
lcd.print("%");
}
Solución de Problemas Comunes
- Pantalla en blanco / cuadros negros: Ajusta potenciómetro contraste (trasero). Verifica VCC/GND/SDA/SCL. Dirección I²C correcta.
- Parpadea / basura: Pull-ups I²C faltantes (Arduino Uno tiene internas débiles; añade 4,7 kΩ SDA-5V, SCL-5V si falla). Cableado largo → reduce longitud / usa blindado.
- No detecta dispositivo: Revisa soldaduras módulo I2C tras LCD. Prueba otro módulo.
- Solo primera línea:
lcd.begin(16, 2)en setup (algunas librerías lo requieren). - Backlight no apaga: Algunas placas no cortan backlight por hardware;
noBacklight()solo manda comando.
Conclusión
La LCD 16×2 I²C es pantalla ideal para principiantes: 4 cables, librería simple, bajo coste. Combínala con sensores (DHT22, DS18B20, BMP280, RTC) para mostrar datos en tiempo real. Ajusta contraste, verifica dirección I²C y usa createChar para iconos. ¡Proyectos con interfaz visual al instante!
Tecnología Industrial
- Cómo los generadores industriales mantienen su instalación funcionando durante cortes de energía
- Domina los encoders rotativos con Arduino: Funcionamiento e integración paso a paso
- Sensor de Movimiento PIR: Principios de Funcionamiento e Integración con Arduino
- Cómo Funcionan los Coches Eléctricos: Guía Completa 2024
- Corte por Plasma Explicado: Funcionamiento y Beneficios Clave
- Rectificado Electroquímico Explicado: Cómo Funciona y Beneficios Clave
- Automatización industrial explicada: Tipos, funcionamiento y beneficios clave
- Entendiendo el Ransomware: Cómo funciona y por qué importa
- PCB LED Starboard: Diseño, Función y Beneficios en Disipación de Calor
- Temporizador DIY Explicado: Diseño, Función y Usos Prácticos
- Microcontroladores PIC18: Características, Rendimiento y Cómo Usarlos