Saltar al contenido

Sensor de lluvia MH-RD con ESP32 y ESPHome: guía actualizada

22/01/2023
Sensor de lluvia MH-RD conectado a un ESP32 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 2 de agosto de 2026.

El sensor de lluvia MH-RD es una forma económica de saber cuándo empieza a mojarse una superficie y enviar el aviso a Home Assistant. En esta guía vamos a conectarlo a un ESP32, leer sus salidas digital y analógica con ESPHome y crear un indicador de mojado y dos sensores útiles para registrar la última lluvia.

Importante: el MH-RD no es un pluviómetro. No mide litros por metro cuadrado ni milímetros por hora. La salida analógica solo permite estimar cuánto se ha mojado la placa después de calibrarla.

El proyecto también sirve como detector de fugas o inundación, aunque para una instalación permanente conviene valorar un sensor diseñado específicamente para ese uso. Si todavía no conoces el sistema, empieza por la guía qué es ESPHome y para qué sirve.

Qué incluye el módulo MH-RD

Kit MH-RD con placa de detección de lluvia y módulo comparador LM393

El kit está formado por una placa con pistas conductoras y un pequeño módulo comparador, normalmente basado en un LM393. Este módulo ofrece:

  • DO o D0: salida digital. Cambia de estado al superar el umbral ajustado mediante el potenciómetro.
  • AO o A0: salida analógica. Su tensión varía con la conductividad de la placa.
  • VCC y GND: alimentación del módulo.

La salida digital es la mejor opción para automatizaciones como cerrar una ventana o recoger un toldo. La analógica sirve para mostrar una estimación relativa del mojado, pero su resultado depende de la suciedad, la temperatura, la corrosión, el rocío y la posición de las gotas.

Material necesario

  • Sensor MH-RDEnlace de afiliado o un módulo compatible como el YL-83Enlace de afiliado.
  • Una placa ESP32Enlace de afiliado. En el ejemplo principal utilizo un ESP32-WROOM-32.
  • Cables DupontEnlace de afiliado.
  • Fuente USB y una caja IP65 para proteger el ESP32 y el módulo comparador. La placa detectora debe quedar expuesta y con una ligera inclinación para poder secarse.

Algunos enlaces de compra son de afiliado. El precio para ti no cambia y ayudan a mantener el contenido.

Cableado seguro con ESP32-WROOM-32

Alimenta el módulo MH-RD a 3,3 V. De este modo, sus salidas también permanecen dentro del nivel lógico admitido por el ESP32. No conectes AO al ADC si el módulo está alimentado a 5 V sin haber comprobado antes la tensión máxima y, si es necesario, añadido un divisor o protección.

MH-RDESP32-WROOM-32Función
VCC3V3Alimentación a 3,3 V
GNDGNDMasa común
DOGPIO36Detección digital
AOGPIO39Lectura analógica ADC1

GPIO36 y GPIO39 son entradas en el ESP32 clásico, por lo que encajan bien en este montaje. No copies estos pines en un ESP32-C3, C6, S2 o S3: cada familia tiene un mapa diferente. Puedes ampliar información en la guía del ESP32.

Conexiones AO, DO, GND y VCC del módulo de lluvia MH-RD

Código ESPHome actualizado

Este ejemplo utiliza la salida digital para detectar lluvia y la salida analógica para publicar el porcentaje de mojado. Sustituye los dos valores de calibración por los medidos en tu propia placa.

substitutions:
  device_name: sensor-lluvia
  friendly_name: Sensor de lluvia
  rain_digital_pin: GPIO36
  rain_analog_pin: GPIO39

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

esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "Sensor lluvia - recuperación"
    password: !secret fallback_password

captive_portal:

binary_sensor:
  - platform: gpio
    id: rain_detected
    name: "Lluvia detectada"
    device_class: moisture
    pin:
      number: ${rain_digital_pin}
      inverted: true
      mode:
        input: true
    filters:
      - delayed_on: 2s
      - delayed_off: 30s

sensor:
  - platform: adc
    id: rain_plate_voltage
    pin: ${rain_analog_pin}
    attenuation: auto
    update_interval: 5s
    internal: true
    filters:
      - median:
          window_size: 7
          send_every: 4
          send_first_at: 3

  - platform: copy
    source_id: rain_plate_voltage
    name: "Nivel de mojado de la placa"
    unit_of_measurement: "%"
    device_class: moisture
    state_class: measurement
    accuracy_decimals: 0
    filters:
      - calibrate_linear:
          - 3.10 -> 0
          - 1.20 -> 100
      - clamp:
          min_value: 0
          max_value: 100

ESPHome eliminó la contraseña antigua de la API. La comunicación con Home Assistant debe utilizar una clave propia en api.encryption.key. OTA también usa ahora una lista de plataformas. Guarda Wi-Fi, la clave API y las contraseñas en secrets.yaml; nunca las publiques dentro del archivo del dispositivo.

Cómo calibrar el nivel de mojado

  1. Durante la calibración, cambia temporalmente internal: true por false en rain_plate_voltage.
  2. Deja la placa limpia y completamente seca, espera varias lecturas y anota la tensión estable. Ese será el valor correspondiente a 0 %.
  3. Moja la superficie de forma uniforme, sin sumergir el módulo electrónico, y anota el valor estable. Ese será el 100 %.
  4. Sustituye 3.10 y 1.20 por tus mediciones y vuelve a dejar el sensor de tensión como interno.

