Programación de microcontroladores ESP8266 / ESP32 escribiendo archivos de configuración YAML

Como fanático del sistema de control inteligente del hogar Home Assistant , recientemente descubrí una herramienta interesante que está estrechamente integrada con HA y que anteriormente no estaba encendida en Habré - ESP Home (anteriormente ESPhomeYAML).


ESP Home es un conjunto de bibliotecas y herramientas que generan firmware para los microcontroladores ESP8266 y ESP32 a partir de un archivo de configuración creado por el usuario en formato YAML. Esto simplifica enormemente la escritura de firmware de pequeña y mediana complejidad, especialmente para aquellos que no son buenos para programar para Arduino y reduce en gran medida el número de líneas de código / configuración para aquellos que son fuertes.


Para facilitar la configuración, se admite una actualización de firmware por aire.


ESP Home es compatible con dispositivos basados ​​en ESP8266 y ESP32, que son muy populares entre la automatización del hogar y otros ventiladores caseros, así como varias docenas de sensores y varios periféricos: pantallas, tarjetas de red, etc. Para intercambiar datos con el dispositivo programado, MQTT, UART, I2C, SPI y API están integrados, integrados con Home Assistant.


A continuación se muestra un breve ejemplo de la instalación de ESP Home y la configuración simple del dispositivo en el ejemplo del interruptor Sonoff T1 , que es un ESP8266 con un relé, un botón y un LED controlado. El ejemplo tendrá pasos de instalación para Python puro y Docker al mismo tiempo.


Instalación


Python 2.7 (debido a dependencias de Platformio )


pip2 install esphome 

Docker de la imagen terminada


 docker pull esphome/esphome 

Crear un archivo de configuración


ESP Home incluye un asistente que lo ayuda a crear el archivo de configuración inicial.
Los mismos pasos se pueden realizar en la interfaz WEB de ESP Home, que se describe al final del artículo.


Primero debes especificar:


  • El nombre del dispositivo (llamémoslo switch)
  • ESP8266 (en el ejemplo) o ESP32
  • Tipo de placa (tenemos esp01_1m)
  • Nombrados puntos de acceso WiFi
  • Contraseña WiFi
  • Contraseña del API Home Assistant, también se usará de manera predeterminada para actualizar el firmware por aire.

El resultado del trabajo del asistente será el archivo switch.yaml en la carpeta actual de aproximadamente este tipo:


 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' 

Esto es suficiente para compilar el firmware y hacer más cambios por aire.


Primer firmware


Ahora, si conecta el controlador a la computadora a través de USB (NodeMCU) o mediante el programador, puede cargar el firmware.


Python :


 esphome switch.yaml run 

ESP Home verificará que no haya errores en el archivo de configuración, compilará y descargará el firmware. Además, aparecerá una nueva carpeta en la carpeta actual con el nombre de su dispositivo y el proyecto de plataforma dentro.


Si el programador / dispositivo no está conectado a la computadora, puede ejecutar el comando:


 esphome switch.yaml compile 

y el archivo de firmware compilado aparecerá en la carpeta switch / .pioenvs / switch / firmware.bin


Docker
En Linux o MacOS, puede agregar el comando --device = / dev / ttyUSB0 Docker: la dirección del dispositivo del programador o el puerto serie.


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

De manera similar al comando esphome, como resultado de iniciar el contenedor, aparecerá la carpeta switch / .pioenvs / switch / firmware.bin


El archivo de firmware binario se puede descargar al controlador a través del IDE de Arduino.


Después de eso, el dispositivo se puede desconectar de USB y se realizarán automáticamente más actualizaciones de firmware por el aire.


Cambiar configuración


Luego puede agregar los componentes necesarios:


Sensores
 #   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" 

Relé
 switch: #   - platform: gpio name: "Switch Relay 1" pin: GPIO12 id: relay_1 

LEDs
 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  ,        

Para finalmente obtener:


Config terminado
 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  ,        

Interfaz WEB


Las mismas acciones se pueden realizar a través de la interfaz WEB, que se ejecuta en Linux y MacOS.


Pitón


Necesita instalar dependencias adicionales:


 pip2 install tornado esptool 

y ejecuta ESP Home con este comando:


 esphome config/ dashboard 

Docker


La documentación dice que para que los indicadores de estado funcionen, debe conectar el contenedor a la red host con el siguiente comando:


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

Ella no trabajó para mí y solía:


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

Después de eso, puede ir a 127.0.0.1:6052 y trabajar en una interfaz conveniente:



Que tengas un buen trabajo.

Source: https://habr.com/ru/post/441984/


All Articles