ESP32 — недорогой микроконтроллер с Wi-Fi и Bluetooth, который часто берут для датчиков температуры, реле и кнопок. Классический путь требует Arduino IDE, библиотек и навыков C++, а ещё пары вечеров на отладку. ESPHome предлагает другой подход: устройство описывается в YAML, программа сама собирает прошивку, заливает её по USB или по сети и отдаёт данные в Home Assistant. Разберём полный цикл — от установки до диагностики, когда плата не выходит на связь.

Что понадобится

  • Плата ESP32: классическая esp32dev, esp32-s3-devkitc-1 или esp32-c3-devkitm-1. Название платы в конфиге должно совпадать с реальной.
  • USB-кабель с линиями данных, а не только зарядный. Это самая частая причина «плата не определяется».
  • Компьютер с Linux, Python 3.11+ или Docker.
  • Датчики с питанием 3,3 В. Если модуль рассчитан на 5 В, нужен преобразователь уровней.
  • Опционально — Home Assistant в той же сети.

Всё, что связано с 220 В, оставьте электрику. ESP32 работает с низким напряжением, а готовые реле на DIN-рейку подключаются к сети только специалистом.

Установка и первый проект

Проще всего поставить ESPHome через pipx, чтобы не смешивать зависимости с системным Python.

sudo apt install pipx
pipx ensurepath
pipx install esphome
esphome version

Мастер создаст заготовку и спросит имя, плату, Wi-Fi и пароль. Файл можно править вручную — это обычный YAML.

esphome wizard kitchen.yaml
esphome config kitchen.yaml

Команда config проверяет синтаксис и подставляет секреты, но не собирает прошивку. Если нужен веб-интерфейс, запустите официальный контейнер:

docker run --rm --net=host -v "$PWD":/config \
  -it ghcr.io/esphome/esphome dashboard /config

Анатомия конфигурации

Минимальный рабочий конфиг для датчика выглядит так. Обратите внимание на esp-idf: для новых плат это основной фреймворк, Arduino оставьте только для старых проектов.

substitutions:
  name: kitchen-sensor
  friendly_name: "Кухня: датчик"

esphome:
  name: ${name}
  friendly_name: ${friendly_name}

esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger:
  level: INFO

api:
  encryption:
    key: !secret kitchen_api_key

ota:
  - platform: esphome
    encryption:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.1.51
    gateway: 192.168.1.1
    subnet: 255.255.255.0
  ap:
    ssid: "${name} fallback"
    password: !secret fallback_password

captive_portal:

Секреты храните в secrets.yaml рядом с конфигом. Ключ API — 32 байта в base64, его удобно сгенерировать командой openssl rand -base64 32.

wifi_ssid: "home-iot"
wifi_password: "..."
fallback_password: "..."
kitchen_api_key: "BASE64_KEY"

В ESPHome 2026.9 и новее пустой блок encryption: у OTA наследует ключ API. Отдельный пароль не нужен, а обновление по сети шифруется тем же ключом. На старых прошивках придётся один раз обновить устройство по USB, иначе смена схемы авторизации отрежет OTA.

Датчики, кнопки и фильтры

Адреса I²C удобно искать сканером: включите scan: true, посмотрите лог и уберите лишний вывод. BME280 обычно виден как 0x76 или 0x77.

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true

sensor:
  - platform: bme280_i2c
    address: 0x76
    temperature:
      name: "Температура"
    humidity:
      name: "Влажность"
    pressure:
      name: "Давление"
    update_interval: 60s

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO27
      mode:
        input: true
        pullup: true
    name: "Дверь"
    filters:
      - delayed_on: 50ms
      - delayed_off: 200ms

Фильтры гасят дребезг: delayed_on подтверждает срабатывание, delayed_off не даёт короткому отпусканию сбросить сенсор. Для геркона на двери этого достаточно. Для DHT22 используйте платформу dht с пином и моделью DHT22, но помните, что она медленнее и капризнее к питанию.

На классическом ESP32 АЦП2 (GPIO 0, 2, 4, 12–15, 25–27) конфликтует с Wi-Fi. Для аналоговых датчиков берите выводы АЦП1: GPIO 32–39. Выводы 34–39 работают только на вход и не имеют подтяжки.

Первая прошивка и обновления

ls /dev/ttyUSB*
sudo usermod -aG dialout "$USER"
esphome run kitchen.yaml --device /dev/ttyUSB0
esphome logs kitchen.yaml --device 192.168.1.51

После добавления в группу dialout нужно перелогиниться. Первая сборка занимает несколько минут: скачиваются платформа и зависимости. Дальше esphome run kitchen.yaml без --device предложит OTA и обновит плату по Wi-Fi.

Если плата на ESP32-S3 или C3 с нативным USB, порт может называться /dev/ttyACM0. Иногда помогает зажать BOOT при подключении. Для плат с UART-переходником CH340 или CP2102 проверьте, что модуль ядра загрузился: dmesg | tail -20.

Диагностика и типовые ошибки

  • Появилась сеть «kitchen-sensor fallback». Плата не подключилась к Wi-Fi. Подключитесь к ней, откройте 192.168.4.1 и задайте сеть через captive portal. Пароль указан в блоке ap.
  • OTA падает с ошибкой авторизации. Ключ в конфиге не совпадает с прошитым. Обновите устройство по USB один раз, затем повторите OTA.
  • Плата перезагружается по кругу. Скорее всего, дело в просадке питания или в boot-loop из-за вывода, который тянет GPIO0, 2, 12 или 15 при старте. Питайте от качественного блока 5 В с запасом по току.
  • В Home Assistant нет сущностей. Проверьте, что порт 6053 доступен, устройства в одной подсети и ключ API скопирован верно. Статический IP надёжнее mDNS.
  • После смены фреймворка сборка странно себя ведёт. Выполните esphome clean kitchen.yaml и соберите заново.

Полезно смотреть не только esphome logs, но и уровень DEBUG для Wi-Fi и API. Не оставляйте его навсегда: отладочные логи замедляют устройство и забивают журнал.

Чек-лист перед установкой

  • Проверьте, что все датчики питаются от 3,3 В и не подают 5 В на GPIO.
  • Закрепите провода и подпишите их: через месяц вы не вспомните, какой GPIO куда шёл.
  • Для BME280 сделайте вентиляционные прорези: ESP32 греется и завышает температуру на 2–4 °C.
  • Не используйте GPIO 6–11: они заняты флеш-памятью.
  • Сохраните secrets.yaml в менеджере паролей и сделайте резервную копию конфигов.
  • Проверьте поведение при пропадании Wi-Fi: устройство должно продолжать работать локально.

Итог

ESPHome убирает из разработки прошивок большую часть рутины: вы описываете пины и сущности, а сборку, OTA и интеграцию берёт на себя инструмент. Начните с одной платы и одного датчика, проверьте питание и статический IP, затем добавляйте остальные. Главные грабли — неверно выбранная плата, плохой USB-кабель и ключи API, поэтому держите под рукой кабель и esphome logs.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте