Знакомство с ESPHome. Пишем первую программу.

Здравия всем! Что же, пришло время познакомится с ESPHome. В этой статье я расскажу как настроить ESPHome после установки, как создать новую прошивку и залить её в устройство как по USB, так и по воздуху. Как подключить наше устройство к Home Assistant. Что же начнем!

Введение

Свои первые устройства для автоматизации я собирал на контроллерах Arduino Uno и Arduino Mega теперь уже в далеких 2011-2013 годах. С тех времен утекло много воды. Когда появился теперь уже народный чудо контроллер ESP8266, мир поменялся. Он сразу на борту имел WiFi и Flash память на 512кб — 4мб. И практически сразу был портирован на Arduino SDK.

Главная прелесть ESP8266, в том, что его один раз нужно прошить прошивкой через USB подключение к компьютеру, а последующие изменения можно вносить по воздуху с так называемым OTA режимом.

Первые прошивки для ESP8266 я писал на Arduino SDK. Но после перехода на Home Assistant, я перешел на ESPHome, который разрабатывается специально для подключения к Home Assistant, через API. По этому добавление любого датчика и исполняющего устройства в Home Assistant стало очень просто. Я практически не использую MQTT брокера. Который раньше был узким местом в системе, если MQTT брокер падал вместе с сервером умного дома, происходил коллапс. И приходилось делать прошивки, которые продолжали работать без MQTT брокера.

ESPHome это система для создания прошивок (Firmware) с помощью конфигурационных файлов, написанных на языке Yaml. После освоения его в Home Assistant, написание прошивок на ESPHome дело очень легкое. Для конфигурирования, компиляции и управления ESPHome использует понятный Web интерфейс. Давайте же разберемся с ним

Знакомство с интерфейсом ESPHome

После установки ESPHome, описанной в этой статье, откроем наш web интерфейс.

Как видим из приведенного изображения, вначале у нас список устройств пуст. Но есть 2 функциональные кнопки: NEW DEVICE и SECRET.

Файл secrets

Щелкнем сверху на кнопку SECRET

Откроется редактор файла secrets.yaml. Этот файл, аналогичен файлу secrets.yaml в Home Assistant. Он нужен для хранения персональной информации, к примеру, название WiFI сети и паролем доступа к ней.

Заполним поля wifi_ssid и wifi_password своими данными. И нажмем кнопку SAVE, чтобы применить настройки.

Создание первого устройства

Щелкнем по кнопке NEW DEVICE, откроется мастер создания нового устройства.

Мастер приветствие, он говорит, что первый раз нужно залить прошивку, подключив устройство через USB к компьютеру.
Выбираем тип, в моем случае это ESP8266
Выбираем имя устройства, по опыту, лучше без подчеркивания _ и тире
Мастер сразу предложить скомпилировать и залить прошивку, но мы пропустим этот пункт, нажмем кнопку Skip

Редактор конфигурации

У нас появится первое устройство. Откроем редактор конфигурации, нажав кнопку EDIT

Откроется редактор нашего устройства в файле конфигурации esptest.yaml

Как видно из изображения, используется язык разметки YAML. В редакторе встроена проверка синтаксиса. И если мы что то не правильно ввели, редактор нам сразу же об этом скажет красным квадратом в правом верхнем углу. Если на него навести курсор мыши, всплывет подсказка в какой строке у нас ошибка.

Не забывайте сохранять изменения перед выходом, автоматически они не сохраняются.

Первая программа на ESPHome

Тип устройства

Под общим названием ESP8266 скрывается обширный набор устройств, отличающихся количеством памяти, тактовой частотой процессора и количеством портов, доступных пользователю.

ESPHome работает на основе фраймворка PlatformIO, соответственно какие платы поддерживаются размещены на сайте. Посмотрев таблицу, понимаем, что большинство плат на чипе ESP-12E и ESP-12F идут под общим названием nodemcuv2.

Я в своих тестах использую плату Nodemcu V3 на чипе ESP-12F

Откроем снова редактор нашего нового устройства и отредактируем нашу конфигурацию и изменим плату на nodemcuv2

esp8266:
  board: nodemcuv2

Если в WiFi сети, где будет расположено устройство работает DHCP Server, то можно компилировать прошивку.

Компиляция прошивки

Скомпилируем прошивку, нажав кнопку Install

