Créer votre sonde d'humidité du sol autonome et solaire pour Home Assistant

Vous en avez marre d’arroser votre pelouse ou vos plantes à l’aveugle ? Vous souhaitez optimiser votre consommation d’eau tout en gardant un jardin verdoyant ? Aujourd’hui, je vous présente un projet passionnant et très utile : la fabrication d’une sonde d’humidité du sol connectée, 100% autonome grâce à l’énergie solaire et parfaitement intégrée à Home Assistant. 💧☀️

Ce tutoriel vous guidera pas à pas, du choix des composants à la configuration logicielle, pour que vous puissiez vous aussi surveiller la santé de votre jardin intelligemment.

Le projet : objectif autonomie et fiabilité

L’idée de base est simple : mesurer le taux d’humidité de la terre et remonter l’information à Home Assistant. Mais le véritable défi est de rendre ce système complètement autonome en énergie pour pouvoir le placer n’importe où dans le jardin, sans se soucier des câbles ou de changer les piles.

Pour y parvenir, notre stratégie repose sur trois piliers :

  1. Alimentation solaire : un petit panneau solaire couplé à une batterie rechargeable.

  2. Très basse consommation : utilisation du mode deep sleep (sommeil profond) de l’ESP32 pour ne consommer quasiment rien entre les mesures.

  3. Fiabilité des composants : choisir du matériel adapté à un usage en extérieur.

Ce projet vous permettra d’obtenir des données précieuses pour déclencher un arrosage automatique, recevoir des notifications, ou simplement suivre l’état de votre sol au fil des saisons.

Le matériel nécessaire

Voici la liste des composants que j’ai utilisés. J’ai opté pour un bon rapport qualité/prix, avec du matériel facile à trouver.

  • Le cerveau : une carte de développement ESP32. Son Wi-Fi intégré, sa faible consommation en sommeil profond et ses nombreux ports en font le candidat idéal.

  • Le module d’alimentation : un module de charge solaire pour batterie 18650 (type TP4056 ou similaire). C’est la pièce maîtresse de notre système d’alimentation. Il gère la charge de la batterie via le panneau solaire et fournit une sortie stable pour alimenter l’ESP32.

  • La batterie : une batterie lithium-ion de type 18650. Choisissez-en une avec une bonne capacité (ex: 2500-3400mAh) pour une meilleure autonomie, surtout en hiver.

  • Le panneau solaire : un petit panneau solaire de 6V. Sa tension est parfaite pour le module de charge.

  • La sonde d’humidité : une sonde d’humidité capacitive. C’est un choix crucial ! Contrairement aux sondes résistives (celles avec deux broches apparentes), les capacitives ne se corrodent pas au contact de la terre et de l’eau, assurant une bien meilleure fiabilité sur le long terme.

  • La sonde de température/humidité (optionnel) : un capteur DHT11 ou DHT22 pour mesurer la température et l’humidité de l’air. C’est un petit plus pour avoir des données météo locales.

  • Le boîtier : un boîtier de dérivation étanche (IP65 ou plus) pour protéger l’électronique des intempéries.

  • Divers : des câbles de prototypage (fils Dupont), un fer à souder (optionnel mais recommandé), et un piquet (un tuteur en bambou fait parfaitement l’affaire) pour monter le panneau solaire.

L'assemblage électronique

Le montage est assez simple. Le cœur du système est le module de charge qui fait le lien entre le panneau solaire, la batterie et l’ESP32.

Voici le schéma des connexions :

  1. Panneau solairemodule de charge : soudez les fils du panneau solaire aux bornes d’entrée « SOLAR +/- » du module.

  2. Batterie 18650module de charge : insérez la batterie dans son support sur le module, en respectant la polarité.

  3. Module de chargeESP32 : connectez la sortie 5V du module à la broche VIN de l’ESP32, et la masse GND du module à une broche GND de l’ESP32.

  4. Sonde d’humidité capacitiveESP32 :

    • VCCGPIO26 (on utilisera ce port pour n’alimenter la sonde que lors des mesures)

    • GNDGND

    • AOUT (Signal) → GPIO33

  5. Sonde DHT11ESP32 :

    • VCC3V3

    • GNDGND

    • DATAGPIO27

  6. Mesure de la tension batterieESP32 : le module de charge inclut un pont diviseur de tension. Connectez la broche BAT du module (souvent au milieu) à la broche GPIO35 de l’ESP32 pour lire la tension.

Une fois tout connecté, placez l’ensemble dans le boîtier étanche, en faisant sortir proprement les câbles du panneau solaire et de la sonde.

La configuration avec ESPHome

ESPHome est un outil fantastique qui transforme un code complexe en une configuration simple sous forme de fichier YAML. Voici le code complet, que nous allons décortiquer juste après.

Note : n’oubliez pas de créer un fichier secrets.yaml dans votre dossier ESPHome pour y stocker vos informations sensibles (clé API, mots de passe Wi-Fi…).

esphome:
  name: sonde-gazon
  friendly_name: Sonde Gazon
  on_boot:
    priority: -100
    then:
      - output.turn_on: gpio_sensor
      - wait_until:
          condition:
            api.connected:
      - component.update: moisture
      - component.update: battery
      - component.update: battery_voltage
      - component.update: wifisignal
      - script.execute: deep_sleep_evaluation

esp32:
  board: esp32dev
  framework:
    type: arduino

# Activer les logs
logger:

# API pour Home Assistant
api:
  encryption:
    key: !secret api_key # Remplacez par votre clé

