Cómo Conectar una Pantalla LCD I2C al ESP32

Cómo Conectar una Pantalla LCD I2C al ESP32

Conectar una pantalla a tu ESP32 es el paso definitivo para transformar un proyecto ciego de IoT en un dispositivo interactivo. En esta guía rápida vas a aprender cómo cablear una pantalla LCD (16×2 o 20×4) con adaptador I2C a tu microcontrolador, cómo definir pines personalizados en el código y cómo estructurar un proyecto real usando, además, el avanzado Sensor BME680.

Conexión I2C pantalla LCD ESP32

¿Por qué usar el protocolo I2C con el ESP32?

El protocolo I2C es el método más eficiente para conectar periféricos a microcontroladores. A diferencia de las conexiones tradicionales que requieren hasta 6 o 12 cables para controlar una pantalla, I2C solo necesita dos cables de datos (SDA y SCL), además de la alimentación eléctrica. Esto te deja pines libres en el ESP32 para conectar relés, motores u otros sensores analógicos.

Pines I2C por Defecto en ESP32

El protocolo I2C solo necesita dos cables de datos (además de la alimentación). Por norma general, si no especificas nada en el código, el ESP32 utiliza los siguientes pines de fábrica:

  • SDA (Datos): GPIO 21
  • SCL (Reloj): GPIO 22

Sin embargo, una de las grandes ventajas de la arquitectura del ESP32 es su matriz de pines intercambiables (pin mapping): puedes asignar el protocolo I2C a casi cualquier pin digital mediante software utilizando la librería nativa Wire.h.


Diagrama de conexión: Pantalla LCD y Sensor BME680

Cuando se diseña un circuito complejo (como una estación meteorológica doméstica), los pines por defecto pueden chocar con otros componentes críticos o con pines reservados para el arranque (boot pins).

En este esquema práctico, redefinimos los pines para trabajar de forma más cómoda. Dado que I2C permite conectar múltiples dispositivos en el mismo bus (siempre que tengan direcciones diferentes), conectaremos la pantalla LCD y el sensor ambiental BME680 en paralelo a los mismos cables:

ComponentePin de la Pantalla / SensorPin asignado en ESP32
Pantalla LCD / BME680SDA (Datos)GPIO 13
Pantalla LCD / BME680SCL (Reloj)GPIO 14
AlimentaciónVCC5V o 3V3 (Según modelo)
TierraGNDGND

Nota técnica: La pantalla LCD suele venir configurada de fábrica en la dirección 0x27, mientras que el sensor BME680 de Adafruit utiliza por defecto la dirección 0x76. Al tener identificadores distintos, el ESP32 sabe exactamente con quién habla en cada milisegundo.

Librerías necesarias en Arduino IDE

Para que el proyecto compile sin errores, necesitas instalar tres librerías esenciales desde el Gestor de Librerías de tu Arduino IDE 2.3:

  1. LiquidCrystal_I2C (de Frank de Brabander) para el control de la pantalla.
  2. Adafruit_BME680 para la gestión del sensor de calidad de aire.
  3. Adafruit_Sensor (Biblioteca unificada que requiere Adafruit para sus sensores).

Código fuente: Estación meteorológica con LCD e I2C personalizado

A continuación, dispones del código fuente listo para compilar en tu Arduino IDE. Este programa lee la temperatura, humedad, presión atmosférica y calidad del aire desde el sensor BME680, muestra los datos en tiempo real en la pantalla LCD I2C y, de forma paralela, envía las métricas mediante HTTP POST a un servidor web.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME680.h>

// Configuración de pines personalizados
#define SDA_PIN 13
#define SCL_PIN 14

Adafruit_BME680 bme;
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
    Serial.begin(115200);
    Wire.begin(SDA_PIN, SCL_PIN); // Inicializar I2C personalizado
    
    lcd.init();
    lcd.backlight();
    
    if (!bme.begin(0x76)) { // Dirección del BME680
        Serial.println("Error al iniciar el sensor");
        while (1);
    }
}

void loop() {
    if (bme.performReading()) {
        // Mostrar en LCD
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Temp: " + String(bme.temperature) + "C");
        lcd.setCursor(0, 1);
        lcd.print("Hum: " + String(bme.humidity) + "%");
    }
    delay(2000);
}

Conclusión y Siguiente Paso

Al usar Wire.begin(SDA, SCL) con pines personalizados, liberas el bus I2C estándar del ESP32. Para un análisis más profundo sobre la integración del BME680 con servidores Node.js/MariaDB, visita nuestra guía detallada: Monitorización Ambiental con ESP32.

Monitorización Ambiental de Málaga con ESP32 y Sensor BME680

Preguntas frecuentes sobre conexiones I2C en ESP32

¿Cuáles son los pines I2C por defecto del ESP32?

Por norma general, en las placas ESP32 clásicas de 30 y 38 pines, los pines asignados de fábrica para la comunicación I2C son el GPIO 21 para la línea de datos (SDA) y el GPIO 22 para la línea de reloj (SCL). Si utilizas modelos más recientes como el ESP32-S3, los pines predeterminados suelen cambiar al GPIO 8 (SDA) y GPIO 9 (SCL). No obstante, recuerda que gracias al multiplexor interno del chip puedes redefinir estos pines por software a los pines que mejor te convengan utilizando el comando Wire.begin(SDA, SCL).

¿Cómo conectar varios dispositivos I2C al ESP32?

Para conectar múltiples periféricos I2C (como una pantalla LCD y un sensor BME680) al ESP32, debes conectarlos todos en paralelo a los mismos pines SDA y SCL. El protocolo I2C es un bus serie compartido, lo que significa que el microcontrolador se comunica con cada componente de forma individual utilizando una dirección hexadecimal única (por ejemplo, 0x27 para la pantalla y 0x76 para el sensor). Solo asegúrate de que dos dispositivos no compartan exactamente la misma dirección en el circuito para evitar colisiones de datos.

¿Qué hacer si la pantalla LCD I2C no muestra texto?

Si la pantalla se enciende pero no muestra ningún carácter, el fallo más común suele ser el contraste. Gira suavemente el pequeño potenciómetro que se encuentra en la placa mochila negra soldada detrás de la pantalla hasta que aparezcan las letras. Si el problema persiste, verifica con un escáner I2C que la dirección configurada en tu código (normalmente 0x27 o 0x3F) coincida exactamente con el hardware de tu pantalla.

Deja un comentario