Saltar al contenido

Sensor HC-SR04 con ESP8266 y ESPHome: guía segura

15/11/2022
Sensor HC-SR04 conectado a ESP8266 mediante un divisor de tensión para ESPHome

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 1 de agosto de 2026.

El sensor HC-SR04 permite medir distancias sin contacto y enviar el resultado a Home Assistant mediante un ESP8266 con ESPHome. Es un proyecto económico y muy útil para saber el nivel aproximado de un depósito seco, detectar si hay un objeto en una estantería o conocer la posición de una puerta. Pero hay un detalle eléctrico importante: el HC-SR04 se alimenta a 5 V y su pin Echo puede entregar 5 V, mientras que los GPIO del ESP8266 trabajan a 3,3 V. En esta guía lo conectaremos de forma segura con un divisor de tensión.

También vamos a sustituir la configuración antigua que publicaba una distancia inventada cuando no había eco. Con el código actual, una medición fallida seguirá siendo una medición no disponible: es más honesto y evita automatizaciones peligrosas.

OFERTAS · TIENDA OFICIAL

Descuentos en domótica SONOFF

Interruptores WiFi, relés, sensores, tiras LED y más. Las promociones cambian con frecuencia en la tienda oficial.

Cupón: TECNOYFOTO (10% de descuento al pagar)

Ver ofertas oficiales Enlace de afiliado · Tienda Sonoff

Qué necesitas

Los enlaces de Amazon son de afiliado: el precio para ti no cambia y ayudan a mantener el proyecto.

Cómo funciona el HC-SR04

El ESP8266 envía un pulso de al menos 10 microsegundos al pin Trig. El módulo emite ocho ciclos ultrasónicos a 40 kHz y mantiene Echo en nivel alto durante el tiempo que tarda el sonido en viajar hasta el objeto y regresar. ESPHome transforma ese tiempo en metros.

La ficha técnica del HC-SR04 anuncia 2 cm a 4 m, resolución de hasta 3 mm y un ángulo de medición aproximado de 15°. En una instalación real no conviene prometer esos 4 m: la documentación de ESPHome advierte que muchos módulos funcionan de forma fiable hasta unos 2 m. El alcance depende del tamaño, el ángulo y el material del objeto, además de la temperatura y el movimiento del aire.

Cableado seguro: el divisor de tensión es obligatorio

La documentación eléctrica de Espressif sitúa la alimentación y las entradas/salidas del ESP8266 dentro del dominio de 3,3 V, con 3,6 V como máximo. No conectes Echo directamente al ESP8266. Con una resistencia de 1 kΩ entre Echo y el GPIO, y otra de 2 kΩ entre ese GPIO y GND, los 5 V se reducen aproximadamente a 3,33 V:

Vsalida = 5 V × 2 kΩ / (1 kΩ + 2 kΩ) = 3,33 V
HC-SR04NodeMCU ESP8266Conexión
VCCVU/VIN/5V5 V procedentes del USB de la placa
GNDGNDMasa común
TrigD6 / GPIO12Conexión directa
EchoD5 / GPIO14Echo → 1 kΩ → GPIO14; GPIO14 → 2 kΩ → GND

Atención a los nombres: D5 es GPIO14 y D6 es GPIO12 en una NodeMCU. No escribas GPIO5 o GPIO6 en el YAML por copiar la serigrafía D5/D6. GPIO6, además, está reservado para la memoria flash en el ESP8266.

Desconecta el USB mientras montas el circuito. Revisa que VCC, GND, Trig y Echo estén en el orden correcto: existen clones con acabados distintos. La masa del sensor y la del ESP8266 deben estar unidas.

Instalar ESPHome y preparar los secretos

Si empiezas desde cero, primero lee qué es ESPHome. En Home Assistant crea un dispositivo nuevo desde el complemento ESPHome, selecciona una placa ESP8266 y sustituye su contenido por el YAML siguiente. Si aún no utilizas esta plataforma, mi explicación de qué es Home Assistant te ayudará a situar cada pieza.

Guarda las credenciales en secrets.yaml. No publiques ese archivo ni escribas tu contraseña Wi-Fi directamente en una captura o repositorio:

wifi_ssid: "NOMBRE_DE_TU_WIFI"
wifi_password: "CONTRASEÑA_DE_TU_WIFI"
hc_sr04_api_key: "CLAVE_BASE64_GENERADA_POR_ESPHOME"
hc_sr04_ota_password: "UNA_CONTRASEÑA_OTA_LARGA"

Código ESPHome actualizado

