ESPHome 是一个开源固件框架,它简化了为常见的支持 WiFi 的微控制器创建自定义固件的过程。借助 ESPHome,你可以:
- 使用简单的YAML配置文件创建自定义智能家居设备
- 与Home Assistant无缝集成,打造统一的智能家居体验
- 通过多个接口(网页、API、MQTT)控制和监控您的设备
- 实现家庭自动化,借助强大的设备端自动化功能
- 无线更新您的设备 无需物理接触即可进行"空中下载"(OTA)更新
ESPHome网址: https://www.esphome.io/
一、ESPHome 核心原理
ESPHome 本质是基于 ESP32/ESP8266 的 "声明式智能家居固件生成框架",而非传统意义上的 "编程框架",核心逻辑可概括为:
核心特点:
- 声明式编程:用户无需写代码,仅通过 YAML 描述 "要实现什么功能"(如 "GPIO13 接 DHT11""GPIO48 接 WS2812"),框架自动完成 "如何实现" 的底层编码;
- 轻量化运行时:生成的固件仅包含所需功能的最小集,无冗余代码,运行时占用资源少,且内置 WiFi、OTA、Home Assistant API 等智能家居必备能力;
- 本地闭环:设备运行逻辑完全在本地,无需依赖云端,仅通过本地网络与 Home Assistant 通信,响应速度快、隐私性高;
- 生态绑定:深度适配 Home Assistant,自动发现、自动同步设备状态,无需手动配置通信协议。
二、ESPHome 开发流程
ESPHome 的开发是 "配置 - 编译 - 烧录 - 调试" 的极简流程,无需传统编程的代码编写 / 调试环节:
环境准备
-
方式 1(推荐):Home Assistant 中安装 ESPHome 插件(网页版 Dashboard);
-
方式 2:本地安装 ESPHome CLI(命令行工具);
-
核心依赖:Python 环境 + PlatformIO(编译工具链)。
编写 YAML 配置
-
定义设备基础信息(名称、开发板型号);
-
声明硬件组件(传感器、灯、开关等,指定 GPIO、型号);
-
配置通信能力(WiFi、API、MQTT);
-
可选:添加自动化规则(如 "温度高于 30℃时亮 LED")。
编译固件
-
ESPHome 自动解析 YAML,生成基于 Arduino 框架的 C++ 代码;
-
调用 PlatformIO 编译为适配 ESP32 的二进制固件(.bin 文件)。
烧录固件
-
首次:串口烧录(需进入烧录模式);
-
后续:OTA 无线烧录(修改配置后直接远程更新)。
调试与运维
-
通过 ESPHome Dashboard 查看设备日志、状态;
-
在 Home Assistant 中可视化数据、控制设备;
-
无需连接电脑,全程网页 / APP 操作。
三、ESPHome vs Arduino vs ESP-IDF(核心区别)
为了清晰对比,我整理了关键维度的差异表,同时补充核心逻辑解读:
|----------------|---------------------|-----------------------------|----------------------------------|
| 维度 | ESPHome | Arduino (ESP32 核心库) | ESP-IDF (Espressif 官方框架) |
| 定位 | 智能家居专用固件生成框架 | 通用嵌入式应用开发框架(易用型) | ESP32 底层开发框架(专业型) |
| 编程方式 | 声明式(YAML 配置) | 命令式(C/C++ 代码) | 命令式(C 代码) |
| 开发门槛 | 极低(无需编程基础) | 低(入门级编程) | 高(需掌握 RTOS、底层驱动) |
| 核心依赖 | 基于 Arduino 框架封装 | 基于 ESP-IDF 封装(抽象层) | 直接操作 ESP32 硬件寄存器 / RTOS |
| 适用场景 | 智能家居快速开发(传感器、灯、开关) | 通用物联网项目(DIY 创意、中小项目) | 工业级 / 高性能项目(复杂协议、实时控制) |
| 功能封装程度 | 高度封装(仅暴露智能家居相关 API) | 中等封装(硬件抽象 + 常用库) | 无封装(底层 API,需自行实现功能) |
| 性能 / 资源占用 | 中等(冗余少,仅按需编译) | 中等(抽象层有少量开销) | 最优(无抽象层,极致性能) |
| 生态适配 | 深度绑定 Home Assistant | 通用生态(支持 MQTT、各类云平台) | 无特定生态,完全自定义 |
| OTA / 调试能力 | 内置一键 OTA,网页调试 | 需手动编写 OTA 代码,串口 / 串口监视器调试 | 需手动配置 OTA,支持 JTAG 调试 |
| 灵活性 | 低(仅支持预定义的智能家居功能) | 高(可自由编写任意逻辑) | 极高(可定制 RTOS、驱动、协议) |
关键区别解读:
抽象层级(核心差异)
-
ESP-IDF:最底层,直接操作 ESP32 的硬件寄存器、RTOS 内核,比如要控制 GPIO48,需调用
gpio_set_level()等底层函数,适合需要精准控制硬件的场景; -
Arduino:在 ESP-IDF 之上做了一层 "硬件抽象",比如控制 GPIO48 只需
digitalWrite(48, HIGH),屏蔽了底层细节,降低开发门槛; -
ESPHome:在 Arduino 之上再做一层 "场景抽象",用户只需写
pin: GPIO48,连digitalWrite都不用写,直接面向 "智能家居功能" 而非 "硬件操作"。
开发目标差异
-
用 ESPHome:你想 "快速实现一个温湿度传感器 + LED 灯,接入 Home Assistant",无需懂编程,10 分钟搞定;
-
用 Arduino:你想 "DIY 一个带温湿度显示、LED 报警、自定义按键逻辑的物联网设备",需要写代码,但能灵活实现创意;
-
用 ESP-IDF:你想 "开发一个工业级 ESP32 设备,要求低延迟、高稳定性、自定义通信协议",需要深入底层,开发周期长但性能可控。
典型使用场景举例
-
ESPHome:家庭智能家居(如温湿度监测、灯光控制、人体感应联动);
-
Arduino:创客 DIY 项目(如智能小车、环境监测站、自定义遥控器);
-
ESP-IDF:商业级产品(如工业物联网网关、ESP32 模组定制固件)。
四、ESPHome环境安装
正常情况下ESPHome Devivce Builder可以通过HomeAssistant的插件形式安装。但由于我的HomeAssistant是在docker中运行的,不支持插件安装形式。
官方网站给出了相关的提示说明:

