ESP32 Arrosage IoT (Capteur de sol + Pompe)
La pompe démarre toute seule quand la terre du pot sèche, et tu suis l'humidité du sol en direct sur ton téléphone. Ce projet est le guide pas à pas du modèle IoT Humidité du sol + pompe de l'appli, avec un ESP32, un capteur d'humidité du sol, un relais et une mini pompe à eau. Va dans Atelier › Appareils › Ajouter un appareil ; Ohmi prépare le code avec ta clé d'appareil. Le code ici est un exemple : la clé et les infos Wi-Fi sont à remplacer.

Contrôlez cet appareil depuis l'app
Connectez votre ESP32 ou Raspberry Pi Pico W au Wi-Fi, allumez-le et éteignez-le depuis votre téléphone et suivez les mesures en direct. Ohmi prépare le code ; vous saisissez seulement vos identifiants Wi-Fi et vous le téléversez.
Modèle dans l'app : Humidité du sol + pompe
- Où le trouver dans l'app ?Ajoutez un nouvel appareil depuis l'onglet Outils ou Atelier › Appareils, puis choisissez ce modèle.
- Bibliothèque ArduinoOuvrez le gestionnaire de bibliothèques de l'Arduino IDE, cherchez BlueGraysIoT et installez-la.
L'offre gratuite comprend 1 appareil, 1 graphique et 24 heures d'historique. Premium ajoute plus d'appareils, plus de graphiques et un historique plus long.
Schéma du circuit

