Хабрахабр

Программирование микроконтроллеров ESP8266/ESP32 написанием YAML конфиг файлов

Будучи поклонником системы управления "умным домом" Home Assistant я недавно открыл для себя интересный инструмент, тесно с HA интегрированный и ранее на Хабре не освещенный — ESP Home (ранее ESPhomeYAML).

Это значительно упрощает написание прошивок малого и среднего уровня сложности в особенности для тех, кто не силен в программировании под Arduino и сильно сокращает количество строк кода/конфигурации для тех, кто силен. ESP Home представляет собой набор библиотек и инструментов, генерирующих прошивку для микроконтроллеров ESP8266 и ESP32 из созданного пользователем конфиг файла в формате YAML.

Для удобства настройки поддерживается обновление прошивки по воздуху.

Для обмена данными с запрограммированным устройством поддерживаются MQTT, UART, I2C, SPI и API, интегрированное с Home Assistant. ESP Home поддерживает устройства на базе ESP8266 и ESP32, очень популярных среди любителей домашней автоматизации и прочих самоделкиных, а так же несколько десятков сенсоров и различную периферию — дисплеи, сетевые карты и т.д.

В примере будут шаги установки одновременно для чистого Python и Docker. Ниже короткий пример установки ESP Home и простой настройки устройства на примере выключателя Sonoff T1, который представляет из себя ESP8266 с одним реле, одной кнопкой и одним управляемым светодиодом.

Установка

7 (из-за зависимостей Platformio) Python 2.

pip2 install esphome

Docker из готового образа

docker pull esphome/esphome

Создание конфигурационного файла

ESP Home включает в себя визард, который помогает создать начальный конфигурационный файл.
Эти же шаги можно проделать в WEB интерфейсе ESP Home, про который написано в конце статьи.

Для начала нужно указать:

  • Название устройства (назовем его switch)
  • ESP8266 (в примере) или ESP32
  • Тип платы (у нас esp01_1m)
  • Назване точки доступа WiFi
  • Пароль от WiFi
  • Пароль от API Home Assistant, он же будет по умолчанию использоваться для обновления прошивки по воздуху.

Результатом работы визарда будет файл switch.yaml в текущей папке примерно такого вида:

esphome: name: switch platform: ESP8266 board: esp01_1m wifi: ssid: 'wifi_ap' password: 'wifi_password' # Enable logging
logger: # Enable Home Assistant API
api: password: 'api_password' ota: password: 'api_password'

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

Первая прошивка

Теперь, если подключить контроллер к компьютеру по USB (NodeMCU) или через программатор можно заливать прошивку.

Python:

esphome switch.yaml run

Кроме того в текущей папке появится новая папка с именем вашего устройства и проектом platformio внутри. ESP Home проверит, что в файле конфигурации нет ошибок, скомпилирует и загрузит прошивку.

Если программатор/устройство не подключены к компьютеру можно выполнить команду:

esphome switch.yaml compile

и скомпилированный файл прошивки появится в папке switch/.pioenvs/switch/firmware.bin

Docker
На Linux или MacOS можно добавить в --device=/dev/ttyUSB0 Docker-команду — адрес устройства программатора или серийного порта.

docker run --rm -v "$":/config --device=/dev/ttyUSB0 -it esphome/esphome switch.yaml compile

Аналогично команде esphome в результате запуска контейнера появится папка switch/.pioenvs/switch/firmware.bin

Бинарный файл прошивки можно загрузить на контроллер через Arduino IDE.

После этого устройство можно отключить от USB и дальнейшие обновления прошивки будут проходить автоматически по воздуху.

Настройка выключателя

Дальше можно добавлять необходимые компоненты:

Сенсоры

# Настройка сенсоров
binary_sensor: # Считывание нажатий кнопки - platform: gpio pin: number: GPIO0 mode: INPUT_PULLUP inverted: True name: "Switch button" # Автоматизация, для управления реле по нажатию кнопки on_press: - switch.toggle: relay_1 # Сенсор, отчитывающийся о статусе утройства - platform: status name: "Switch Status"

Реле

switch: # Управление реле - platform: gpio name: "Switch Relay 1" pin: GPIO12 id: relay_1

Светодиоды

output: # Регистрация синего светодиода, как диммируемого выхода - platform: esp8266_pwm id: blue_led pin: GPIO13 inverted: True light: # Превращаем выход в "лампочку", которой можно управлять - platform: monochromatic name: "Switch Blue LED" output: blue_led id: blue_led_light # ID для того, чтобы обращаться к диоду в командах автоматизации

Чтобы в итоге получить:

Законченный конфиг

esphome: name: switch platform: ESP8266 board: esp01_1m # Павило автоматизации, влючающее синий светодиод после запуска устройства. on_boot: # Минимальный приоритет priority: -10 then: - light.turn_on: blue_led_light wifi: ssid: 'wifi_ap' password: 'wifi_password' # Модуль логирования
logger: # Активация Home Assistant API
api: password: 'api_password' # Активация прошивки по воздуху
ota: password: 'api_password' # Активация web сервера
# Ест довольно много ресурсов и лучше отключать его после финальной настройки
web_server: port: 80 # Активация MQTT
mqtt: broker: 10.0.0.2 username: mqt_user password: mqtt_password # Настройка сенсоров
binary_sensor: # Считывание нажатий кнопки - platform: gpio pin: number: GPIO0 mode: INPUT_PULLUP inverted: True name: "Switch button" # Автоматизация, для управления реле по нажатию кнопки on_press: - switch.toggle: relay_1 # Сенсор, отчитывающийся о статусе утройства - platform: status name: "Switch Status" switch: # Управление реле - platform: gpio name: "Switch Relay 1" pin: GPIO12 id: relay_1 output: # Регистрация синего светодиода, как диммируемого выхода - platform: esp8266_pwm id: blue_led pin: GPIO13 inverted: True light: # Превращаем выход в "лампочку", которой можно управлять - platform: monochromatic name: "Switch Blue LED" output: blue_led id: blue_led_light # ID для того, чтобы обращаться к диоду в командах автоматизации

WEB интерфейс

Те же действия можно проделать через WEB интерфейс, который работает на Linux и MacOS.

Python

Нужно установить дополнительные зависимости:

pip2 install tornado esptool

и запустить ESP Home такой командой:

esphome config/ dashboard

Docker

В документации написано, что для работы индикаторов статуса нужно подключить контейнер к сети host такой командой:

docker run --rm --net=host -v "${PWD}":/config -it esphome/esphome

У меня она не заработала и я использовал:

docker run --rm --net=bridge -p 6052:6052 -v "${PWD}":/config -it esphome/esphome

0. После этого можно зайти на 127. 1:6052 и работать в удобном интерфейсе: 0.

Приятной работы.

Теги
Показать больше

Похожие статьи

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

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

Кнопка «Наверх»
Закрыть