Saltar al contenido

Bus I²C con ESPHome: configuración y solución de problemas

09/10/2022
Bus I2C con ESPHome, cableado SDA y SCL

En calidad de Afiliado de Amazon, obtengo ingresos por las compras adscritas que cumplen los requisitos aplicables. Si compras desde estos enlaces, el precio para ti es el mismo y Amazon me paga una pequeña comisión que ayuda a mantener Tecnoyfoto.

Actualizado el 28 de agosto de 2026.

El bus I²C permite conectar varios sensores y periféricos a un ESP32 o ESP8266 utilizando solo dos señales: SDA para los datos y SCL para el reloj. En ESPHome se define una vez y después cada componente compatible utiliza ese bus. Es habitual en sensores como el BME280, el BMP280 o el HTU21D.

Qué es I²C y cómo funciona

I²C es un bus serie síncrono. El controlador inicia la comunicación y genera el reloj; cada dispositivo responde a una dirección, normalmente expresada en hexadecimal, como 0x76 o 0x77. Todos los dispositivos comparten SDA, SCL y GND, por lo que no hace falta reservar dos GPIO nuevos para cada sensor.

  • SDA: transporta los datos en ambos sentidos.
  • SCL: marca el ritmo de la comunicación.
  • GND: proporciona una referencia eléctrica común.
  • VCC: alimenta cada módulo con la tensión que admita su placa.

Dos dispositivos pueden compartir el mismo bus siempre que sus direcciones no entren en conflicto. Si dos módulos tienen una dirección fija idéntica, necesitarás cambiar la dirección mediante sus puentes, usar otro bus compatible o añadir un multiplexor como el TCA9548A.

Configuración I²C actual en ESPHome

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true
  id: bus_principal
  frequency: 100kHz

GPIO21 y GPIO22 son habituales en muchas placas ESP32 clásicas, pero no son universales. En un ESP8266 suelen utilizarse GPIO4 y GPIO5. Comprueba siempre el pinout de tu placa; ESPHome también puede usar los valores predeterminados definidos por la variante de placa.

Durante el arranque, scan: true busca dispositivos y muestra sus direcciones en el registro. Es una herramienta de diagnóstico, no una garantía de que el componente esté bien configurado. Detectar 0x76, por ejemplo, confirma que hay respuesta eléctrica, pero todavía debes seleccionar la plataforma y dirección correctas.

Cómo añadir un sensor al bus

sensor:
  - platform: bme280_i2c
    i2c_id: bus_principal
    address: 0x76
    temperature:
      name: "Temperatura del salón"
    pressure:
      name: "Presión del salón"
    humidity:
      name: "Humedad del salón"
    update_interval: 60s

i2c_id solo resulta imprescindible cuando has definido más de un bus, pero indicarlo hace que la configuración sea más clara. La dirección debe coincidir con la mostrada por el escáner y con la admitida por el componente.

Resistencias pull-up: internas y externas

SDA y SCL son líneas de colector o drenador abierto: los dispositivos pueden llevarlas a nivel bajo, pero necesitan resistenciasEnlace de afiliado pull-up para volver al nivel alto. ESPHome habilita pull-up internas en ESP32 y el ESP8266 mantiene activadas las internas de 10 kΩ. Aun así, la documentación oficial recomienda resistenciasEnlace de afiliado externas en recorridos largos o cuando hay varios dispositivos.

Muchos módulos comerciales ya incorporan pull-up, normalmente entre 4,7 kΩ y 10 kΩ. No añadas resistencias a ciegas: varias placas conectadas en paralelo reducen la resistencia equivalente y pueden sobrecargar el bus. Para un montaje corto con uno o dos módulos, empieza con lo que incluye la placa y revisa el esquema si aparecen errores.

Frecuencia, longitud del cable y nivel lógico

ESPHome utiliza 50kHz por defecto. 100kHz es una velocidad estándar y suele funcionar bien con cableado corto, pero bajar la frecuencia puede ayudar con dispositivos lentos o instalaciones difíciles. I²C fue pensado para distancias cortas dentro de un equipo: mantén SDA y SCL breves, comparte GND y aléjalas de relés, motores y cables de red.

La tensión de las pull-up determina el nivel lógico del bus. Con un ESP32 o ESP8266, lo prudente es que SDA y SCL queden elevadas a 3,3 V. No asumas que un módulo alimentado a 5 V adapta automáticamente los niveles: consulta su esquema antes de conectarlo.

Dos buses I²C en un ESP32

i2c:
  - id: bus_a
    sda: GPIO21
    scl: GPIO22
    scan: true
  - id: bus_b
    sda: GPIO16
    scl: GPIO17
    scan: true

Algunas plataformas admiten más de un bus. Esto permite separar dispositivos con direcciones repetidas o aislar un periférico problemático. No todos los microcontroladores ni todos los pares de pines ofrecen las mismas posibilidades, así que valida la configuración para tu placa concreta.

Solución de problemas

  • No aparece ninguna dirección: revisa alimentación, GND común, SDA y SCL intercambiadas y continuidad.
  • Aparece una dirección inesperada: consulta la hoja de datos; algunos módulos cambian entre dos direcciones mediante un puente.
  • Errores intermitentes: acorta cables, reduce la frecuencia y comprueba las pull-up.
  • El bus queda bloqueado: desconecta módulos uno a uno para localizar el que mantiene SDA o SCL en nivel bajo.
  • Funciona hasta conectar otro sensor: busca direcciones duplicadas y calcula la resistencia pull-up equivalente.

Conclusión

I²C simplifica mucho un proyecto ESPHome, pero su estabilidad depende de cuatro detalles: pines correctos, direcciones compatibles, pull-up adecuadas y cableado corto. Activa el escáner durante la puesta en marcha, confirma la dirección de cada componente y aumenta la complejidad del bus de forma gradual.

Fuentes técnicas

Continúa leyendo

Siguiente guía relacionada · 9 min de lectura

BME280: guía completa con Arduino, ESPHome y Home Assistant

Actualizado el 01 de agosto de 2026 El BME280 es un sensor ambiental compacto de Bosch que mide temperatura, humedad relativa y presión atmosférica.…

Continuar con este artículo