Code source
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// ESP32 Arrosage IoT (Capteur de sol + Pompe)
4// ─────────────────────────────────────────
5// Le modèle IoT "Humidité du sol + pompe" de l'appli BlueGrays : le
6// capteur d'humidité du sol mesure toutes les 2 secondes et envoie la
7// valeur à l'appli, le relais lance la pompe quand l'humidité passe sous
8// le seuil d'arrosage et l'arrête 10 points au-dessus ; tu pilotes aussi
9// la pompe et le seuil depuis ton téléphone. Ohmi prépare le vrai code
10// dans l'appli avec ta propre clé d'appareil (Atelier › Appareils ›
11// Ajouter un appareil) ; le code ici est un exemple, la clé d'appareil et
12// les infos Wi-Fi sont à remplacer. Gestionnaire de bibliothèques :
13// BlueGraysIoT (avec ses dépendances). La carte ne se connecte qu'aux
14// réseaux Wi-Fi 2,4 GHz. Le relais s'active sur LOW. Sécurité : alimente
15// la pompe avec son propre boîtier de piles (4 x AA), pas avec la carte ;
16// garde la carte, le relais et les piles loin de l'eau, dans une boîte
17// fermée ; ne fais jamais tourner la pompe à sec.
18//
19// Broches :
20// GPIO34 -> Capteur d'humidité du sol AO
21// 3V3, GND -> Capteur d'humidité du sol VCC, GND
22// GPIO26 -> Module relais IN
23// 5V, GND -> Module relais VCC, GND
24// Relais COM -> boîtier de piles (+), NO -> pompe (+), pompe (-) -> boîtier de piles (-) ; la
25// pompe a ses propres 4 x AA
26// Pico W : capteur d'humidité AO GP26, relais IN GP15
27
28/*
29 * Humidité du sol + pompe · BlueGrays IoT
30 * BlueGrays · bluegrays.com
31 * Ne partage pas ce code : il contient la clé de ton appareil et ton mot de passe Wi-Fi.
32 */
33
34#include <BlueGraysIoT.h>
35
36const char *DEVICE_KEY = "TA_CLE_APPAREIL";
37const char *WIFI_NAME = "TON_RESEAU_WIFI";
38const char *WIFI_PASSWORD = "TON_MOT_DE_PASSE_WIFI";
39
40BlueGraysIoT bg(DEVICE_KEY);
41
42const int RELAY_PIN = 26;
43const bool RELAY_ACTIVE_LOW = true; // la plupart des modules relais s’activent sur LOW
44void setRelay(bool on) { digitalWrite(RELAY_PIN, (on != RELAY_ACTIVE_LOW) ? HIGH : LOW); }
45const int SOIL_PIN = 34;
46const int SOIL_DRY = 3200; // valeur lue dans une terre sèche
47const int SOIL_WET = 1300; // valeur lue dans une terre humide
48int threshold = 30; bool pump = false; unsigned long lastReadMs = 0;
49
50void setup() {
51 Serial.begin(115200);
52 pinMode(RELAY_PIN, OUTPUT);
53 setRelay(false);
54 analogReadResolution(12);
55 bg.onSwitch("pompa", [](bool on) { pump = on; setRelay(on); });
56 bg.onNumber("esik", [](float v) { threshold = (int)v; });
57 bg.setDeadband("toprak", 1.0);
58 bg.setDebug(Serial);
59 bg.setLanguage(BG_LANG_EN);
60 bg.begin(WIFI_NAME, WIFI_PASSWORD);
61}
62
63void loop() {
64 bg.loop(); // évite ici les longs delay()
65 if (millis() - lastReadMs >= 2000) {
66 lastReadMs = millis();
67 int pct = constrain(map(analogRead(SOIL_PIN), SOIL_DRY, SOIL_WET, 0, 100), 0, 100);
68 bg.send("toprak", pct);
69 // Allume la pompe sous le seuil, éteins-la 10 points au-dessus
70 if (pct < threshold && !pump) { pump = true; setRelay(true); bg.send("pompa", true); }
71 if (pct > threshold + 10 && pump) { pump = false; setRelay(false); bg.send("pompa", false); }
72 }
73}
74FAQ
Puis-je téléverser directement le code de cette page ?
Tu peux, mais la carte ne se connectera pas : la clé d'appareil et les infos Wi-Fi sont des valeurs à remplacer. Dans l'appli, va dans Atelier › Appareils › Ajouter un appareil et choisis le modèle Humidité du sol + pompe ; Ohmi prépare le code avec ta clé, le nom de ton réseau et ton mot de passe. Copie ce code et téléverse-le. Tu peux revoir le code complet plus tard dans Appareil › Code et clé.
Est-ce que ça marche avec un Pico W ?
Oui. Choisis Pico W comme carte en ajoutant l'appareil ; le code reste le même, seules les broches et les valeurs de calibrage changent : le capteur d'humidité va sur GP26 (une entrée analogique) et le relais sur GP15. Dans Arduino IDE, installe le paquet "pico" depuis le gestionnaire de cartes. Le circuit et la photo de cette page ont été faits avec un ESP32.
Pourquoi la pompe a-t-elle ses propres piles ?
Le courant que tire la pompe et les parasites de son moteur peuvent faire redémarrer la carte. C'est pourquoi la pompe est alimentée par un boîtier de 4 piles AA et passe seulement par les bornes COM et NO du relais ; elle n'a aucun fil relié à la carte. Garde la carte, le relais et le boîtier de piles loin de l'eau, dans une boîte fermée, et les raccords de fils bien au sec. La pompe ne doit tourner que dans l'eau ; à sec, elle chauffe et lâche en quelques minutes. Enlève les piles quand tu fixes le tuyau ou sors la pompe de l'eau.
Quand la pompe tourne-t-elle, et que se passe-t-il si je la commande à la main ?
La carte mesure l'humidité toutes les 2 secondes. Quand elle passe sous le Seuil d'arrosage de l'appli (30 % au départ), la pompe s'allume, et elle s'éteint 10 points au-dessus du seuil ; cet écart l'empêche de s'allumer et s'éteindre sans arrêt. Tu peux aussi toucher l'interrupteur Pompe à la main, mais la règle automatique l'emporte : si tu l'éteins alors que la terre est sous le seuil, elle se rallume en 2 secondes, et si tu l'allumes alors que la terre est 10 points au-dessus, elle s'éteint aussitôt. Règle le seuil selon ton pot.