Откроется мастер создания прошивок

Нажмем Manual download
Нажмем Legacy format

Откроется окно в котором будет вестись лог компиляции прошивки. После завершения компиляции появится кнопка Download, и файл сам начнет скачиваться.

Заливаем первую прошивку через USB

Осталось залить прошивку в наше устройство. Подключим нашу плату по USB к компьютеру. Для прошивки будем использовать утилиту ESPHome Flasher. Скачаем её с гитхаба и запустим.

С недавних пор Windows 10 ужесточило запуск программ. По этому может вылезти такое предупреждение.

Нажмем Подробнее
Нажмем Выполнить в любом случае

Откроется главное окно программы

Выберим нужный Serial Port, на котором весит наше устройство. Нажмем кнопку Browse и выберим нашу прошивку. Осталось нажать кнопку Flash ESP. Начнется проверка и заливка прошивки.

После удачной заливки, наше устройство перезагрузится и выведет информацию о текущем подключении

Можно закрывать приложение. Дальнейшая настройка будет происходить на web интерфейсе ESPHome.

Настройка нового устройства

После тога, как мы залили прошивку в наше устройство и оно перезагрузилось, поменялся интерфейс ESPHome

Как видим, наше устройство поменяло статус с OFFLINE на ONLINE. Кнопка LOGS стала информативной, при ее нажатии происходит коннект к устройству и забирается последний лог

На каждой ESP12 есть распаянный светодиод на 2 порту. Давайте его сделаем аналогом лампы.

esphome:
  name: esptest

esp8266:
  board: nodemcuv2

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "ONenF3FmMEBZD0V5u15E+wp4rNoN3RfqZ3cPJtl10D4="

ota:
  password: "1bcebac7181111892d02a04ea4867d3b"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esptest Fallback Hotspot"
    password: "p1Tkhye6thDA"

captive_portal:
    

output:
  - platform: gpio
    id: led
    pin: GPIO02
    inverted: true

light:
  - platform: binary
    id: in_led
    output: led
    name: Test Lamp

Сохраним настройки и скомпилируем прошивку. Но в этот раз прошьем по воздуху. Для этого нажмем кнопку Wirelessly

Сразу же откроется окно компиляции и загрузки прошивки по воздуху

Дождемся загрузки новой прошивки

Видим, что наш новый светильник появился в логе.

Интеграция в Home Assistant

Подготовка

Для добавления устройства на ESPHome, нам нужны 2 вещи. Это IP адрес устройства и ключ шифрования, указанный в конфигурации. Чтобы узнать IP, если он не был указан в конфигурации, откроем окно лога устройства. Находим поле IP Address и записываем его

Теперь идем в редактор конфигурации и ищем поле key: в подразделе encryption: раздела api: и записываем наш ключ шифрования

Подключение интеграции

Как я раньше говорил, прошивки на основе ESPHome легко интегрируются в Home Assistant. Откроем в web интерфейсе Home Assistant Настройки -> Устройства и службы

Нажимаем кнопку ДОБАВИТЬ ИНТЕГРАЦИЮ

Откроется мастер добавления интеграции

Набираем в поиске первые буквы ESPHome и выбираем нашу интеграцию
Пишем наш IP и нажимаем подтвердить
Вводим наш ключ шифрования
Устройство подключено

Управление устройством

На этом интеграция устройства на ESPHome закончена. Данные теперь прилетают по API в наш Home Assistant. Перейдем на вкладку Устройства и выберем наше устройство esptest

Как видим, наша лампа появилась в интерфейсе и ей можно сразу же и управлять и настраивать.

Заключение

В этой статье я рассказал как настроить ESPHome после установки, как создать новую прошивку и залить её в устройство как по USB, так и по воздуху. Как подключить наше устройство к Home Assistant. Как понятно из статьи делать это очень легко и просто. В дальнейшем я покажу различные свои устройства, которые я использую в повседневной работе.