ESPHome命令行方式
https://www.esphome.io/guides/getting_started_command_line/#adding-some-features
下面继续使用HomeAssistant的安装运行环境来安装ESPHome。
系统要求: Windows11 22H2 及以上版本 + WSL2
安装 WSL
在系统中搜素终端然后打开,输入
wsl --install,等待 WSL 安装完成;如果已经安装,可以使用wsl --update更新到最新版本下载 WSL2 Linux 发行版
打开 Windows 自带的应用商店,搜索 Ubuntu ,然后下载 Ubuntu24.04.1 LTS
在 Windows 终端可使用
wsl --list --online查看在线的发行版,然后输入wsl --install -d Ubuntu-24.04安装使用 WSL2
在应用商店下载完成后,可以点击打开按钮,然后按照提示输入用户名和密码,完成初始化
在终端输入
wsl -d Ubuntu-24.04,然后按照提示输入用户名和密码,完成初始化
1、下载容器镜像
docker pull ghcr.io/esphome/esphome

2、设置config目录
由于在访问Windows驱动器上的文件时存在文件系统性能问题,在WSL2上的Docker中运行ESPHome可能会比在原生Linux或传统虚拟机中慢很多(10倍甚至更多)。为了获得更好的性能,请将您的ESPHome文件存储在WSL2文件系统内(例如,
~/esphome/...),而不是Windows挂载点上(例如,/mnt/c/...)。
#创建config目录
$mkdir -p ~/esphome/config
目录创建好后是空目录,后期运行时会存放你的配置文件。

3、创建项目
这里使用常见的ESP32S3开发板:esp32-s3-devkitc-1,dht11温湿度传感器做测试。

通过命令行创建(不建议)
# On docker
docker run --rm -v "${PWD}":/config -it ghcr.io/esphome/esphome run livingroom.yaml


通过网页创建(推荐)
在wsl的ubuntu系统输入下述命令,"${PWD}"替换成你的config目录(例如:/home/user/esphome/config)
docker run --rm --net=host -v "${PWD}":/config -it ghcr.io/esphome/esphome
在PC机浏览器中输入http://127.0.0.1:6052就可以访问网页形式的ESPHome构建器。(如果没有创建过配置项目,会显示空,这里已经创建过项目。)

点击右下方的"NEW DEVICE"创建设备。根据向导进行操作,主要是设置,设备名、WIFI配置、API配置、OTA配置等基础配置。

配置完成后可以对设置节点进行编辑,设置要控制的硬件。

配置文件内容:
esphome:
name: tony-dht11
friendly_name: Tony-DHT11
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "8JF9bodZuahyEGls1aXTbyotxO9t5X7nLFyxIyoSzV4="
ota:
- platform: esphome
password: "a628b70b3fb2471f408f84a532c71d77"
wifi:
ssid: WiFi
password: 11112222
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Tony-Dht11 Fallback Hotspot"
password: "wrbsoqiricmh"
# ===================== DHT11核心配置(GPIO13)=====================
sensor:
- platform: dht # 传感器平台为DHT(兼容DHT11/DHT22/AM2302)
pin: GPIO13 # 数据引脚指定为GPIO13,严格对应开发板引脚
model: DHT11 # 传感器型号明确为DHT11(必须指定,否则可能识别错误)
temperature: # 温度传感器配置
name: "DHT11 Temperature" # 温度传感器名称,可自定义
unit_of_measurement: "°C" # 单位,DHT11默认摄氏度
accuracy_decimals: 0 # DHT11温度精度为整数,小数位设0(关键!)
humidity: # 湿度传感器配置
name: "DHT11 Humidity" # 湿度传感器名称,可自定义
unit_of_measurement: "%" # 单位为百分比
accuracy_decimals: 0 # DHT11湿度精度为整数,小数位设0(关键!)
update_interval: 5s # 数据刷新间隔,DHT11建议≥2s,这里设5s稳定
captive_portal:
4、下载程序

点击设置卡片的右下角3个点,选择"install",选择"plug into this computer",选择ESP32开发板对应的端口,点击"连接"。后台会编译程序并下载到开发板。

如果设备在线,可以选择"wirelessly"无线方式下载,会弹出一个终端窗口显示编译及下载过程。

如果上述方式有问题,还可以使用web方式连接开发板下载bin文件。

5、HomeAssistant集成
打开本机的HomeAssistant主页,选择"设置"->"集成"->"添加集成"。
搜索ESPHome,添加对应的设备。


添加完成后,可以配置控制面板。
