Автополив рослин на ESPHome з інтеграцією в Home Assistant
Ємнісний датчик вологості ґрунту + помпа через реле. Уся логіка — у YAML-конфігу ESPHome: полив за порогом, захист від переливу, поріг змінюється з Home Assistant.
Концепція
Замість написання C++ ми опишемо пристрій у YAML, а ESPHome — відкритий фреймворк для прошивок ESP32/ESP8266 — згенерує й зашиє прошивку. Конфігурація нижче зібрана під цей проєкт: датчик, помпа, поріг і логіка поливу. Результат:
- вологість ґрунту в % з'являється в Home Assistant;
- кнопка ручного поливу;
- поріг вологості регулюється повзунком прямо з HA;
- кожні 30 хв плата сама перевіряє ґрунт і, якщо сухо, вмикає помпу рівно на 10 секунд.
Компоненти
- ESP32 DevKit
- Ємнісний датчик вологості ґрунту v1.2 (резистивні швидко корозують)
- Модуль реле 5 В або MOSFET-модуль (IRLZ44N/AO3400)
- Занурювальна міні-помпа 3–5 В + силіконова трубка
- Окреме живлення для помпи (5 В ≥ 1 А)
Підключення
| Компонент | ESP32 |
|---|---|
| Датчик VCC | 3V3 |
| Датчик GND | GND |
| Датчик AOUT | GPIO 34 (ADC1) |
| Реле IN | GPIO 26 |
| Реле VCC / GND | 5V (VIN) / GND |
Помпа живиться через контакти реле (COM/NO) від окремого джерела 5 В.
Використовуйте тільки піни ADC1 (GPIO 32–39) — ADC2 не працює, коли увімкнений Wi-Fi.
Встановлення ESPHome
Найпростіше — add-on ESPHome Device Builder у Home Assistant. Або локально:
pip install esphome
esphome wizard plant-waterer.yaml
Конфігурація
esphome:
name: plant-waterer
esp32:
board: esp32dev
framework:
type: arduino
logger:
api:
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
sensor:
- platform: adc
pin: GPIO34
id: soil
name: "Soil moisture"
attenuation: 12db
update_interval: 60s
unit_of_measurement: "%"
accuracy_decimals: 0
filters:
- median:
window_size: 5
send_every: 1
# Калібрування: напруга в сухому повітрі → 0 %, у склянці води → 100 %
- calibrate_linear:
- 2.80 -> 0.0
- 1.20 -> 100.0
- clamp:
min_value: 0
max_value: 100
switch:
- platform: gpio
pin: GPIO26
id: pump
name: "Water pump"
restore_mode: ALWAYS_OFF
# inverted: true # розкоментуйте, якщо реле активується низьким рівнем
on_turn_on:
- delay: 10s
- switch.turn_off: pump
number:
- platform: template
id: threshold
name: "Moisture threshold"
optimistic: true
min_value: 10
max_value: 80
step: 1
initial_value: 35
restore_value: true
unit_of_measurement: "%"
interval:
- interval: 30min
then:
- if:
condition:
lambda: 'return id(soil).state < id(threshold).state;'
then:
- logger.log: "Soil is dry, watering"
- switch.turn_on: pump
Прошийте:
esphome run plant-waterer.yaml
Перший раз — по USB, далі оновлення йдуть по Wi-Fi (OTA).
Калібрування датчика
- Тимчасово приберіть фільтр
calibrate_linearі дивіться «сиру» напругу в лозі. - Запишіть значення в сухому повітрі та в склянці води (занурте до позначки).
- Підставте ці два числа в
calibrate_linear. Типово це ≈2.8 В та ≈1.2 В.
Захист
- Помпа не може працювати довше 10 с за один раз — навіть якщо її ввімкнули вручну.
- Якщо датчик відвалився і повертає
NaN, порівняння даєfalse— полив не запуститься. - Перевірка лише раз на 30 хв дає воді час просочитися в ґрунт, тож перелити рослину складно.
Довідка
Повний опис кожного параметра — в офіційній документації ESPHome: компоненти ADC sensor, GPIO switch, Template number та розділ про автоматизації.
Ідеї
- Датчик рівня води в баку (поплавець на GPIO) + сповіщення в HA «долийте воду».
- Кілька горщиків: кілька датчиків на GPIO 32/33/35 і кілька помп.
- Живлення від сонячної панелі та deep sleep.