Blog
Giardino Intelligente ESP32: Irrigazione Automatica
Il Problema
Le tue piante continuano a morire perché dimentichi di innaffiarle. Oppure innaffi troppo e le radici marciscono. Ti serve un sistema che sappia quando le piante hanno davvero sete — e le innaffi da solo.
Con un ESP32, un sensore di umidità del terreno e un relè, puoi costruire un giardino intelligente completamente automatico che:
- Monitora l’umidità del terreno 24/7
- Innaffia le piante quando ne hanno bisogno (non a orari fissi)
- Ti invia avvisi quando il serbatoio dell’acqua è vuoto
Cosa Costruirai
Un sistema di irrigazione automatica basato su ESP32 che legge l’umidità del terreno ogni ora e aziona una pompa dell’acqua quando il terreno si secca. Opzionale: connessione WiFi per il monitoraggio remoto via MQTT.
Difficoltà: Principiante | Tempo: 45 minuti | Costo: ~$35 di componenti
Hardware Necessario (Bill of Materials)
| Componente | Modello | Qtà | Prezzo | Acquista |
|---|---|---|---|---|
| Microcontrollore | ESP32 DevKitC V4 | 1 | $13.49 | Vedi Prodotto |
| Sensore Umidità Terreno | Capacitivo Umidità Terreno v1.2 | 1 | $4.49 | Vedi Prodotto |
| Modulo Relè | Relè 2 Canali 5V | 1 | $5.24 | Vedi Prodotto |
| Display | 0.96″ OLED SSD1306 | 1 | $5.99 | Vedi Prodotto |
| Breadboard | 830 punti | 1 | $4.49 | Vedi Prodotto |
| Cavi Jumper | M-M 40 pz | 1 | $2.99 | Vedi Prodotto |
Ti serviranno anche una mini pompa per acqua (5V, ~$3 in qualsiasi negozio di ferramenta) e un tubicino in silicone. Collega il filo positivo della pompa passando dal relè.
Passo 1: Cablaggio
ESP32 ↔ Sensore di Umidità del Terreno
| Pin Sensore | Pin ESP32 | Nota |
|---|---|---|
| VCC | 3V3 | Alimentazione |
| GND | GND | Terra |
| AOUT | GPIO 34 | Uscita analogica (ADC1_CH6) |
ESP32 ↔ Modulo Relè
| Pin Relè | Pin ESP32 | Nota |
|---|---|---|
| VCC | 5V/VIN | Alimentazione |
| GND | GND | Terra |
| IN1 | GPIO 26 | Segnale di controllo del relè |
ESP32 ↔ Display OLED
| Pin OLED | Pin ESP32 | Nota |
|---|---|---|
| VCC | 3V3 | Alimentazione |
| GND | GND | Terra |
| SDA | GPIO 21 | Dati I2C |
| SCL | GPIO 22 | Clock I2C |
Importante: Collega la pompa dell’acqua al terminale NO (Normalmente Aperto) e al terminale COM del relè. Il relè funziona come un interruttore — quando GPIO 26 va LOW, la pompa si accende.
Passo 2: Calibrazione
Prima di automatizzare, devi trovare i valori di “secco” e “bagnato” del tuo terreno:
- Inserisci il sensore in terreno asciutto → annota la lettura analogica (es. 3200)
- Inseriscilo in terreno bagnato → annota la lettura (es. 1400)
- Calcola la soglia — sotto questo valore = abbastanza bagnato, sopra = serve acqua
DRY_VALUE = 3200 (your reading in dry soil)
WET_VALUE = 1400 (your reading in wet soil)
THRESHOLD = 2500 (trigger watering above this)
Passo 3: Carica il Codice
#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.");
}
}
}
Passo 4: Installazione
- Inserisci il sensore capacitivo di umidità del terreno nel vaso della pianta
- Collega la pompa a un contenitore d’acqua con il tubicino che arriva alla pianta
- Alimenta l’ESP32 via USB o con lo shield batteria 18650
- Il display OLED mostra la percentuale di umidità in tempo reale e lo stato della pompa
- Ogni ora il sistema controlla l’umidità del terreno e innaffia automaticamente
Perché i Sensori Capacitivi Sono Migliori
Questo sistema usa un sensore di umidità capacitivo (non resistivo). I sensori resistivi hanno sonde metalliche esposte che si corrodono nel terreno bagnato in poche settimane. I sensori capacitivi sigillano l’elettronica dietro uno strato protettivo — durano anni senza degradarsi.
Andare Oltre
- Aggiungi WiFi + MQTT — Inoltra i dati di umidità al telefono (combinalo con il tutorial MQTT)
- Aggiungi più sensori — Usa un multiplexer (CD4051BE) per monitorare più piante con un solo ESP32
- Aggiungi un sensore di livello acqua — Avvisa quando il serbatoio è quasi vuoto
- Integrazione Home Assistant — Controlla la pompa dalla dashboard della tua casa intelligente
- Energia solare — Aggiungi un pannello solare da 5V + shield batteria 18650 per un deploy esterno permanente