10 ответов к «Знакомство с ESPHome. Пишем первую программу.»

  1. Доброго всем времени суток. Прошу помощи в HA новичок, не дает сохранить secrets.yaml выдает ошибку:
    ❌ An error occurred saving secrets.yaml
    Подскажите что с этим делать?
    Debian12
    Home Assistant 2023.9.3
    Supervisor 2023.09.4.dev2902
    Пользовательский интерфейс 20230911.0 — latest

  2. Доброго времени суток. Помогите.
    При инсталляции появляется ошибка:
    sh: 1: xtensa-lx106-elf-g++: not found
    Лазил по форумам, но ничего не нашел.

      1. Вот log файл.
        HA установлен на Raspbery 4

        INFO ESPHome 2023.10.6
        INFO Reading configuration /config/esphome/garazh.yaml…
        INFO Generating C++ source…
        INFO Compiling app…
        Processing garazh (board: nodemcuv2; framework: arduino; platform: platformio/espressif8266@3.2.0)
        ———————————————————————————
        HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
        Dependency Graph
        |— ESPAsyncTCP-esphome @ 2.0.0
        |— ESPAsyncWebServer-esphome @ 3.1.0
        |— DNSServer @ 1.1.1
        |— ESP8266WiFi @ 1.0
        |— ESP8266mDNS @ 1.2
        |— noise-c @ 0.1.4
        Compiling .pioenvs/garazh/src/esphome/components/api/api_connection.cpp.o
        sh: 1: xtensa-lx106-elf-g++: not found
        Compiling .pioenvs/garazh/src/esphome/components/api/api_frame_helper.cpp.o
        sh: 1: xtensa-lx106-elf-g++: not found
        Compiling .pioenvs/garazh/src/esphome/components/api/api_pb2.cpp.o
        sh: 1: xtensa-lx106-elf-g++: not found
        *** [.pioenvs/garazh/src/esphome/components/api/api_connection.cpp.o] Error 127
        Compiling .pioenvs/garazh/src/esphome/components/api/api_pb2_service.cpp.o
        *** [.pioenvs/garazh/src/esphome/components/api/api_frame_helper.cpp.o] Error 127
        *** [.pioenvs/garazh/src/esphome/components/api/api_pb2.cpp.o] Error 127
        sh: 1: xtensa-lx106-elf-g++: not found
        *** [.pioenvs/garazh/src/esphome/components/api/api_pb2_service.cpp.o] Error 127
        ========================== [FAILED] Took 2.52 seconds ==========================

          1. Всё. Вопрос закрыт. Тупо взял и поставил НА на Raspberry Pi4 как ОС.

  3. Дофига чего непонятно с точки зрения новичка. Откуда берется encription key? Генерируется при открытии нового «чистого» файла проекта? Что будет если его потерять или забыть? Придётся сносить прошивку и интеграцию и устанавливать по-новой или можно как-то восстановить, вытащив из устройства? Для чего нужна fallback-сеть, в плане какую информацию она выдаёт в веб-интерфейс, если к ней подключиться? Логи? Что будет если IPшник поменяется после перезапуска и переподключения устройства к сети (если в настройках роутера мы не присвоим устройству static IP, оставив DHCP)? Установленная в HA интеграция слетит? Или она умеет работать с динамическими IP? Можно ли на уровне прошивки установить конкретный статический IP? Как? Про азы синтаксиса языка Yaml не спрашиваю, примеры есть на сайте проекта. В общем, довольно поверхностно, тема не раскрыта, хотя и понимаю, что это больше блог для личных заметок а не ответы на вопросы для новичков. Однако был бы благодарен за ещё один материал с более подробным описанием, с живыми примерами желательно.

    1. Здравствуйте, Константин!
      1. encription key генерируется при создании нового проекта. Либо вы его берете из головы!
      2. Он нужен для связи HA b ESPHome через API
      3. Если потерять его или забыть, придется перекомпилировать проект и заливать заново.
      4. Как вытащить его из устройства я не знаю
      5. Fallback-сеть нужна для подключения к устройству. По умолчанию можно получить с нее логи. Если в конфиге был прописан web интерфейс, то можно будет подключиться к нему.
      6. Если HA и esp в одной сети, то HA сам увидит, что устройство поменялось. Если в разных он будет ждать тот же IP.
      7. Я в своих рабочих проектах использую только статический IP, прописанный в конфиге. Пример:
      wifi:
      networks:
      — ssid: !secret myssid
      password: !secret myssid_pass

      manual_ip:
      static_ip: 192.168.0.76
      gateway: 192.168.0.1
      subnet: 255.255.255.0

      8. DHCP использую только при тестировании.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.