ota:
  password: !secret ota_password # Remplacez par votre mot de passe OTA

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.0.177
    gateway: 192.168.0.1
    subnet: 255.255.255.0
  fast_connect: true

substitutions:
  sleep_duration: 1h
  moisture_min: "2.60500"  # À calibrer à sec
  moisture_max: "1.50000"  # À calibrer dans l'eau

deep_sleep:
  id: deep_sleep_enabled
  sleep_duration: ${sleep_duration}

binary_sensor:
  - platform: homeassistant
    id: prevent_deep_sleep
    entity_id: input_boolean.deep_sleep # Un interrupteur virtuel dans HA pour la maintenance
    publish_initial_state: true

output:
  - platform: gpio
    pin: GPIO26
    id: gpio_sensor

sensor:
  - platform: wifi_signal
    name: "WiFi Signal"
    id: "wifisignal"
    
  - platform: adc
    pin: 33
    name: "Moisture"
    id: "moisture"
    icon: "mdi:watering-can"
    device_class: 'moisture'
    state_class: 'measurement'
    attenuation: 12db
    accuracy_decimals: 1
    unit_of_measurement: '%'
    filters:
      - calibrate_linear:
          - ${moisture_min} -> 0.0
          - ${moisture_max} -> 100.0

  - platform: adc
    pin:
      number: 35
      allow_other_uses: true
    name: "Battery"
    id: "battery"
    device_class: 'battery'
    attenuation: 12db
    unit_of_measurement: '%'
    filters:
      - multiply: 2 # Le pont diviseur divise la tension par 2
      - calibrate_linear:
          - 3.0 -> 0
          - 4.2 -> 100

  - platform: adc
    pin:
      number: 35
    name: "Battery Voltage"
    id: "battery_voltage"
    attenuation: 12db
    unit_of_measurement: "V"
    icon: "mdi:battery-high"
    device_class: "voltage"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 2

  - platform: dht
    pin: GPIO27
    temperature:
      name: "Température Extérieure"
    humidity:
      name: "Humidité Extérieure"
    model: DHT11
    update_interval: 60s # Inutile car contrôlé par le deep sleep

script:
  - id: deep_sleep_evaluation
    mode: queued
    then:
      - output.turn_on: gpio_sensor
      - delay: 15s
      - component.update: moisture
      - component.update: battery
      - component.update: battery_voltage
      - component.update: wifisignal
      - if:
          condition:
            binary_sensor.is_on: prevent_deep_sleep
          then:
            - logger.log: 'Deep Sleep Désactivé pour la maintenance.'
            - delay: 30s # Garde le capteur actif pour des mises à jour
          else:
            - output.turn_off: gpio_sensor # On coupe l'alimentation de la sonde
            - delay: 3s
            - deep_sleep.enter: deep_sleep_enabled # Dodo !
      - script.execute: deep_sleep_evaluation # Boucle si le deep sleep est désactivé

Explications clés du code

  • deep_sleep : c’est la fonction magique ! L’ESP32 va se réveiller toutes les heures (sleep_duration: 1h), se connecter au Wi-Fi, envoyer ses données, puis se rendormir. La consommation pendant le sommeil est infime (quelques microampères).

  • output: gpio_sensor : on configure le GPIO26 comme un interrupteur. Dans le script, on allume ce port (output.turn_on) juste avant la mesure et on l’éteint (output.turn_off) juste avant de dormir. Cela permet de ne pas alimenter la sonde d’humidité en continu, économisant ainsi de précieux milliampères.

  • Calibrage de la sonde (calibrate_linear) : cette partie est essentielle. Pour obtenir un pourcentage d’humidité fiable, vous devez calibrer la sonde.

    1. Flashez une première fois le code en commentant (avec un #) les lignes unit_of_measurement: '%' et le filtre calibrate_linear pour lire la tension brute.

    2. Notez la valeur (moisture_min) quand la sonde est à l’air libre (complètement sèche).

    3. Notez la valeur (moisture_max) quand la sonde est plongée dans un verre d’eau.

    4. Reportez ces valeurs dans la section substitutions et décommentez les lignes.

  • Mesure de la batterie (multiply: 2) : le module de charge intègre un pont diviseur de tension pour ne pas envoyer plus de 3.3V à l’ESP32. Le filtre multiply: 2 rétablit la tension réelle de la batterie (qui peut monter jusqu’à 4.2V). On utilise ensuite un autre calibrate_linear pour transformer cette tension en un pourcentage plus parlant.

Intégration à Home Assistant et fiabilité

  • Une fois votre ESP32 flashé et connecté à votre Wi-Fi, Home Assistant le découvrira automatiquement via l’intégration ESPHome. Vous n’aurez plus qu’à l’ajouter et toutes les entités (humidité, batterie, température…) apparaîtront.

    Sur la fiabilité, ce montage a fait ses preuves.

    • Le choix d’une sonde capacitive évite la corrosion et garantit des mesures stables sur le long terme.

    • Le boîtier étanche est indispensable pour protéger l’électronique de la pluie et de l’humidité.

    • L’autonomie est excellente. Même avec plusieurs jours de temps gris, la batterie 18650 et la très faible consommation due au deep sleep permettent au système de continuer à fonctionner sans interruption. En été, la batterie reste constamment à 100%.

    Vous voilà avec une sonde sur-mesure, économique, et parfaitement autonome pour prendre soin de votre jardin comme un pro ! N’hésitez pas à poser vos questions en commentaire si vous vous lancez dans l’aventure. Bon bricolage !