YAML-файл вместо скетча, автообновление по воздуху, интеграция с Home Assistant в два клика. ESPHome превращает ESP32 в готовое устройство умного дома — и программировать для этого не нужно.

Установка ESPHome в Docker — хороший вариант, если Home Assistant у тебя нет или он стоит на другой машине.
bashpip install esphomeКоманда esphome станет доступна в терминале. Можно работать без веб-интерфейса — из CLI:
bashesphome run my_device.yamlЭто скомпилирует прошивку и зальёт на устройство. Вариант для тех, кто живёт в терминале.
Открываем ESPHome Dashboard. Жмём New Device, задаём имя (например, balcony-sensor), выбираем тип платы (ESP32).
ESPHome создаст базовый YAML:
yamlesphome:
name: balcony-sensor
friendly_name: "Датчик на балконе"
esp32:
board: esp32dev # Для ESP32 DevKit / WROOM-32
framework:
type: arduino # Или esp-idf — об этом ниже
wifi:
ssid: "YOUR_WIFI_SSID"
password: "YOUR_WIFI_PASSWORD"
# Резервная точка доступа — если не может подключиться к Wi-Fi
ap:
ssid: "Balcony-Sensor Fallback"
password: "fallback_password"
# Позволяет управлять устройством через Home Assistant
api:
encryption:
key: "сгенерированный_ключ"
# OTA-обновления
ota:
platform: esphome
password: "ota_password"
logger:Это — скелет. Устройство подключится к Wi-Fi, поднимет API для Home Assistant, включит OTA и логирование. Уже можно прошивать — но пока оно ничего полезного не делает.
DS18B20 — самый популярный датчик для ESPHome. Одна шина, несколько датчиков, водонепроницаемый корпус.
Подключение: VCC → 3.3V, GND → GND, Data → GPIO 4 (через подтягивающий резистор 4.7 кОм к 3.3V).
Добавляем в конфиг:
yaml# Шина OneWire на GPIO 4
one_wire:
- platform: gpio
pin: GPIO4
sensor:
- platform: dallas_temp
address: 0x1234567890ABCDEF # ⚠️ Адрес конкретного датчика
name: "Температура балкон"
update_interval: 30s
filters:
- sliding_window_moving_average:
window_size: 5
send_every: 3Адрес датчика: при первой прошивке ESPHome сам покажет адреса всех обнаруженных DS18B20 в логах. Скопируй и вставь.
Фильтр sliding_window_moving_average — сглаживание. Датчик иногда шумит на ±0.5°C, скользящее среднее убирает выбросы. ESPHome поддерживает кучу фильтров: медиана, экспоненциальное среднее, калибровка, порог — настраивается под задачу.
BME280 (комбинированный датчик) подключается по I2C (шина для датчиков):
yamli2c:
sda: GPIO21
scl: GPIO22
sensor:
- platform: bme280_i2c
temperature:
name: "Температура комната"
pressure:
name: "Давление"
humidity:
name: "Влажность комната"
update_interval: 60s
address: 0x76 # Или 0x77 — зависит от модуляТри сенсора из одного чипа, все автоматически появятся в Home Assistant как отдельные сущности.
yamlswitch:
- platform: gpio
pin: GPIO5
name: "Реле полива"
id: relay_wateringВ Home Assistant появится переключатель. Щёлкнул — реле включилось. Щёлкнул ещё раз — выключилось. Можно добавить в автоматизации: «включать полив каждый день в 7 утра на 15 минут».
Первая прошивка ESP32 через ESPHome — только через USB. Устройство ещё не в сети, OTA не работает.
Нажми на устройство → три точки → Install → Plug into this computer. Dashboard скомпилирует прошивку и зальёт через браузер (используется Web Serial API — работает в Chrome и Edge).
Если браузер не видит устройство — нужен драйвер USB-UART. CP2102 или CH340 — зависит от платы. Детали — в документации конкретной платы.
bashesphome run balcony-sensor.yamlESPHome спросит, куда заливать: USB или OTA. Первый раз — USB.
После первой прошивки устройство в сети. В Dashboard рядом с именем появится зелёный кружок (онлайн). Теперь прошивка — по воздуху:
Install → Wirelessly. Или из CLI:
bashesphome run balcony-sensor.yaml
# Выбираешь OTA вместо USBИзменил конфиг, нажал Install — новая прошивка полетела по Wi-Fi. Не нужно снимать устройство с потолка, выковыривать из корпуса, искать кабель. Это, пожалуй, главное преимущество ESPHome перед ручной прошивкой через Arduino IDE.
Если ESPHome устройство и Home Assistant в одной сети — HA обнаружит его автоматически.
Settings → Devices & Services → появится уведомление «Discovered: balcony-sensor». Жмёшь Configure, вводишь ключ шифрования API (тот, что в YAML) — и устройство добавлено. Все сенсоры, переключатели, кнопки — сразу в интерфейсе HA.
Настройка ESPHome в Home Assistant — по сути, одно нажатие. Дальше показания появляются в дашбордах, доступны в автоматизациях, пишутся в историю.
Если Home Assistant нет — ESPHome всё равно полезен. Встроенный веб-сервер позволяет управлять устройством через браузер:
yamlweb_server:
port: 80Открываешь IP устройства — видишь все сенсоры и переключатели. Без HA, без облака, без приложений.
ESP32 как мост для BLE-устройств (Bluetooth Low Energy — энергоэффективный Bluetooth). Xiaomi-термометры, трекеры, BLE-маяки — всё, что Home Assistant не видит напрямую (потому что Bluetooth-радиус маленький), ESP32 подхватит и передаст по Wi-Fi.
yamlesp32_ble_tracker:
scan_parameters:
active: true
bluetooth_proxy:
active: trueЧетыре строки — и ESP32 стал Bluetooth-прокси. Разбросай пару штук по дому — и Home Assistant видит BLE-устройства в каждой комнате.
ESPHome поддерживает ИК-передатчики и протоколы десятков производителей кондиционеров.
yamlremote_transmitter:
pin: GPIO14
carrier_duty_percent: 50%
climate:
- platform: midea # Или daikin, lg, samsung, gree...
name: "Кондиционер спальня"
transmitter_id: remote_transmitterВ Home Assistant появится полноценный термостат: режим, температура, скорость вентилятора. ESPHome управляет кондиционером через ИК — как обычный пульт, только умный.
Импульсный выход водосчётчика (геркон или датчик Холла) подключается к GPIO:
yamlsensor:
- platform: pulse_counter
pin: GPIO12
name: "Расход воды"
unit_of_measurement: "л"
filters:
- multiply: 0.1 # 10 импульсов = 1 литр (зависит от счётчика)
total:
name: "Всего воды"
unit_of_measurement: "м³"
filters:
- multiply: 0.001ESPHome считает импульсы, пересчитывает в литры, отправляет в Home Assistant. Там — графики, уведомления о расходе, обнаружение протечек.
LD2410 (микроволновый датчик присутствия) — модная штука для умного дома. Определяет наличие человека, даже если он сидит неподвижно (в отличие от PIR-датчиков).
yamluart:
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 256000
ld2410:
binary_sensor:
- platform: ld2410
has_target:
name: "Присутствие"
has_moving_target:
name: "Движение"
has_still_target:
name: "Неподвижный объект"ESPHome работает не только с классическим ESP32.
ESP32-C3 (компактный одноядерный микроконтроллер на RISC-V):
yamlesp32:
board: esp32-c3-devkitm-1
framework:
type: esp-idf # Для C3 рекомендуется esp-idf, не arduinoESP32-C3 в ESPHome — хороший выбор для компактных датчиков. Super Mini помещается в любой корпус.
ESP8266 (предыдущее поколение):
yamlesp8266:
board: nodemcuv2ESPHome поддерживает ESP8266 полноценно. Для простых датчиков (температура, влажность, реле) — хватает. Ограничения: нет Bluetooth, меньше GPIO, меньше памяти.
Sonoff и готовые устройства: многие Wi-Fi-реле и выключатели (Sonoff Basic R2, Sonoff TH, CB3S-модули) перепрошиваются на ESPHome. После перепрошивки — никакого облака, локальное управление через Home Assistant.
Кстати, ESPHome с версии 2023.x начал поддерживать чипы BK7231N (Beken) — те самые, на которые Tuya (платформа для IoT-устройств) массово перешла с ESP8266. Если твоё «тупое» Wi-Fi-реле внезапно оказалось на BK7231N, а не на ESP — теперь и его можно перевести на ESPHome.
В конфиге ESP32 есть параметр framework: type. Два варианта:
Для ESP32-C3 и ESP32-S3 ESPHome рекомендует esp-idf. Для классического ESP32 — arduino по умолчанию, esp-idf если нужен Bluetooth Proxy.
После первой прошивки по USB устройство должно подключиться к Wi-Fi и появиться онлайн. Если не появляется:
Ошибка при компиляции: Linking .pio/build/.../firmware.elf ... region 'iram0_0_seg' overflowed. Слишком много компонентов для доступной памяти.
Решения: уменьшить количество компонентов, использовать esp-idf вместо arduino (экономнее по памяти), выбрать плату с бо́льшим Flash (8 или 16 МБ).
Частая проблема, особенно на ESP8266. Причины: слабый сигнал, перегруженный канал Wi-Fi, нехватка памяти.
Что помогает:
yamlwifi:
power_save_mode: none # Отключить энергосбережение Wi-Fi
fast_connect: true # Не сканировать все каналы, подключаться к известномуESPHome — инструмент, который закрывает потребности домашней автоматизации без написания кода. Датчики, реле, дисплеи, кондиционеры, счётчики — всё описывается в YAML и прошивается одной кнопкой.
Следующие шаги:
climate + thermostat = PID-регулятор прямо на ESP32Но главное — начни с одного датчика. Когда увидишь, как он появляется в Home Assistant через 30 секунд после прошивки — захочется ещё.