substitutions:
  device_name: hc-sr04-esp8266
  friendly_name: "HC-SR04 ESP8266"

esphome:
  name: ${device_name}
  friendly_name: ${friendly_name}

esp8266:
  board: nodemcuv2

logger:

api:
  encryption:
    key: !secret hc_sr04_api_key

ota:
  - platform: esphome
    password: !secret hc_sr04_ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "HC-SR04 Fallback"
    password: !secret hc_sr04_ota_password

captive_portal:

sensor:
  - platform: ultrasonic
    name: "Distancia HC-SR04"
    id: hc_sr04_distance
    trigger_pin: GPIO12
    echo_pin: GPIO14
    update_interval: 1s
    timeout: 2.5m
    accuracy_decimals: 2
    filters:
      - lambda: |-
          if (isnan(x)) return {};
          return x;
      - median:
          window_size: 5
          send_every: 3
          send_first_at: 3

La plataforma Ultrasonic Sensor de ESPHome usa metros. Por eso timeout: 2.5m limita la espera a 2,5 m. Si el eco no llega, el componente produce un valor no numérico; la lambda devuelve {} y no publica una distancia falsa. El filtro de mediana reduce picos aislados sin convertir un fallo en una medición válida.

Si utilizas un Wemos D1 mini cambia board: nodemcuv2 por el modelo que te haya propuesto ESPHome, pero puedes mantener GPIO12 y GPIO14 si cableas a D6 y D5. Valida la configuración antes de instalarla. La primera carga puede hacerse por USB; las siguientes, por OTA.

Añadir el sensor a Home Assistant

  1. En Home Assistant abre Ajustes → Dispositivos y servicios.
  2. Acepta el dispositivo descubierto por ESPHome o pulsa Añadir integración y elige ESPHome.
  3. Asigna el dispositivo a una zona y comprueba la entidad sensor.distancia_hc_sr04. El identificador exacto puede variar.

Una tarjeta sencilla para el panel es:

type: gauge
entity: sensor.distancia_hc_sr04
name: Distancia
min: 0.02
max: 2.5
needle: true

Calibración y pruebas

  1. Coloca una superficie plana y dura frente al sensor a 20, 50 y 100 cm.
  2. Compara el valor con una cinta métrica. No pruebes dentro de la zona muerta inferior a 2 cm.
  3. Gira ligeramente el objeto. Si la lectura desaparece, el eco se está desviando fuera del receptor.
  4. Ajusta timeout al alcance real que necesites. Un tiempo excesivo puede hacer que el propio final de espera del módulo parezca una lectura válida.

Para convertir distancia en porcentaje de un depósito debes medir la distancia con el depósito vacío y lleno. No uses directamente 0 y 4 m: la geometría y la zona muerta importan. En líquidos, la condensación puede dañar un HC-SR04 abierto; para ambientes húmedos es preferible un sensor ultrasónico impermeable compatible.

Problemas frecuentes

La entidad aparece como no disponible

Comprueba la masa común, la alimentación de 5 V y que Trig/Echo no estén intercambiados. Acerca una superficie plana a 30 cm. Una lectura no disponible es correcta cuando no regresa ningún eco; no la reemplaces por un número arbitrario.

La distancia salta demasiado

Evita telas, espuma, objetos pequeños o superficies inclinadas. Reduce cables, separa el montaje de ventiladores y comprueba que la fuente USB sea estable. El filtro de mediana incluido elimina muchos valores atípicos.

El ESP8266 no arranca

Verifica que has usado GPIO12 y GPIO14 y no pines de arranque. Desconecta el sensor, inicia la placa y revisa el registro serie. Confirma también que el divisor está en Echo, no en VCC.

Vídeo del proyecto

El vídeo muestra el proyecto original. Para reproducirlo hoy, utiliza el cableado seguro y el YAML actualizado de esta página, especialmente el divisor de tensión en Echo.

Conclusión

El HC-SR04 sigue siendo una forma barata de aprender medición ultrasónica, ESPHome y Home Assistant. La clave no está solo en conseguir un número: hay que proteger el GPIO de 3,3 V, elegir pines correctos, tratar un eco ausente como dato no disponible y probar el montaje en el entorno real. Para ampliar tu estación puedes añadir un BME280 con ESPHome y registrar también temperatura, humedad y presión.

Continúa leyendo

Siguiente guía relacionada · 3 min de lectura

Sensor de puerta magnético con ESPHome

Gracias al sensor de puerta magnético con ESPHome, podremos tener conectadas nuestras puertas y ventanas. Tener sus ventanas conectadas a Home Assistant abre muchas…

Continuar con este artículo