← До всіх проєктів
Автоматизація Середній

Автополив рослин на ESPHome з інтеграцією в Home Assistant

Ємнісний датчик вологості ґрунту + помпа через реле. Уся логіка — у YAML-конфігу ESPHome: полив за порогом, захист від переливу, поріг змінюється з Home Assistant.

Складність
Середній
Час
2–3 h
Категорія
Автоматизація

Концепція

Замість написання 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).

Калібрування датчика

  1. Тимчасово приберіть фільтр calibrate_linear і дивіться «сиру» напругу в лозі.
  2. Запишіть значення в сухому повітрі та в склянці води (занурте до позначки).
  3. Підставте ці два числа в 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.