单片机+OpenClaw打造智能家居控制中心:从零到一的详细教程

> 阅读时长:约 20 分钟
> 难度级别:中级(需要基础嵌入式开发知识)
> 适用人群:嵌入式开发者、智能家居爱好者、AI 应用探索者
前言:为什么是「单片机 + OpenClaw」?
传统智能家居系统有两个让人头疼的问题:
1. 生态封闭:小米、华为、苹果各自为政,设备互联靠”缘分”;
2. 中心化依赖:云端宕机,全屋瘫痪,你的家成了”数字孤岛”。
2026 年,OpenClaw 的出现彻底改变了这一局面。这款开源 AI 智能体框架,不仅支持自然语言操控设备,还能本地化部署、私有化运行——你的数据,真正留在自己手里。
而当我们把OpenClaw的”大脑”与ESP32单片机的”神经末梢”结合起来,一套成本不超过¥200、却能媲美商业方案的智能家居系统就诞生了。
本文将带你完整走完这条路:
从单片机硬件选型,到OpenClaw系统部署,再到智能家居场景联动,每一步都有代码、有图解、有避坑指南,非常适合DIY的伙伴们。
一、系统架构总览
在动手之前,先理清整个系统的骨架

三层架构说明

二、硬件准备:ESP32选型与外设清单
2.1主控芯片选型ESP32家族有多款型号,根据场景选择:

2.2外设清单(一套完整智能家居节点)基础硬件清单(单节点):

2.3引脚连接图

