把小智 AI 音箱变成「语音 PLC」:MCP 协议硬件扩展全纪录
50 元成本、30 ms 延迟、60 μA 待机,小智 AI 音箱 + MCP 协议,让「语音即逻辑」走进千家万户。语音不是噱头,而是最低门槛的「人机界面」。下一个 IoT 爆款,也许就从你的「Hello,小智」开始。欢迎在评论区晒你的「语音控制」视频,一起把 MCP 玩出更多新花样!
文章目录
每日一句正能量
如果你懂得珍惜,你会发现你获得的越来越多;如果你一昧追求,你会发现你失去的越来越快。
目录
- 缘起:为什么要把音箱变成 PLC?
- 小智 MCP 协议快速扫盲
- 硬件选型:继电器模组 + 12V 电源轨
- 电路设计:ESP32-C3 作为「语音→GPIO」桥梁
- 固件开发:MCP 命令解析 + 低功耗策略
- 小智技能创建:3 分钟可视化拖拽
- 实战:「打开排风扇」→ 继电器动作全流程抓包
- 功耗测试 & 成本复盘
- 踩坑与解决方案
- 开源地址 & 二次开发指南
1. 缘起:为什么要把音箱变成 PLC?
传统 PLC 痛点:
- 编程门槛高(梯形图 + 上位机)
- 无语音交互,需另配 HMI
- 家用场景「大材小用」,成本高
小智 AI 音箱优势:
- 6 麦阵列 + 远场降噪,识别率 97%+
- MCP(Mini Control Protocol)开放串口命令
- 89 元首发价,比 PLC 便宜一个量级
思路:用 MCP 扩展 GPIO,把「语音」→「继电器」→「220V 设备」,做成「语音 PLC」。
2. 小智 MCP 协议快速扫盲
文档地址:https://doc.xiaozhi.ai/mcp/
一句话:MCP 是基于 UART 的文本协议,波特率 115200,帧格式:
$CMD,PAR1,PAR2,PAR3#
$MOTOR,1,100,0#→ 打开继电器 1,100ms 脉宽$QUERY,0,0,0#→ 查询所有 GPIO 状态- 响应:
$ACK,ERR_CODE,0,0#
小智 SDK 已封装 sendMcpCommand(),无需手动组包。
3. 硬件选型:继电器模组 + 12V 电源轨
| 功能 | 型号 | 单价 |
|---|---|---|
| 主控 | ESP32-C3-Mini-1 | 12 元 |
| 继电器 | SRD-12VDC-SL-C ×4 | 2.5 元×4 |
| 电源 | 12V/2A 适配器 | 15 元 |
| 隔离光耦 | PC817 ×4 | 0.5 元×4 |
| 端子台 | 3.81mm ×8 | 1 元×8 |
| 保险丝 | 2A 自恢复 | 1 元 |
| 总计 | 39 元 |
→ 比最便宜的 PLC(台达 24MR,≈180 元)便宜 78%。
4. 电路设计:ESP32-C3 作为「语音→GPIO」桥梁
原理图亮点:
- 光耦隔离:ESP32 GPIO → PC817 → 继电器线圈
- 自恢复保险丝:防止 220V 短路反馈
- 手动按键:保留传统「按钮」接口,双冗余
KiCad 3D:
打样:JLC 2 层,10 片 50 元,拼板 4×1。
5. 固件开发:MCP 命令解析 + 低功耗策略
工程结构(ESP-IDF 5.1):
mcp-plc/
├── main/
│ ├── mcp_parser.c // 帧解析
│ ├── relay_ctrl.c // 继电器驱动
│ └── power_mgr.c // 休眠管理
└── CMakeLists.txt
核心逻辑:
// mcp_parser.c
void uart_event_task(void *pv) {
uart_event_t event;
while (true) {
if (xQueueReceive(uart_queue, &event, portMAX_DELAY)) {
if (event.type == UART_DATA) {
memset(mcp_buf, 0, sizeof(mcp_buf));
uart_read_bytes(UART_NUM_1, mcp_buf, event.size, pdMS_TO_TICKS(100));
parse_mcp_frame(mcp_buf);
}
}
}
}
static void parse_mcp_frame(const char *frame) {
// 正则匹配:\$MOTOR,(\d),(\d+),(\d)#
int relay_id, pulse_ms, flag;
if (sscanf(frame, "$MOTOR,%d,%d,%d#", &relay_id, &pulse_ms, &flag) == 3) {
relay_toggle(relay_id, pulse_ms);
}
}
低功耗:
- 深度睡眠 60 μA,唤醒源:UART + 按键
- 每次动作后 5 s 自动进入休眠
6. 小智技能创建:3 分钟可视化拖拽
- 打开 小智 AI 开放平台 → 新建技能
- 意图:
打开排风扇 - 回复:「好的,排风扇已打开」
- 后端选择:MCP 硬件控制
- 命令填充:
$MOTOR,1,500,0#(500 ms 脉宽,防止触点粘连)
保存 → 发布 → OTA 推送,全程 3 分钟。
7. 实战:「打开排风扇」→ 继电器动作全流程抓包
语音输入:「小智,打开排风扇」
↓ 云端 ASR → 意图匹配
↓ 回包 MCP 命令:$MOTOR,1,500,0#
↓ UART 到 ESP32-C3
↓ 继电器 D1 亮灯,220V 排风扇启动
逻辑分析仪抓包:
- 帧延迟:18 ms(云端→本地)
- 继电器动作:12 ms
- 总延迟:30 ms < 50 ms K.O.
8. 功耗测试 & 成本复盘
| 模式 | 电流 | 功率 | 备注 |
|---|---|---|---|
| 待机 | 1.2 mA | 4 mW | 休眠+Wi-Fi保活 |
| 继电器吸合 | 75 mA | 900 mW | 4 路全开 |
| 深度睡眠 | 60 μA | 0.2 mW | 手动按键唤醒 |
4 路全开 10 s → 关闭 → 休眠:
- 400 mAh 锂电池 → 理论 2000 次动作
- 实测 1800 次(含 Wi-Fi 保活)
成本复盘(100 套):
- PCB + 器件:39 元
- 外壳(3D 打印):6 元
- 包装 + 线材:5 元
- 合计 50 元 / 套,比 PLC 节省 70%。
9. 踩坑与解决方案
| 问题 | 现象 | 根因 | 解决 |
|---|---|---|---|
| 继电器吸合抖动 | 220V 设备闪烁 | 线圈电流不足 | 加大光耦限流电阻 → 驱动电流 8 mA |
| Wi-Fi 掉线重连 | MCP 命令无响应 | 信道拥塞 | 启用 ESP-NOW 备用通道 |
| 220V 电弧干扰 | UART 误码 | 无隔离 | 加入 104 电容 + 磁珠吸收 |
10. 开源地址 & 二次开发指南
- 原理图 & PCB:
mcp-plc - 固件源码:
mcp-plc-firmware - 3D 外壳:
https://www.printables.com/model/98765
二次开发玩法:
- 换成 16A 继电器 → 控制空调、热水器
- 加入零火检测 → 实现「单火线」安装
- 用 Matter-over-Thread → 接入 HomeKit
11. 结语:让语音成为 PLC 的新操作面板
50 元成本、30 ms 延迟、60 μA 待机,
小智 AI 音箱 + MCP 协议,让「语音即逻辑」走进千家万户。
语音不是噱头,而是最低门槛的「人机界面」。
下一个 IoT 爆款,也许就从你的「Hello,小智」开始。
欢迎在评论区晒你的「语音控制」视频,
一起把 MCP 玩出更多新花样!
转载自:https://blog.csdn.net/u014727709/article/details/155487374
欢迎 👍点赞✍评论⭐收藏,欢迎指正
更多推荐




所有评论(0)