通过编写YAML配置文件对ESP8266 / ESP32微控制器进行编程

作为Home Assistant智能家居控制系统的粉丝,我最近发现了一个有趣的工具,它与HA紧密集成,并且以前在Habré- ESP Home (以前称为ESPhomeYAML)上未启用。


ESP Home是一组库和工具,可通过用户创建的YAML格式配置文件为ESP8266和ESP32微控制器生成固件。 这极大地简化了中小型复杂性的固件编写,特别是对于那些不擅长为Arduino编程的人,并大大减少了那些精干的人的代码/配置行数。


为了简化设置,支持无线固件更新。


ESP Home支持基于ESP8266和ESP32的设备,这些设备在家庭自动化和其他自制风扇中非常流行,以及数十个传感器和各种外围设备-显示器,网卡等。 为了与已编程的设备交换数据,MQTT,UART,I2C,SPI和API已与Home Assistant集成在一起。


以下是安装ESP Home和简单设备设置的简短示例 Sonoff T1开关为例,这是一台ESP8266,带有一个继电器,一个按钮和一个受控LED。 该示例将同时具有纯Python和Docker的安装步骤。


安装方式


Python 2.7 (由于Platformio依赖性)


pip2 install esphome 

成品镜像中的Docker


 docker pull esphome/esphome 

创建配置文件


ESP Home包含一个向导,可帮助您创建初始配置文件。
可以在本文结尾处介绍的ESP Home WEB界面中执行相同的步骤。


首先,您需要指定:


  • 设备的名称(我们称之为开关)
  • 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 

ESP Home将检查配置文件中是否没有错误,编译并下载固件。 此外,新文件夹将出现在当前文件夹中,其中包含设备名称和platformio项目。


如果编程器/设备未连接到计算机,则可以运行以下命令:


 esphome switch.yaml compile 

并且编译的固件文件将出现在switch / .pioenvs / switch / firmware.bin文件夹中


码头工人
在Linux或MacOS上,可以添加--device = / dev / ttyUSB0 Docker命令-编程器或串行端口的设备地址。


 docker run --rm -v "${PWD}":/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界面


可以通过在Linux和MacOS上运行的WEB界面执行相同的操作。


巨蟒


您需要安装其他依赖项:


 pip2 install tornado esptool 

并使用以下命令运行ESP Home:


 esphome config/ dashboard 

码头工人


该文档说,要使状态指示器正常工作,您需要使用以下命令将容器连接到主机网络:


 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 

之后,您可以转到127.0.0.1:6052并在一个方便的界面中工作:



辛苦了

Source: https://habr.com/ru/post/zh-CN441984/


All Articles