Uncategorized

ESP32 : arrosage automatique avec capteur d’humidité du sol

Le problème

Vos plantes continuent de mourir parce que vous oubliez de les arroser. Ou vous arrosez trop et les racines pourrissent. Il vous faut un système qui sait quand vos plantes ont vraiment soif — et qui les arrose automatiquement.

Avec un ESP32, un capteur d’humidité du sol et un relais, vous pouvez construire un jardin connecté entièrement automatique qui :

  • Surveille l’humidité du sol 24h/24 et 7j/7
  • Arrose vos plantes quand elles en ont besoin (pas selon un planning fixe)
  • Vous envoie des alertes quand le réservoir d’eau est vide

Ce que vous allez construire

Un système d’arrosage automatique piloté par ESP32 qui lit l’humidité du sol toutes les heures et déclenche une pompe à eau quand le sol sèche. Optionnel : connexion Wi-Fi pour un suivi à distance via MQTT.

Difficulté : Débutant  |  Temps : 45 minutes  |  Coût : ~35 $ de pièces

Matériel requis (liste de pièces)

Pièce Modèle Qté Prix Acheter
Microcontrôleur ESP32 DevKitC V4 1 $13.49 Voir le produit
Capteur d’humidité du sol Capacitive Soil Moisture v1.2 1 $4.49 Voir le produit
Module relais 2-Channel 5V Relay 1 $5.24 Voir le produit
Écran 0.96″ OLED SSD1306 1 $5.99 Voir le produit
Breadboard 830-point 1 $4.49 Voir le produit
Fils de liaison M-M 40pcs 1 $2.99 Voir le produit

Il vous faudra aussi une mini pompe à eau (5V, ~3 $ dans n’importe quel magasin de bricolage) et un tuyau silicone. Connectez le fil positif de la pompe à travers le relais.

Étape 1 : le câblage

ESP32 ↔ capteur d’humidité du sol

Broche capteur Broche ESP32 Remarque
VCC 3V3 Alimentation
GND GND Masse
AOUT GPIO 34 Sortie analogique (ADC1_CH6)

ESP32 ↔ module relais

Broche relais Broche ESP32 Remarque
VCC 5V/VIN Alimentation
GND GND Masse
IN1 GPIO 26 Signal de commande du relais

ESP32 ↔ écran OLED

Broche OLED Broche ESP32 Remarque
VCC 3V3 Alimentation
GND GND Masse
SDA GPIO 21 Données I2C
SCL GPIO 22 Horloge I2C

Important : branchez la pompe à eau sur les bornes NO (Normalement Ouvert) et COM du relais. Le relais fait office d’interrupteur — quand GPIO 26 passe à LOW, la pompe s’allume.

Étape 2 : étalonnage

Avant d’automatiser, il faut connaître les valeurs « sec » et « humide » de votre sol :

  1. Enfoncez le capteur dans de la terre sèche → notez la lecture analogique (par ex. 3200)
  2. Enfoncez-le dans de la terre humide → notez la lecture (par ex. 1400)
  3. Calculez le seuil — en dessous = assez humide, au-dessus = il faut arroser
DRY_VALUE = 3200   (your reading in dry soil)
WET_VALUE = 1400   (your reading in wet soil)
THRESHOLD = 2500   (trigger watering above this)

Étape 3 : envoyer le code

#include <Wire.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// --- Pins ---
#define SOIL_PIN 34
#define PUMP_PIN 26

// --- Calibration (change these!) ---
const int DRY_VALUE = 3200;
const int WET_VALUE = 1400;
const int THRESHOLD = 2500;

const unsigned long CHECK_INTERVAL = 3600000;
const unsigned long PUMP_DURATION = 5000;
unsigned long lastCheck = 0;

void displayReading(int raw, int percent) {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Smart Garden");
  display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
  display.setCursor(0, 20);
  display.printf("Moisture: %d%%", percent);
  display.setCursor(0, 35);
  if (percent < 40) {
    display.println("Status: DRY");
    display.println("Pump: ACTIVE");
  } else {
    display.println("Status: OK");
    display.println("Pump: OFF");
  }
  display.setCursor(0, 55);
  display.printf("Raw: %d", raw);
  display.display();
}

void setup() {
  Serial.begin(115200);
  pinMode(PUMP_PIN, OUTPUT);
  digitalWrite(PUMP_PIN, HIGH);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("OLED not found!");
  }
  display.clearDisplay();
  display.display();
}

void loop() {
  if (millis() - lastCheck >= CHECK_INTERVAL || lastCheck == 0) {
    lastCheck = millis();
    int raw = analogRead(SOIL_PIN);
    int percent = map(raw, DRY_VALUE, WET_VALUE, 0, 100);
    percent = constrain(percent, 0, 100);
    Serial.printf("Soil: %d%% (raw: %d)n", percent, raw);
    displayReading(raw, percent);
    if (percent < 40) {
      Serial.println("Soil is dry! Watering...");
      digitalWrite(PUMP_PIN, LOW);
      delay(PUMP_DURATION);
      digitalWrite(PUMP_PIN, HIGH);
      Serial.println("Watering complete.");
    }
  }
}

Étape 4 : déploiement

  1. Enfoncez le capteur capacitif d’humidité dans le pot de votre plante
  2. Reliez la pompe à un réservoir d’eau avec un tuyau menant à la plante
  3. Alimentez l’ESP32 via USB ou un shield batterie 18650
  4. L’écran OLED affiche le pourcentage d’humidité en direct et l’état de la pompe
  5. Toutes les heures, le système vérifie l’humidité du sol et arrose automatiquement

Pourquoi les capteurs capacitifs sont meilleurs

Ce système utilise un capteur d’humidité capacitif (pas un résistif). Les capteurs résistifs ont des sondes métalliques exposées qui se corrodent dans un sol humide en quelques semaines. Les capteurs capacitifs scellent l’électronique derrière une couche protectrice — ils durent des années sans se dégrader.

Aller plus loin

  • Ajouter Wi-Fi + MQTT — transférez les données d’humidité vers votre téléphone (à combiner avec le tutoriel MQTT)
  • Ajouter plusieurs capteurs — utilisez un multiplexeur (CD4051BE) pour surveiller plusieurs plantes avec un seul ESP32
  • Ajouter un capteur de niveau d’eau — alerte quand votre réservoir se vide
  • Intégration Home Assistant — pilotez la pompe depuis votre tableau de bord domotique
  • Énergie solaire — ajoutez un panneau solaire 5V + un shield batterie 18650 pour un déploiement extérieur permanent

Leave a Reply

Your email address will not be published. Required fields are marked *