ESPHome——DIY 智能家居设备的利器
ESPHome 是什么
ESPHome 是 Home Assistant 官方出品的 ESP8266 / ESP32 固件框架——用纯 YAML 配置就能编译刷写固件,自己做智能家居设备。不需要 C++/Arduino 开发经验。
Home Assistant + ESPHome 的组合是智能家居 DIY 领域最流行的方案:
- 别人做的设备卖几百,你自己做只需要几十块成本
- 固件完全可控、可以定制任意逻辑
- 和 Home Assistant 的集成是原生级的——零配置发现、自动创建设备
- 所有数据走本地 WiFi,零云依赖
ESPHome 能做什么
| DIY 项目 | 用的 ESP | 传感器 | 功能 | 成本 |
|---|---|---|---|---|
| 空气质量监测仪 | ESP32-S3 | SCD40(CO₂)+ BME280(温湿度气压)+ PMS5003(PM2.5) | 本地显示 + Home Assistant 推送 | ¥150~200 |
| 环境温湿度传感器 | ESP8266(NodeMCU) | SHT30 / DHT22 | 电池供电 + 定时上报 | ¥20~30 |
| 智能插座/开关 | ESP8266 + 继电器 | 可选电流互感器 | WiFi 开关 + 功率监控 | ¥30 |
| 水表抄表器 | ESP8266 + 霍尔传感器 | 霍尔模块 | 统计水量 | ¥20 |
| 垃圾桶满溢检测 | ESP8266 + 超声波 | HC-SR04 | 远程查看垃圾桶状态 | ¥20 |
| 桌面天气显示器 | ESP32 + 显示屏 | SSD1306 OLED | 本地显示 + Home Assistant 控制 | ¥50 |
| 语音助手 | ESP32-S3 + 麦 + 喇叭 | INMP441 + MAX98357A | Home Assistant Assist 硬件 | ¥50 |
| DIY 网关 | ESP32 + Zigbee 模块 | CC2650 | 自组网 Zigbee 子节点 | ¥40 |
安装 ESPHome
Home Assistant OS
Settings → Apps → 搜索 ESPHome → Install
启动后点击 OPEN WEB UI 进入 ESPHome 编辑器(URL http://homeassistant.local:6052)。
独立运行
如果你不想在 Home Assistant 里跑 ESPHome,也可以单独用 Docker:
docker run -d \
--name esphome \
-p 6052:6052 \
-v /opt/esphome:/config \
-e TZ=Asia/Shanghai \
--restart=unless-stopped \
ghcr.io/esphome/esphome:stable
第一个 ESPHome 设备:温湿度传感器
硬件
| 组件 | 型号 | 连接方式 |
|---|---|---|
| ESP | ESP32-S3 DevKitC-1 | USB |
| 温湿度传感器 | BME280 | I2C |
YAML 配置
在 ESPHome Web UI 里点 NEW DEVICE → 选 Skip this step(手动配置):
esphome:
name: sensor-living-room
friendly_name: 客厅环境
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# 连接 Home Assistant
api:
encryption:
key: "your-encryption-key-here"
ota:
- platform: esphome
# WiFi
wifi:
ssid: "your-wifi-ssid"
password: "your-wifi-password"
fast_connect: true
# BME280 温湿度
i2c:
sda: GPIO8
scl: GPIO9
scan: true
sensor:
- platform: bme280
temperature:
name: 客厅温度
id: temp
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
pressure:
name: 客厅气压
id: press
humidity:
name: 客厅湿度
id: humi
address: 0x76
update_interval: 30s
- platform: wifi_signal
name: "WiFi 信号强度"
update_interval: 60s
- platform: uptime
name: "运行时间"
# 日志
logger:
# 允许 Home Assistant 通过 API 直接配置
captive_portal:
编译刷写
- ESPHome Web UI → 选中上面的 YAML → INSTALL → Plug into this computer
- 浏览器弹串口选择 → 选你的 ESP → Connect → Install
- 编译 + 上传 → 约 1~2 分钟完成
刷好后 ESP 自动重启 → 连上 WiFi → Home Assistant 自动发现 → 自动创建三个实体(温度/湿度/气压)。
进阶功能
显示 OLED 屏幕
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
lambda: |-
it.print(0, 0, "客厅环境");
it.printf(0, 20, "温度: %.1f°C", id(temp).state);
it.printf(0, 40, "湿度: %.0f%%", id(humi).state);
定时深睡眠(电池传感器)
deep_sleep:
run_duration: 10s
sleep_duration: 5min
wakeup_pin:
number: GPIO0
mode: INPUT_PULLUP
本地 HTTP API
web_server:
port: 80
刷好后 ESP 自带一个 Web 页面:http://sensor-living-room.local
自定义按钮/开关/电机控制
switch:
- platform: gpio
name: 除湿机
pin: GPIO4
binary_sensor:
- platform: gpio
name: 门开关
pin:
number: GPIO5
mode: INPUT_PULLUP
和 Home Assistant 的集成
ESPHome 设备刷好固件后:
- Home Assistant 通过 ESPHome API(局域网加密通信)自动发现
- Settings → Devices & services → 自动弹出新设备提示
- 点 Configure → 完成
- ESPHome 定义的所有实体自动出现在 Home Assistant 里
- OTA 更新:ESPHome 升级固件时,ESP 直接通过 WiFi 接收,不需要重新插 USB
安全提示
api:里的encryption.key必须设——防止局域网内其他人控制你的设备- OTA 更新建议也设密码:
ota: password: "xxx" - WiFi 密码不要硬编码在 YAML 里(虽然方便但不安全)——可以用 secret 机制:
# secrets.yaml
wifi_password: your-secret-password
# device.yaml
wifi:
password: !secret wifi_password