En muchos módulos la tensión disminuye al mojarse, pero debes comprobarlo en el tuyo. El porcentaje obtenido es una escala relativa de la placa, no intensidad meteorológica.

Tarjeta Gauge para Home Assistant

Añade una tarjeta manual y adapta el ID si Home Assistant ha creado otro nombre para tu entidad:

type: gauge
entity: sensor.nivel_de_mojado_de_la_placa
name: Mojado de la placa
unit: "%"
needle: true
min: 0
max: 100
segments:
  - from: 0
    color: green
    label: Seco
  - from: 25
    color: "#039BE5"
    label: Húmedo
  - from: 60
    color: orange
    label: Mojado
  - from: 85
    color: red
    label: Muy mojado

Guardar la última lluvia y contar los días

El siguiente bloque usa la integración moderna template:. Registra el momento en que el sensor pasa de mojado a seco y calcula los días transcurridos. Cambia binary_sensor.lluvia_detectada si tu entidad tiene otro ID.

template:
  - triggers:
      - trigger: state
        entity_id: binary_sensor.lluvia_detectada
        from: "on"
        to: "off"
    sensor:
      - name: "Fin de la última lluvia"
        unique_id: fin_ultima_lluvia
        device_class: timestamp
        icon: mdi:weather-rainy
        state: "{{ now().isoformat() }}"

  - sensor:
      - name: "Días desde la última lluvia"
        unique_id: dias_desde_ultima_lluvia
        unit_of_measurement: "d"
        state_class: measurement
        icon: mdi:calendar-clock
        availability: >
          {{ is_state('binary_sensor.lluvia_detectada', 'on')
             or (states('sensor.fin_de_la_ultima_lluvia')
                 | as_datetime(default=none)) is not none }}
        state: >
          {% if is_state('binary_sensor.lluvia_detectada', 'on') %}
            0
          {% else %}
            {% set last = states('sensor.fin_de_la_ultima_lluvia')
                          | as_datetime %}
            {{ (now() - last).days }}
          {% endif %}

Si pegas el contenido directamente en configuration.yaml, conserva la primera línea template:. Si ya utilizas un archivo templates.yaml mediante template: !include templates.yaml, pega únicamente los elementos que empiezan por guion. Comprueba siempre la configuración antes de reiniciar Home Assistant.

Variante para FireBeetle 2 ESP32-C6

La sintaxis antigua platform: ESP32 y el identificador firebeetle32c6 ya no deben utilizarse. Para una FireBeetle 2 ESP32-C6 se puede declarar directamente la variante ESP32-C6, sus 4 MB de memoria flash y ESP-IDF. El ejemplo siguiente lee solo DO; elige un GPIO libre y confirma su correspondencia en el pinout de tu revisión.

esphome:
  name: sensor-lluvia-c6
  friendly_name: Sensor de lluvia C6

esp32:
  variant: esp32c6
  flash_size: 4MB
  framework:
    type: esp-idf

# Añade aquí wifi, logger, api, ota y captive_portal
# usando la misma sintaxis segura del ejemplo principal.

binary_sensor:
  - platform: gpio
    name: "Lluvia detectada"
    device_class: moisture
    pin:
      number: GPIO4
      inverted: true
      mode:
        input: true
    filters:
      - delayed_on: 2s
      - delayed_off: 30s

No conectes la salida analógica al mismo GPIO del ejemplo WROOM. Consulta la documentación de la FireBeetle y selecciona un pin ADC válido para el ESP32-C6 si también quieres medir el mojado.

Evitar corrosión y falsas alarmas

  • Instala la placa inclinada para facilitar el drenaje y evita que el módulo comparador reciba agua.
  • Limpia periódicamente las pistas. Polvo, hojas, sal y excrementos pueden alterar la lectura.
  • Aumenta delayed_on si el rocío genera avisos y delayed_off si el estado cambia demasiado pronto al secarse.
  • La corriente continua acelera la electrólisis. Para una instalación duradera, alimenta el módulo solo durante la medición mediante un transistor o MOSFET correctamente dimensionado, o utiliza un detector capacitivo.
  • No uses este proyecto como único sistema de protección de personas, edificios o equipos costosos.

Conclusión

El MH-RD funciona bien como detector económico de comienzo de lluvia si se alimenta y calibra correctamente. Para automatizaciones, la salida digital ofrece el dato más claro; la analógica añade una referencia visual del mojado, no una medición de precipitación. Con el YAML actual, secretos separados y plantillas modernas, el proyecto queda listo para integrarse de forma local en Home Assistant.

Si quieres continuar practicando con sensores, puedes consultar el HC-SR04 con ESPHome, el DS18B20 con One-Wire o la guía del sensor MQ-2 con ESP32.

Sígueme en YouTube

Suscríbete al canal de YouTube de Tecnoyfoto

Continúa leyendo

Siguiente guía relacionada · 8 min de lectura

Sensor MQ-2 con ESPHome y ESP32: guía segura y actualizada

Actualizado el 1 de agosto de 2026. He revisado el cableado del ADC, el código ESPHome, la calibración y las limitaciones de seguridad del…

Continuar con este artículo