资讯动态

ESPHome ESP32 YAML 配置实战:一块门磁到全屋自动化只要 5 段代码

发布时间:2026/9/14 12:19:52 来源:尧图企业网站定制
ESPHome ESP32 YAML 配置实战一块门磁到全屋自动化只要 5 段代码【免费下载链接】esphomeESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems.项目地址: https://gitcode.com/GitHub_Trending/es/esphome拿一块 ESP32 开发板接上一个门磁在 ESPHome 里只需要写十几行 YAML 配置门一开Home Assistant 面板立刻出现状态变化。不用手写 C 驱动也不用自己搭交叉编译工具链。这篇文章先给出一份能直接跑通的最小配置然后讲清配置如何变成固件的生成链路再依次覆盖传感器接入、MQTT 联动、避坑清单和自定义组件。门磁为例一份最小可用配置完整文件只需要四个段落基础信息、网络、API、一个二进制传感器。esphome: name: door-sensor wifi: ssid: !secret wifi_ssid password: !secret wifi_password api: encryption: key: !secret api_key ota: binary_sensor: - platform: gpio pin: GPIO14 name: 门磁 device_class: door filters: - delayed_on: 250ms # 滤掉机械触点抖动!secret这个标签在esphome/yaml_util.py里注册取值从独立的 secrets 文件读取这样密码不会被带进要提交到版本库的配置里# secrets.yaml与主配置同目录不纳入版本控制 wifi_ssid: HomeWifi wifi_password: 12345678 api_key: 32位十六进制密钥 mqtt_user: admin mqtt_password: 你的密码记住这套写法之后加组件就是继续写列表项加温湿度传感器补一段sensor: - platform: dht加一颗 LED 补一段light:语法规律始终一致。一图看懂YAML 如何变成可烧录固件写完配置执行esphome run背后是一条固定的管线各环节分工明确解析与校验esphome/config.py读入 YAML 后按每个组件的 schema 逐项检查引脚写错、key 拼错都会直接给出报错位置。代码生成esphome/codegen.py把配置项逐个翻译成 C 语句最终由esphome/writer.py把main.cpp落到构建目录。编译与写入交给 PlatformIO 或 ESP-IDF 完成产出 bin 文件后写进设备。对日常使用有两个关键含义。其一构建目录里的 C 全是机器写的你不需要读它——配置合法编译就能过。其二是增量编译改一个传感器的引脚再重跑只重新生成并编译受影响的部分通常十几秒出结果。环境搭建与首台设备联网准备环境就是三条命令的事git clone https://gitcode.com/GitHub_Trending/es/esphome cd esphome ./script/setup # 自动建虚拟环境并装依赖 source .esphome-venv/bin/activate esphome run door-sensor.yaml第一次编译会明显变慢因为要为目标芯片下载工具链和框架ESP32 系列大约几百 MB之后全部走缓存。esphome run编完会直接经串口写入设备启动后向路由器申请 IPHome Assistant 的 ESPHome 集成通过 mDNS 自动发现它。此后可以不再插串口配置里的ota:段让设备常驻一个更新通道再次esphome run时固件走远程下发设备自己拉取、校验并重启。家里几十台设备时这就是批量维护能成立的原因——逐台刷新不用拆机。如果首次配网失败设备会回退成以自己的名字命名的热点通过浏览器跳转的引导页补上 WiFi 账号即可这是忘了密码时的兜底路径。传感器接入与 MQTT、Home Assistant 联动接入 DHT 温湿度传感器顺手把脏数据挡在面板之前sensor: - platform: dht pin: GPIO4 model: AM2302 update_interval: 15s temperature: name: 室内温度 filters: - sliding_window_moving_average: # 滑动窗口平均 window_size: 5 send_every: 3 - delta: 0.5 # 变化不足 0.5 不上报 - lambda: - if (x -10 || x 60) return NaN; return x; humidity: name: 室内湿度过滤链每一环职责单一滑动平均抹掉毛刺delta压掉小幅抖动lambda丢弃物理上不可能的读数返回 NaN 表示本次不更新。三层叠加后曲线在面板上会稳很多。与 Home Assistant 打通走 MQTTmqtt: broker: 192.168.1.100 username: !secret mqtt_user password: !secret mqtt_password discovery: true binary_sensor: - platform: gpio pin: GPIO14 name: 门磁 on_press: - mqtt.publish: topic: home/living_room/door payload: OPENdiscovery: true让设备上线时向 broker 自动上报实体描述Home Assistant 里不用手工建条目。on_press是一个动作钩子同一位置还能写if、delay、light.turn_on等动作把事件串成链全程不碰回调函数。避坑清单三个高频问题WiFi 掉线的三种解法wifi: networks: - ssid: Office-5G password: !secret wifi_password priority: 10 - ssid: Office-Guest password: !secret wifi_password manual_ip: static_ip: 192.168.1.100 gateway: 192.168.1.1 subnet: 255.255.255.0 power_save_mode: none reboot_timeout: 5min三个抓手按顺序试用networks列多个候选并按priority排序让设备在两个 AP 之间自己选路DHCP 不稳就换manual_ip固定地址ESP32 频繁断流时把power_save_mode设为none代价是待机功耗略升。传感器偶尔吐脏数据上面那组 filters 是标准解法。再补一层思路对确实滤不掉的传感器在自动化条件里加threshold判断让异常值根本不进面板而不是事后去清洗历史曲线。固件超出分区上限esphome: name: optimized_device build_flags: - -ffunction-sections - -fdata-sections - -Wl,--gc-sections platformio_options: board_build.partitions: min_spiffs.csv logger: level: WARN三条build_flags让链接器剔除没被引用的代码段min_spiffs.csv把文件系统分区缩到最小给程序腾出空间日志级别降到WARN还能省运行时内存。再挤就回头砍功能Web 服务器、用不上的 BLE 服务都是大块头。进阶自定义组件怎么写、多设备怎么联动esphome/components/下有四百多个内置组件遇到没有现成驱动的硬件自定义组件就是两个文件一个声明配置 schema 的__init__.py一对做硬件交互的.h/.cpp。# custom_components/my_led/__init__.py import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import output from esphome.const import CONF_ID my_led_ns cg.esphome_ns.namespace(my_led) MyLED my_led_ns.class_(MyLEDOutput, output.FloatOutput) CONFIG_SCHEMA output.FLOAT_OUTPUT_SCHEMA.extend( {cv.Required(CONF_ID): cv.declare_id(MyLED)} )把目录放进custom_components/配置里写platform:即可注册和校验由框架接管风格与内置组件完全一致。多设备联动有一条省事的路让 MQTT 充当消息总线。运动传感器触发时mqtt.publish一条事件灯光设备用mqtt_subscribe订阅同一 topic收到就执行light.turn_on。两台设备互不知道对方存在只认 topic——将来再扩一台订阅者现有配置一行不用动。收尾ESPHome 的定位一句话就能说清它架在硬件与家庭自动化之间的一层统一抽象用一套 YAML 抹平 ESP32、ESP8266、RP2040 的行为差异对想深入的人自定义组件层又留足了向下写 C 的空间。从一台门磁到全屋十几台设备变的只有那份 YAML。【免费下载链接】esphomeESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems.项目地址: https://gitcode.com/GitHub_Trending/es/esphome创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价