三、固件开发
让ESP32成为智能节点我们使用ESPHome框架——无需手写C++代码,用YAML配置即可让ESP32接入Home Assistant。
3.1安装ESPHome
```bash # 方法一:pip 安装(推荐)pip install esphome
# 方法二:Docker 安装docker pull ghcr.io/esphome/esphomedocker run --rm -v "${PWD}":/config -it ghcr.io/esphome/esphome run bedroom-node.yaml
3.2 编写节点配置文件
创建文件 `bedroom-node.yaml`:```yaml# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━# 卧室智能节点配置# 功能:温湿度监测 + 人体感应 + 灯光控制# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━esphome:name: bedroom-nodefriendly_name: 卧室智能节点esp32:board: esp32devframework:type: arduino# ─── Wi-Fi 配置 ───────────────────wifi:ssid: !secret wifi_ssid # 在 secrets.yaml 中存放password: !secret wifi_passwordap: # 失联时启动热点ssid: "Bedroom-Node-Fallback"password: "esp32fallback"captive_portal:# ─── MQTT 配置(连接 Home Assistant)──mqtt:broker: 192.168.1.100 # Home Assistant IPport: 1883username: !secret mqtt_userpassword: !secret mqtt_passwordtopic_prefix: home/bedroom# ─── 日志 ────────────────────────logger: level: INFO# ─── Home Assistant API ───────────api:encryption:key: !secret api_encryption_keyota:password: !secret ota_password# ─── 传感器配置 ──────────────────# 温湿度传感器(DHT22)sensor:- platform: dhtpin: GPIO4model: DHT22temperature:name: "卧室温度"id: bedroom_tempunit_of_measurement: "°C"accuracy_decimals: 1on_value:- if:condition:sensor.in_range:id: bedroom_tempabove: 28.0then:- switch.turn_on: fan_relay- logger.log: "温度过高,自动开启风扇"humidity:name: "卧室湿度"unit_of_measurement: "%"update_interval: 30s# ─── 二进制传感器(人体感应)─────binary_sensor:- platform: gpiopin:number: GPIO13mode: INPUTname: "卧室人体感应"id: pir_sensordevice_class: motionfilters:- delayed_off: 30s # 无人后延迟 30s 关闭on_press:- logger.log: "检测到人体,执行欢迎场景"- switch.turn_on: light_relay_1on_release:- logger.log: "人员离开,关闭灯光"- switch.turn_off: light_relay_1# ─── 开关控制(继电器)─────────switch:- platform: gpiopin: GPIO16name: "主灯"id: light_relay_1icon: mdi:ceiling-lightrestore_mode: RESTORE_DEFAULT_OFF- platform: gpiopin: GPIO17name: "床头灯"id: light_relay_2icon: mdi:floor-lamprestore_mode: RESTORE_DEFAULT_OFF- platform: gpiopin: GPIO18name: "风扇"id: fan_relayicon: mdi:fanrestore_mode: RESTORE_DEFAULT_OFF# ─── OLED 状态显示 ──────────────i2c:sda: GPIO21scl: GPIO22display:- platform: ssd1306_i2cmodel: "SSD1306 128x64"address: 0x3Clambda: |-it.printf(0, 0, id(font_small), "卧室节点 Online");it.printf(0, 16, id(font_small), "温度: %.1f °C", id(bedroom_temp).state);it.printf(0, 32, id(font_small), "IP: %s", WiFi.localIP().toString().c_str());font:- file: "gfonts://Roboto"id: font_smallsize: 12```
```xxx.yaml
wifi_ssid: "你的WiFi名称"wifi_password: "你的WiFi密码"mqtt_user: "homeassistant"mqtt_password: "你的MQTT密码"api_encryption_key: "随机32字节Base64密钥"ota_password: "OTA更新密码"
3.3 烧录固件
bash# 首次烧录(USB 连接)esphome run bedroom-node.yaml# 后续OTA无线更新esphome run bedroom-node.yaml --device 192.168.1.x```#烧录成功后,串口监视器会输出:```[I][wifi:285]: Connected to WiFi! IP: 192.168.1.105[I][mqtt:255]: MQTT Connected![I][app:102]: Home Assistant API Connected!```--- ##
四、Home Assistant搭建:设备接入中枢
Home Assistant(HA)是连接ESP32节点与OpenClaw的关键桥梁。
4.1 安装Home Assistant(Docker 方式)
```bash# 创建数据目录mkdir -p /opt/homeassistant/config# 启动容器 docker run -d \--name homeassistant \--privileged \--restart=unless-stopped \-e TZ=Asia/Shanghai \-v /opt/homeassistant/config:/config \-v /run/dbus:/run/dbus:ro \--network=host \ghcr.io/home-assistant/home-assistant:stable```
访问 `http://localhost:8123` 完成初始化向导。
4.2 配置MQTT Broker
在HA中安装Mosquitto Broker插件:
1. 进入设置 → 加载项 → 加载项商店
2. 搜索并安装”Mosquitto broker”
3. 在配置页面添加用户:
“`yaml
# Mosquitto 配置logins:- username: homeassistantpassword: your_mqtt_passwordanonymous: falsecustomize:active: falsefolder: mosquittocertfile: fullchain.pemkeyfile: privkey.pem```
4.3 创建OpenClaw 访问令牌
OpenClaw 通过 HA 的 REST API 控制设备,需要长期访问令牌:
1. 进入个人资料 → 长期访问令牌
2. 点击「创建令牌」,命名为 “openclaw-token”
3. 保存好生成的 Token(只显示一次!)
“`
示例 Token:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhYWFiYmJjY2NkZGRl...```
4.4 测试 API 连通性
```bash# 测试 HA API 是否可访问curl -X GET \http://192.168.1.100:8123/api/ \-H "Authorization: Bearer <YOUR_TOKEN>" \-H "Content-Type: application/json"# 预期响应{"message": "API running."}# 查看所有设备状态curl -X GET \http://192.168.1.100:8123/api/states \-H "Authorization: Bearer <YOUR_TOKEN>"```
五、OpenClaw系统部署
5.1 环境要求
|
组件 |
最低要求 |
推荐配置 |
|
操作系统 |
Linux/macOS/Windows |
Ubuntu 22.04 LTS |
|
CPU |
2 核 |
4 核+ |
|
内存 |
2GB |
8GB |
|
Node.js |
v20+ |
v22 LTS |
|
网络 |
能访问 LLM API |
局域网或内网穿透 |
5.2 安装 OpenClaw
```bash# 安装 Node.js(Ubuntu)curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash - sudo apt install -y nodejs# 配置国内镜像加速npm config set registry https://registry.npmmirror.com# 全局安装 OpenClawnpm install -g openclaw@latest# 验证安装openclaw --version```### 5.3 初始化配置```bash# 创建工作目录mkdir ~/openclaw-home && cd ~/openclaw-home# 交互式初始化openclaw setup``` 初始化过程中配置以下内容:```? 选择 AI 模型提供商: ❯ 智谱 GLM-4 (国内推荐)OpenAI GPT-4oAnthropic Claude 3.5本地 Ollama? 智谱 API Key: xxxxxxxxxxxxxxxxxxxxxxxx? Gateway 监听端口: 18789? 是否启用 Web 界面: ❯ 是? 管理员密码: ************```### 5.4 启动服务```bash# 前台运行(调试用)openclaw start# 后台守护进程openclaw start --daemon# 查看运行状态openclaw status# 生成访问 Tokenopenclaw token create --admin --expires-in 30d```
成功启动后访问:http://服务器IP:18789
5.5 配置 LLM 模型(以智谱 GLM-4 为例)
编辑 `~/openclaw-home/config.yml`:
“`yaml
# OpenClaw 主配置文件name: 家庭AI助手models:- provider: zhipuapi_key: ${ZHIPU_API_KEY}model: glm-4temperature: 0.3 # 智能家居场景建议低温,减少幻觉max_tokens: 2048gateway:port: 18789auth_required: truecors_origins:- "http://localhost:3000"- "http://192.168.1.0/24"workspace:path: ./workspaceskills_path: ./workspace/skillslogging:level: infofile: ./logs/openclaw.log```
六、配置智能家居 Skill:打通 AI 与设备
Skill是OpenClaw的”技能包”,告诉AI如何与外部系统交互。
6.1 创建 Home Assistant Skill
```bash mkdir -p ~/openclaw-home/workspace/skills/homeassistant```创建 `~/openclaw-home/workspace/skills/homeassistant/SKILL.md`:````markdown# Home Assistant 智能家居控制技能## 能力说明 你可以通过 Home Assistant REST API 控制家中的所有智能设备,包括:- 灯光(开/关/调光/调色)- 传感器数据读取(温度、湿度、人体感应)- 开关插座- 窗帘、门锁## 环境变量- HA_URL: Home Assistant 的完整地址(如 http://192.168.1.100:8123)- HA_TOKEN: 长期访问令牌## 控制设备### 1. 获取设备状态```bashcurl -s -X GET "${HA_URL}/api/states/${entity_id}" \-H "Authorization: Bearer ${HA_TOKEN}" \-H "Content-Type: application/json" ```### 2. 打开/关闭开关类设备```bash# 打开设备curl -X POST "${HA_URL}/api/services/switch/turn_on" \-H "Authorization: Bearer ${HA_TOKEN}" \-H "Content-Type: application/json" \-d '{"entity_id": "switch.主灯"}'# 关闭设备curl -X POST "${HA_URL}/api/services/switch/turn_off" \-H "Authorization: Bearer ${HA_TOKEN}" \-H "Content-Type: application/json" \-d '{"entity_id": "switch.主灯"}'```### 3. 控制灯光(含亮度)```bashcurl -X POST "${HA_URL}/api/services/light/turn_on" \-H "Authorization: Bearer ${HA_TOKEN}" \-H "Content-Type: application/json" \-d '{"entity_id": "light.卧室主灯", "brightness_pct": 60, "color_temp": 4000}'```### 4. 执行场景```bashcurl -X POST "${HA_URL}/api/services/scene/turn_on" \-H "Authorization: Bearer ${HA_TOKEN}" \-H "Content-Type: application/json" \-d '{"entity_id": "scene.回家模式"}'```### 5. 语音播报(通过智能音箱)```bashcurl -X POST "${HA_URL}/api/services/tts/cloud_say" \-H "Authorization: Bearer ${HA_TOKEN}" \-H "Content-Type: application/json" \-d '{"entity_id": "media_player.客厅音箱", "message": "播报内容", "language": "zh-cn"}'```
设备实体ID映射表
|
设备名称 |
Entity ID |
类型 |
|
卧室主灯 |
switch.bedroom_main_light |
switch |
|
客厅灯 |
light.living_room |
light |
|
卧室温度 |
sensor.bedroom_temp |
sensor |
|
卧室湿度 |
sensor.bedroom_humidity |
sensor |
|
卧室人体感应 |
binary_sensor.bedroom_pir |
binary_sensor |
|
客厅风扇 |
switch.fan_relay |
switch |
|
入户门锁 |
lock.front_door |
lock |
使用规则
1. 控制设备前,先用GET确认设备当前状态
2. 批量控制时,使用`entity_id`数组:`[“switch.light1”, “switch.light2”]`
3. 睡眠模式下,只接受指定设备的控制指令,避免误操作
4. 如遇到401错误,说明Token已过期,需要重新生成
6.2 设置环境变量
```bash# 在 .bashrc 或 .zshrc 中添加export HA_URL="http://192.168.1.100:8123"export HA_TOKEN="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."export ZHIPU_API_KEY="你的智谱API密钥"# 刷新配置source ~/.bashrc# 验证echo $HA_URL```
6.3 启用 Skill
在OpenClaw WebUI中:
1. 进入「技能管理」
2. 点击「从本地目录加载」
3. 选择 `~/openclaw-home/workspace/skills/homeassistant`
4. 点击「启用」
七、实战场景演示
系统搭建完毕,来看几个真实的使用场景。
场景一:早晨起床自动化
你对OpenClaw说:早上7点,帮我设置一个起床场景:先把卧室灯调到30% 亮度,5分钟后调到80%,同时播报今日天气和温度。OpenClaw 执行流程:1. [分析意图] 创建定时自动化,包含灯光渐亮+语音播报2. [查询当前状态] GET /api/states/light.bedroom3. [创建自动化规则]POST /api/services/automation/trigger{"trigger": {"platform": "time", "at": "07:00:00"},"action": [{"service": "light.turn_on", "data":{"brightness_pct": 30}},{"delay": "00:05:00"},{"service": "light.turn_on", "data": {"brightness_pct": 80}},{"service": "tts.cloud_say", "data": {"message": "早上好!今天气温22°C,晴天。"}}]}4. [确认执行] ✅ 起床场景已创建,明早 7:00 生效
你对OpenClaw说:查看卧室现在的温度,如果超过 26 度就开风扇,同时告诉我当前各房间的温度情况。OpenClaw执行流程:1.[读取传感器]GET /api/states/sensor.bedroom_temp → 28.3°CGET /api/states/sensor.living_room_temp → 25.1°CGET /api/states/sensor.kitchen_temp → 26.8°C2.[判断条件]卧室 28.3°C > 26°C,触发联动3.[执行控制]POST /api/services/switch/turn_on{"entity_id": "switch.bedroom_fan"}4.[语音播报]各房间温度情况:- 卧室:28.3°C(已自动开启风扇)- 客厅:25.1°C(正常)- 厨房:26.8°C(偏高)
场景三:离家安防模式
你对 OpenClaw 说:我要出门了,帮我执行离家模式。OpenClaw 执行流程:1. [理解意图] 触发离家场景2. [批量关闭]关闭所有灯光 → entity_id: ["switch.bedroom_light", "switch.living_room_light", "switch.kitchen_light"]3. [安全检查]检查门窗传感器状态...⚠️ 厨房窗户未关闭,提示用户确认4. [启用监控]启用摄像头录制模式开启人体感应告警推送5. [确认反馈]离家模式已激活:✅ 全屋灯光已关闭⚠️ 厨房窗户请检查✅ 安防系统已启动
八、进阶优化:MimiClaw 边缘 AI 方案
当你有大量节点时,让每个ESP32都通过Home Assistant中转会增加延迟。MimiClaw是OpenClaw 生态中专为单片机设计的轻量AI代理,可以让ESP32直接理解自然语言指令。
8.1 MimiClaw 核心特性
|
特性 |
数值 |
|
目标芯片 |
ESP32(及ESP32-S3支持AI加速) |
|
运行环境 |
FreeRTOS |
|
活跃功耗 |
0.5W |
|
深睡功耗 |
0.01W |
|
本地存储 |
4MB SPIFFS |
|
通信协议 |
Wi-Fi 802.11b/g/n + BLE4.2 |
8.2 MimiClaw 工作原理
```c// MimiClaw 核心工作流程(伪代码)void main_loop() {// 1. 监听指令(来自本地或 OpenClaw Gateway)String command = receive_command();// 2. 本地预处理(简单规则)if (is_simple_command(command)) {execute_local(command); // 如"开灯"直接本地执行return;}// 3. 复杂指令:调用远端 LLMString llm_response = call_llm_api(command);// 4. 解析 LLM 响应,执行动作Action action = parse_action(llm_response);execute_action(action);// 5. 上报状态report_status_to_ha();}```
8.3 MimiClaw 安装配置
```bash# 克隆 MimiClaw 仓库git clone https://github.com/memovai/mimiclaw.gitcd mimiclaw# 安装 ESP-IDF(Espressif 官方框架)./install.sh# 配置项目idf.py menuconfig# 设置:Wi-Fi SSID/密码、LLM API Key、MQTT Broker 地址```
关键配置文件 `main/config.h`:
```c// MimiClaw 配置#defineWIFI_SSID "你的WiFi"#defineWIFI_PASSWORD "WiFi密码"#defineLLM_API_URL "https://open.bigmodel.cn/api/paas/v4/chat/completions"#defineLLM_API_KEY "你的智谱APIKey"#defineMQTT_BROKER "192.168.1.100"#defineMQTT_PORT 1883#defineDEVICE_NAME "卧室边缘节点"#defineDEEP_SLEEP_SEC 30 // 空闲时深度睡眠30秒``````bash# 编译并烧录idf.py buildidf.py -p /dev/ttyUSB0 flash monitor```
8.4 MimiClaw 与标准方案对比
```场景:用户说"打开卧室灯"标准方案(OpenClaw → HA → ESP32):用户指令 → OpenClaw(AI) → HA API → MQTT → ESP32延迟:约 500ms~2s(受网络影响)MimiClaw 边缘方案(直接处理):用户指令 → MimiClaw(ESP32) → 本地执行延迟:约 50ms(仅本地处理)```架构建议:- 简单控制(开/关/调光)→ MimiClaw 本地处理,极低延迟- 复杂场景(多设备联动、条件判断)→ 上报 OpenClaw 中枢处理- 数据汇总(全屋状态查询、历史记录)→ Home Assistant 负责---
九、安全加固与维护
9.1 网络安全
ota:password: !secret ota_password # 强密码safe_mode: true
mqtt:broker: 192.168.1.100 port: 8883 # 使用 TLS 端口certificate_authority: /config/certs/ca.crtclient_certificate: /config/certs/client.crtclient_certificate_key: /config/certs/client.key
# 在 /config/configuration.yaml中http:ssl_certificate: /ssl/fullchain.pemssl_key: /ssl/privkey.pem
9.2 权限最小化
```bash# 为 OpenClaw 创建专用系统用户sudo useradd -r -s /bin/false openclawsudo mkdir -p /opt/openclawsudo chown openclaw:openclaw /opt/openclaw# 以专用用户运行服务sudo -u openclaw openclaw start
9.3 创建 systemd 守护服务
```ini# /etc/systemd/system/openclaw.service[Unit]Description=OpenClaw AI Agent for Smart HomeAfter=network.target[Service]Type=simpleUser=openclawWorkingDirectory=/opt/openclawExecStart=/usr/bin/openclaw startRestart=on-failureRestartSec=5StandardOutput=journalStandardError=journal[Install] WantedBy=multi-user.target```bashsudo systemctl daemon-reloadsudo systemctl enable openclawsudo systemctl start openclawsudo systemctl status openclaw
9.4 备份策略
```bash#!/bin/bash# backup-smarthome.sh - 每日自动备份脚本BACKUP_DIR="/backup/smarthome/$(date +%Y%m%d)"mkdir -p $BACKUP_DIR# 备份 Home Assistant 配置cp -r /opt/homeassistant/config $BACKUP_DIR/ha_config# 备份 OpenClaw 配置cp -r ~/openclaw-home/workspace $BACKUP_DIR/openclaw_workspacecp ~/openclaw-home/config.yml $BACKUP_DIR/# 备份 ESPHome 配置cp -r ~/.esphome $BACKUP_DIR/esphome_config# 压缩tar -czf "$BACKUP_DIR.tar.gz" $BACKUP_DIRrm -rf $BACKUP_DIRecho "✅ 备份完成: $BACKUP_DIR.tar.gz"``````bash# 添加到 crontab(每天凌晨 3 点备份)crontab -e0 3 * * * /bin/bash ~/backup-smarthome.sh
十、常见问题 FAQ
Q1:ESP32 无法连接 Wi-Fi,一直重启?
排查步骤:
```bash# 1. 检查 secrets.yaml 中的 SSID 是否正确(区分大小写)# 2. 确认 Wi-Fi 是 2.4GHz(ESP32 不支持 5GHz)# 3. 临时禁用防火墙测试# 串口日志关键词[E][wifi:498]: Connection failed: wrong password → 密码错误[W][wifi:375]: No AP found → SSID 错误或信号弱```
Q2:Home Assistant检测不到ESPHome设备?
```bash# 检查 ESPHome 集成是否安装# HA设置 → 集成 → 搜索 ESPHome → 安装# 手动添加设备HA设置 → 设备与服务 → 添加集成 → ESPHome主机:设备IP,端口:6053```
Q3:OpenClaw调用HA API报401错误?
```bash# Token 可能已过期,重新生成# HA → 个人资料 → 长期访问令牌 → 创建新令牌# 更新 OpenClaw Skill 中的环境变量export HA_TOKEN="新的Token"openclaw restart```
Q4:AI指令执行慢,延迟超过5秒?
优化建议:
1. 切换到响应更快的模型(如 `glm-4-flash`)
2. 在 Skill 中提供更清晰的设备列表,减少 AI “思考”时间
3. 对高频简单指令使用 MimiClaw 本地处理
4. 将 OpenClaw 部署在局域网内,减少公网延迟
Q5:如何添加新的设备类型(如空调)?
```markdown| 客厅空调 | climate.living_room_ac | climate |
总结
通过本文,我们完整搭建了一套基于「单片机 + OpenClaw」的智能家居控制系统:
✅ ESP32 节点 → 负责设备控制和环境感知
✅ ESPHome → 固件框架,零代码接入 HA
✅ Home Assistant → 设备统一管理中枢
✅ OpenClaw → AI 大脑,自然语言控制
✅ MimiClaw → 边缘 AI,超低延迟本地执行
这套系统的核心优势在于:
– 🔓 完全开源,无供应商锁定
– 🏠 本地化部署,数据不出家门
– 🧠 AI 驱动,自然语言控制,无需记命令
– 💰 极低成本,单节点硬件约 ¥56
– ⚡ 边缘计算,MimiClaw实现50ms级响应
下一步,我们可以继续探索:
– 接入更多设备类型(门锁、摄像头、空调)
– 开发自定义 Skill(天气联动、电价感知节能)
– 结合语音识别实现真正的”语音管家”
– 部署 Prometheus 实现设备健康监控
> 📌 相关资源
> – OpenClaw 官方文档:https://openclaw.cc
> – ESPHome 文档:https://esphome.io
> – Home Assistant 社区:https://community.home-assistant.io
> – MimiClaw GitHub:https://github.com/memovai/mimiclaw
> – 本文代码示例:见文中各代码块 如有问题,欢迎在评论区交流。觉得有用就点个❤在看吧!
夜雨聆风