Блог
Умный сад на ESP32: автополив по влажности почвы
Проблема
Ваши растения умирают, потому что вы забываете их поливать. Или поливаете слишком щедро, и корни гниют. Нужна система, которая сама знает, когда растениям действительно хочется пить, — и поливает их автоматически.
С ESP32, датчиком влажности почвы и реле можно собрать полностью автоматический умный сад, который:
- Следит за влажностью почвы 24/7
- Поливает растения, когда им это нужно (а не по расписанию)
- Присылает предупреждения, когда бак с водой пуст
Что вы соберёте
Систему автополива на ESP32, которая каждый час считывает влажность почвы и включает помпу, когда земля пересыхает. Опционально: подключите WiFi для удалённого мониторинга через MQTT.
Сложность: для начинающих | Время: 45 минут | Стоимость: ~$35 за детали
Нужное железо (спецификация)
| Деталь | Модель | Кол-во | Цена | Купить |
|---|---|---|---|---|
| Микроконтроллер | ESP32 DevKitC V4 | 1 | $13.49 | Смотреть товар |
| Датчик влажности почвы | Ёмкостный, v1.2 | 1 | $4.49 | Смотреть товар |
| Модуль реле | 2 канала, 5В | 1 | $5.24 | Смотреть товар |
| Дисплей | 0.96″ OLED SSD1306 | 1 | $5.99 | Смотреть товар |
| Макетная плата | 830 точек | 1 | $4.49 | Смотреть товар |
| Провода-перемычки | M-M, 40 шт. | 1 | $2.99 | Смотреть товар |
Ещё понадобится мини-помпа (5В, ~$3 в любом хозяйственном) и силиконовая трубка. Плюсовой провод помпы подключайте через реле.
Шаг 1: Монтаж
ESP32 ↔ датчик влажности почвы
| Пин датчика | Пин ESP32 | Примечание |
|---|---|---|
| VCC | 3V3 | Питание |
| GND | GND | Земля |
| AOUT | GPIO 34 | Аналоговый выход (ADC1_CH6) |
ESP32 ↔ модуль реле
| Пин реле | Пин ESP32 | Примечание |
|---|---|---|
| VCC | 5V/VIN | Питание |
| GND | GND | Земля |
| IN1 | GPIO 26 | Сигнал управления реле |
ESP32 ↔ дисплей OLED
| Пин OLED | Пин ESP32 | Примечание |
|---|---|---|
| VCC | 3V3 | Питание |
| GND | GND | Земля |
| SDA | GPIO 21 | Данные I2C |
| SCL | GPIO 22 | Такт I2C |
Важно: подключайте помпу через клеммы NO (нормально разомкнутый) и COM реле. Реле работает как выключатель — когда GPIO 26 уходит в LOW, помпа включается.
Шаг 2: Калибровка
Прежде чем автоматизировать, найдите «сухое» и «влажное» значения вашей почвы:
- Воткните датчик в сухую землю → запишите аналоговое значение (например, 3200)
- Воткните в влажную → запишите значение (например, 1400)
- Вычислите порог — ниже этого значения влаги достаточно, выше — пора поливать
DRY_VALUE = 3200 (your reading in dry soil)
WET_VALUE = 1400 (your reading in wet soil)
THRESHOLD = 2500 (trigger watering above this)
Шаг 3: Загрузите код
#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.");
}
}
}
Шаг 4: Запуск
- Воткните ёмкостный датчик влажности в горшок с растением
- Подключите помпу к ёмкости с водой, а трубку подведите к растению
- Запитайте ESP32 от USB или шилда 18650
- Дисплей OLED показывает текущий процент влажности и состояние помпы
- Каждый час система проверяет влажность почвы и поливает автоматически
Почему ёмкостные датчики лучше
В этой системе используется ёмкостный датчик влажности почвы (а не резистивный). У резистивных датчиков открытые металлические щупы, которые ржавеют во влажной земле за считанные недели. Ёмкостные прячут электронику за защитным слоем — они служат годами без деградации.
Идём дальше
- Добавьте WiFi + MQTT — пересылайте данные о влажности на телефон (совместите с туториалом по MQTT)
- Добавьте датчики — мультиплексор (CD4051BE) позволит следить за несколькими растениями с одного ESP32
- Добавьте датчик уровня воды — предупредит, когда бак на исходе
- Интеграция с Home Assistant — управляйте помпой с дашборда умного дома
- Солнечное питание — добавьте солнечную панель 5В + шилд 18650 для постоянной уличной установки