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.
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 :
Alimentation solaire : un petit panneau solaire couplé à une batterie rechargeable.
Très basse consommation : utilisation du mode deep sleep (sommeil profond) de l’ESP32 pour ne consommer quasiment rien entre les mesures.
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.

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.

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 :
Panneau solaire → module de charge : soudez les fils du panneau solaire aux bornes d’entrée « SOLAR +/- » du module.
Batterie 18650 → module de charge : insérez la batterie dans son support sur le module, en respectant la polarité.
Module de charge → ESP32 : connectez la sortie 5V du module à la broche VIN de l’ESP32, et la masse GND du module à une broche GND de l’ESP32.
Sonde d’humidité capacitive → ESP32 :
VCC → GPIO26 (on utilisera ce port pour n’alimenter la sonde que lors des mesures)
GND → GND
AOUT (Signal) → GPIO33
Sonde DHT11 → ESP32 :
VCC → 3V3
GND → GND
DATA → GPIO27
Mesure de la tension batterie → ESP32 : 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.

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é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.
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.
Notez la valeur (moisture_min) quand la sonde est à l’air libre (complètement sèche).
Notez la valeur (moisture_max) quand la sonde est plongée dans un verre d’eau.
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.
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 !