ESP32 Irrigazione IoT (Sensore + Pompa)
La pompa parte da sola quando la terra del vaso si secca, e guardi l'umidità del terreno dal vivo sul telefono. Questo progetto è la guida passo passo del modello IoT Umidità del terreno + pompa dell'app, con un ESP32, un sensore di umidità del terreno, un relè e una mini pompa ad acqua. Vai su Officina › Dispositivi › Aggiungi dispositivo; Ohmi prepara il codice con la tua chiave del dispositivo. Il codice qui è un esempio: chiave e dati Wi-Fi sono segnaposto.

Controlla questo dispositivo dall'app
Collega il tuo ESP32 o Raspberry Pi Pico W al Wi-Fi, accendilo e spegnilo dal telefono e guarda le misure in diretta. Il codice lo prepara Ohmi; tu inserisci solo i dati del Wi-Fi e lo carichi.
Modello nell'app: Umidità del terreno + pompa
- Dove si trova nell'app?Aggiungi un nuovo dispositivo dalla scheda Strumenti o da Officina › Dispositivi e scegli questo modello.
- Libreria ArduinoApri il Gestore librerie dell'Arduino IDE, cerca BlueGraysIoT e installala.
Il piano gratuito include 1 dispositivo, 1 grafico e 24 ore di cronologia. Con Premium hai più dispositivi, più grafici e una cronologia più lunga.
Schema circuito

Codice sorgente
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// ESP32 Irrigazione IoT (Sensore + Pompa)
4// ─────────────────────────────────────────
5// Il modello IoT "Umidità del terreno + pompa" dell'app BlueGrays: il
6// sensore di umidità del terreno misura ogni 2 secondi e manda il valore
7// all'app, il relè avvia la pompa quando l'umidità scende sotto la soglia
8// di irrigazione e la ferma 10 punti sopra; puoi comandare pompa e soglia
9// anche dal telefono. Ohmi prepara il codice vero nell'app con la tua
10// chiave del dispositivo (Officina › Dispositivi › Aggiungi dispositivo);
11// il codice qui è un esempio, chiave del dispositivo e dati Wi-Fi sono
12// segnaposto. Gestore librerie: BlueGraysIoT (con le sue dipendenze). La
13// scheda si collega solo a reti Wi-Fi a 2,4 GHz. Il relè si attiva con
14// LOW. Sicurezza: alimenta la pompa con un suo portabatterie (4 x AA), non
15// dalla scheda; tieni scheda, relè e batterie lontano dall'acqua, in una
16// scatola chiusa; non far mai girare la pompa a secco.
17//
18// Pin:
19// GPIO34 -> Sensore di umidità del terreno AO
20// 3V3, GND -> Sensore di umidità del terreno VCC, GND
21// GPIO26 -> Modulo relè IN
22// 5V, GND -> Modulo relè VCC, GND
23// Relè COM -> portabatterie (+), NO -> pompa (+), pompa (-) -> portabatterie (-); la pompa ha
24// le sue 4 x AA
25// Pico W: sensore di umidità AO GP26, relè IN GP15
26
27/*
28 * Umidità del terreno + pompa · BlueGrays IoT
29 * BlueGrays · bluegrays.com
30 * Non condividere questo codice: contiene la chiave del dispositivo e la password del Wi-Fi.
31 */
32
33#include <BlueGraysIoT.h>
34
35const char *DEVICE_KEY = "LA_TUA_CHIAVE_DISPOSITIVO";
36const char *WIFI_NAME = "LA_TUA_RETE_WIFI";
37const char *WIFI_PASSWORD = "LA_TUA_PASSWORD_WIFI";
38
39BlueGraysIoT bg(DEVICE_KEY);
40
41const int RELAY_PIN = 26;
42const bool RELAY_ACTIVE_LOW = true; // la maggior parte dei moduli relè si attiva con LOW
43void setRelay(bool on) { digitalWrite(RELAY_PIN, (on != RELAY_ACTIVE_LOW) ? HIGH : LOW); }
44const int SOIL_PIN = 34;
45const int SOIL_DRY = 3200; // valore letto nel terreno asciutto
46const int SOIL_WET = 1300; // valore letto nel terreno bagnato
47int threshold = 30; bool pump = false; unsigned long lastReadMs = 0;
48
49void setup() {
50 Serial.begin(115200);
51 pinMode(RELAY_PIN, OUTPUT);
52 setRelay(false);
53 analogReadResolution(12);
54 bg.onSwitch("pompa", [](bool on) { pump = on; setRelay(on); });
55 bg.onNumber("esik", [](float v) { threshold = (int)v; });
56 bg.setDeadband("toprak", 1.0);
57 bg.setDebug(Serial);
58 bg.setLanguage(BG_LANG_EN);
59 bg.begin(WIFI_NAME, WIFI_PASSWORD);
60}
61
62void loop() {
63 bg.loop(); // evita qui delay() lunghi
64 if (millis() - lastReadMs >= 2000) {
65 lastReadMs = millis();
66 int pct = constrain(map(analogRead(SOIL_PIN), SOIL_DRY, SOIL_WET, 0, 100), 0, 100);
67 bg.send("toprak", pct);
68 // Accendi la pompa sotto la soglia, spegnila 10 punti sopra
69 if (pct < threshold && !pump) { pump = true; setRelay(true); bg.send("pompa", true); }
70 if (pct > threshold + 10 && pump) { pump = false; setRelay(false); bg.send("pompa", false); }
71 }
72}
73FAQ
Posso caricare direttamente sulla scheda il codice di questa pagina?
Puoi, ma non si collegherà: chiave del dispositivo e dati del Wi-Fi sono segnaposto. Nell'app vai su Officina › Dispositivi › Aggiungi dispositivo e scegli il modello Umidità del terreno + pompa; Ohmi prepara il codice con la tua chiave, il nome della rete e la password. Copia quel codice e caricalo. Il codice completo lo ritrovi più tardi in Dispositivo › Codice e chiave.
Funziona anche con un Pico W?
Sì. Quando aggiungi il dispositivo scegli Pico W come scheda; il codice resta uguale, cambiano solo i pin e i valori di calibrazione: il sensore di umidità va su GP26 (un ingresso analogico) e il relè su GP15. In Arduino IDE installa il pacchetto "pico" dal Gestore schede. Il circuito e la foto di questa pagina sono stati fatti con un ESP32.
Perché la pompa ha le sue batterie?
La corrente che assorbe la pompa e i disturbi del suo motore possono far ripartire la scheda. Per questo la pompa è alimentata da un portabatterie da 4 x AA e passa solo dai contatti COM e NO del relè; non ha fili collegati alla scheda. Tieni scheda, relè e portabatterie lontano dall'acqua, in una scatola chiusa, e le giunzioni dei fili all'asciutto. La pompa deve girare solo immersa; a secco si scalda e si rompe in pochi minuti. Togli le batterie quando monti il tubo o tiri fuori la pompa dall'acqua.
Quando parte la pompa, e cosa succede se la comando a mano?
La scheda misura l'umidità ogni 2 secondi. Quando scende sotto la Soglia di irrigazione nell'app (all'inizio 30%) la pompa si accende, e si spegne 10 punti sopra la soglia; questo margine evita che si accenda e si spenga di continuo. Puoi toccare a mano anche l'interruttore Pompa, ma vince la regola automatica: se la spegni con la terra sotto la soglia, si riaccende entro 2 secondi, e se la accendi con la terra 10 punti sopra, si spegne subito. Regola la soglia in base al tuo vaso.
