不到三千块钱我把全屋灯控、窗帘和几个插座全部改成了离线语音无线按键控制。关键是不光断网能用连路由器都可以不用开。这篇文章就把这套“断网可用”的智能家居完整做法拆开来讲硬件怎么选、语音模块怎么配、无线链路怎么搭以及调试中踩过的那些坑。先解释一下为什么一定要做离线语音。我家里之前用的智能音箱语音识别要靠云端一旦宽带抽风或者运营商断网喊破嗓子也没反应。后来换了某品牌的离线模块又发现它只能控制自家生态的设备第三方插座根本管不了。折腾了一圈干脆自己用离线语音模块无线MCU搭一套点对点控制系统所有识别和指令传递都在本地完成彻底把云端的依赖砍掉了。这套方案适合想自己动手折腾智能家居、对数据隐私和稳定性有要求的玩家也适合出租屋或者宿舍不需要改造线路直接做几个遥控插座就能用。1. 为什么非要搞一套断网可用的智能家居1.1 我为什么开始折腾离线语音起因特别朴素。去年冬天地下车库信号差回家进门喊“开灯”智能音箱转圈三分钟才回一句“网络连接异常”。站在玄关摸黑找开关的感觉我相信不少人都体会过。后来打听了一圈才发现几乎所有主流语音助手都必须联网语音识别、语义理解、技能调用全在云端本地只负责拾音和播放。想断网做语音控制只能走离线语音识别这条路。当时我就想能不能自己做一套语音模块本地识别关键词再把指令通过无线信号发给各个被控设备。这个事本质上不难难点在于语音模块的定制能力和无线协议的实时性。翻了不少方案最后锁定启英泰伦的CI1006离线语音芯片搭配ESP8266做无线控制节点串口直连用自定义通信协议传输指令。整套系统没有任何云端依赖启动时间1秒内识别响应基本在两组词的时间以内。1.2 断网可用意味着什么很多人觉得断网可用就是“不被平台限制”其实还有更深一层没有路由器设备之间也能互相通信。我之前买过一箱智能灯泡宣传说是“蓝牙mesh”结果手机必须通过云端账号绑定才能控制当地网络恢复后整个系统还要等云端同步完成才能正常工作体验非常割裂。断网可用的目标是把所有依赖网络的隐性环节全部去掉。本地语音识别负责音频本地无线链路负责指令传输本地主控负责逻辑判断。整个系统只要通电就能工作路由器挂了也能正常控制灯和插座。注意这里的“断网可用”指的是不需要互联网但设备之间还是需要形成一个局域通信网络。最简单的方案是用ESP8266的ESP-NOW协议它工作在2.4GHz频段设备间直接点对点通信不需要路由器中转完美契合离线场景。1.3 方案选型离线语音无线控制的替代路线我在调研阶段理出了三条可能的路线路线A直接用带离线语音功能的智能面板比如某些“离线语音开关”但这类产品不能自定义控制第三方设备扩展性极差。路线B用树莓派跑本地语音识别框架比如openWakeWord或Porcupine离线效果不错但硬件成本高、功耗大而且配置复杂。路线C用专用离线语音识别芯片如CI1006、ASRPRO做语音识别再用通用MCU做无线控制。成本最低、响应最快自由度最高。我最终选了路线C。原因很直接CI1006芯片模组单价不到三十块钱支持最多50条命令词唤醒词和命令词都能自己定义而且有现成的串口输出引脚识别到某个命令后可以直接发一串字节给单片机。无线控制端用ESP8266模块一片十块钱左右支持ESP-NOW协议不需要WiFi路由器也能传数据简直是为这个场景量身定做的。2. 整体架构与核心器件准备2.1 系统架构总览整套系统可以分为三个部分语音识别端、无线控制中枢、执行端。语音识别端负责采集声音进行本地离线识别匹配到预置命令词后通过串口UART把命令码发送给无线控制中枢。无线控制中枢收到命令码后根据预设的映射关系把指令打包成无线数据帧通过ESP-NOW广播或单播给对应的执行端。执行端比如ESP8266继电器收到数据帧后解析出开关动作控制相应的插座或灯具。这里有一个设计考量为什么不在语音模块上直接接继电器因为布线太麻烦。语音模块放在客厅书架上灯在卧室不可能拉一根长串口线过去。用无线控制中枢做转发就可以把语音模块和电源控制器分开放语音模块固定在一个收音效果好的位置执行端则跟着被控电器走。这也是“语音无线”组合的实用价值。2.2 离线语音模块怎么选市面上常见的离线语音模块我基本都试过列出几个专门推荐给DIY玩家的型号模块型号核心芯片支持命令词数量串口输出唤醒词自定义价格区间元启英泰伦CI-B01GSCI100650条有支持25~40天问ASRPROASRPRO100条有支持35~50启英泰伦CI-C22GSCI1103200条有支持55~70讯飞离线模组私有30条有仅固定唤醒词80我主要测试了CI-B01GS和ASRPRO。前者便宜内置一个全指向麦克风有双色LED状态灯最远识别距离实测在5米左右安静环境下家用足够。后者支持更复杂的逻辑判断比如“开灯”“关灯”“打开窗帘”都可以直接映射不同命令词但上手难度稍高需要下载专门的IDE进行图形化配置。我的建议是如果只是想快速上手直接选CI-B01GS因为它的配置工具最直观支持在网页定义唤醒词和命令词生成固件后通过工具烧录不需要写代码。注意语音模块的麦克风焊在模块上外壳设计时要注意开孔。有些外壳密封太紧导致拾音效果急剧下降。最好用带有防尘网的开孔且模块正面对准开孔方向。2.3 无线控制主控怎么选无线控制部分可以用ESP8266、ESP32或者STM32加NRF24L01。我自己用的是ESP8266理由简单自带WiFi硬件但不用连路由器直接用ESP-NOW协议做点对点通信价格便宜Arduino开发资料丰富。如果嫌ESP8266的外设少可以换ESP32带蓝牙和双核后面对接手机APP或者接入更复杂的传感器时更方便。不过ESP32的功耗略高用电池供电的节点不占优势。对于执行端如果是控制220V电器用ESP8266继电器模块最划算光耦隔离继电器模块十几块钱一个最大能控制10A/250VAC的负载。如果是控制普通LED灯带或者直流设备用MOS管驱动即可。主控的中枢节点需要一个能和语音模块串口通信的MCU以及一个无线发送模块。如果用ESP8266作中枢就可以同时利用它的串口接收语音模块数据再利用ESP-NOW发送数据。语音模块是5V供电ESP8266是3.3V供电二者之间UART通信可能需要电平转换。不过很多语音模块的串口电平是3.3V兼容5V我实测CI-B01GS的串口可以直接和ESP8266连通没有烧坏引脚但稳妥起见还是建议用BSS138这种便宜的电平转换板。2.4 需要准备的物料清单根据自己的踩坑经验整理了一份可以直接照着买的清单语音模块启英泰伦CI-B01GS1块或ASRPRO1块无线中枢节点ESP8266 NodeMCU或D1 mini1块执行端节点ESP8266 D1 mini 继电器模块每路负载1块电源适配器5V/2A USB电源中枢用一个每个执行端一个电平转换模块BSS138双向电平转换可选但推荐备2个不贵面包板/接线端子/杜邦线若干外壳塑料防水盒/3D打印外壳其他尖嘴钳、电烙铁、热缩管如果你要控制的是成品插座推荐买带射频或蓝牙的智能插座然后自己用ESP-NOW转红外/蓝牙控制。不过这种方案链路复杂我在项目里直接用继电器控制墙壁开关并联引出线或者直接用智能插座拆壳改装。最简单的是使用“通断器”模块那是一种可以塞进底盒或开关里的继电器模组有的还支持射频遥控配合无线接收头就能实现改装控制。3. 离线语音模块配置实操3.1 唤醒词和命令词设计离线语音的体验核心是唤醒词和命令词的设置。这点真的非常重要设计不好就天天误触发。我的做法是唤醒词尽量用三个字或四个字的冷门词比如“小光小光”“精灵管家”等避免使用“你好”“小智”这种太常见的词防止电视、手机语音唤醒干扰。命令词尽量用两到四个字比如“开灯”“关灯”“窗帘打开”“窗帘关闭”“全亮”“全灭”等。所有命令词要简短且发音差异明显。不要设计同音近音命令词比如“开亮”和“开量”离线识别容易出现歧义。CI-B01GS的网页配置工具里可以在线录音或选择内置音色合成唤醒词。建议用手机录音录成音库比模块自带的合成音识别率稳定。我在调试中发现中文普通话环境下自己录制的语音模型准确率能达到96%以上而合成音在环境嘈杂时误识别率偏高。3.2 语音模型训练与固件烧录启英泰伦的配置流程大致如下下载并打开CI-B01GS离线语音配置工具选择对应的芯片型号。新建工程设置唤醒词比如“小光小光”以及多条命令词比如“开灯”。为每个命令词关联一个ID比如开灯ID1关灯ID2然后配置“输出方式”为“串口输出”。在输出映射表里把每个ID对应到一段十六进制数据例如ID1对应“AA 55 01 00 01 FF”ID2对应“AA 55 01 00 02 FF”。点击编译生成bin固件文件。用USB转TTL小板连接模块的烧录引脚一般是TX、RX、VCC、GND使用官方烧录工具把固件写入模块。烧录成功后模块会有一段语音提示比如“小光小光有什么可以帮你”。之后对着麦克风说“小光小光”模块识别到唤醒词会播报“我在”然后你可以接着说“开灯”。整个过程完全离线。注意烧录前一定要把模块和USB转TTL小板共地我之前因为图省事直接接VCC和TX结果烧录失败。共地后通信才正常。3.3 串口通信协议设计离线语音模块识别到命令词后会把我们在配置工具里设定的十六进制数据通过串口发出去。这个数据就是整个系统的“命令协议”。我的协议设计很简单每帧固定8个字节格式如下帧头 设备ID 命令类型 开关状态 预留 校验 AA 55 01 02 01 00 B9帧头0xAA 0x55用于识别一帧开始设备ID0x01表示客厅灯0x02表示卧室灯0x03表示窗帘电机等等命令类型0x01表示设置模式0x02表示单控开关状态0x00表示关0x01表示开预留固定填充0x00校验前面所有字节的加和或异或这样语音模块只需配置输出帧的数据内容即可比如“开客厅灯”输出AA 55 01 02 01 00 B9“关客厅灯”输出AA 55 01 02 00 00 B8。中枢节点的单片机解析这个帧再根据设备ID和状态封装成ESP-NOW数据帧发出去。提示协议越简单越好不要搞复杂的转义字符和变长帧离线语音模块的内存有限处理不了太复杂的数据结构。8字节定长帧是我试过最稳定的方案。4. 无线控制链路实现4.1 主控与语音模块的对接语音模块和ESP8266之间的对接最重要的就是串口波特率。CI-B01GS默认波特率是9600ESP8266的默认串口是115200需要在Arduino代码里把Serial.begin(9600)设成和语音模块一致。接线方式语音模块VCC → 5V电源正极语音模块GND → 电源负极语音模块TXD → ESP8266 RXGPIO3语音模块RXD → ESP8266 TXGPIO1注意将两者共地由于ESP8266只有1个硬件串口在烧录程序时可能会与调试串口冲突。建议在Arduino代码中使用SoftwareSerial库将语音模块接在GPIO4和GPIO5上这样既能保持硬件串口给调试用又能与语音模块通信。示例代码片段Arduino#include SoftwareSerial.h SoftwareSerial voiceSerial(4, 5); // RX, TX void setup() { Serial.begin(115200); voiceSerial.begin(9600); } void loop() { if (voiceSerial.available() 8) { uint8_t buf[8]; for (int i 0; i 8; i) { buf[i] voiceSerial.read(); } if (buf[0] 0xAA buf[1] 0x55) { // 解析设备ID、状态 uint8_t deviceId buf[2]; uint8_t state buf[4]; Serial.println(voice command received); } } }通过这个方式ESP8266接收到语音模块的指令然后进入下一步无线发送。4.2 无线控制几种常用方案对比在这个场景下可选无线协议有好几种我做了对比方案通信距离是否依赖路由器延时成本复杂度ESP-NOW30-70米室内否10-30ms低低NRF24L0110-50米否5-20ms极低中433MHz射频50-100米否50-200ms低低单向MQTT over WiFi不限是100-500ms中高Zigbee10-30米需网关30-100ms中高最终我选了ESP-NOW。原因是ESP8266板载WiFi芯片无需额外射频模块就能实现点对点通信而且它做的是精密的无线数据帧传输带ACK和重传机制不像433射频那样只管发不管收。对我来说可靠性和简单性最重要。4.3 点对点无线控制的数据帧设计ESP-NOW的发送格式很简单可以通过esp_now_send直接发送一个字节数组。我们延续语音模块的8字节帧加上发送方地址和目的地址总共不会超过ESP-NOW单包限制250字节。在ESP8266中枢节点中接收到语音命令后我们把它重新封装成{0xAA, 0x55, deviceId, commandId, state, 0x00, 0x00, checksum}然后通过ESP-NOW广播给所有执行端。如果执行端控制多个设备可以判断deviceId是否等于自己的节点编号。执行端代码大致如下#include ESP8266WiFi.h #include espnow.h #define RELAY_PIN 14 // GPIO14 连接继电器模块 void setup() { pinMode(RELAY_PIN, OUTPUT); WiFi.mode(WIFI_STA); if (esp_now_init() ! 0) { return; } esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); esp_now_register_recv_cb(recv_cb); } void recv_cb(uint8_t *mac, uint8_t *data, uint8_t len) { if (len ! 8) return; if (data[0] 0xAA data[1] 0x55) { if (data[2] 0x01) { // 本节点设备ID if (data[4] 0x01) digitalWrite(RELAY_PIN, HIGH); else digitalWrite(RELAY_PIN, LOW); } } } void loop() { // 其他逻辑 }这个方案的核心优势是ESP-NOW在无路由器的STA模式下工作两个ESP8266之间可以直接通信。实测室内隔一堵墙的情况下距离大概30米左右稳定性不错偶尔丢包但不影响使用因为语音指令重复触发率高。注意ESP8266的ESP-NOW库在不同版本中API有变化我使用的是Arduino core 2.7.4没有使用新的esp_now_send回调。如果你用更高版本请参考对应库的示例代码大致逻辑是相同的。4.4 电器控制执行端的改造控制普通电灯可以在灯开关盒里并联一个继电器模块。但这一步涉及220V强电有安全风险我不建议没有电工基础的朋友动墙壁开关。更稳妥的做法是使用“智能插座改造”把继电器模块放进一个普通插线板的头部或者购买“通断器”装进插线盒里。我用的是最简单安全的方案——外置一个“智能控制插座”把一个普通插线板剪开把继电器模块串联在火线上。注意零火线不要接反。继电器模块有交流输入端IN和交流输出端OUT控制信号是低电平触发或高电平触发根据模块选择。无线执行端和继电器模块放在一个小塑料盒里盒子外部留一个插头和一个插座做成一个DIY离线语音可控插排。这样既不需要动家里的线路也能控制台灯、风扇、加湿器等小家电。如果是控制窗帘电机同理把继电器模块替代遥控器上的开关按键用ESP8266的数字引脚控制继电器通断模拟按键按下的动作。5. 常见问题与排查实录5.1 语音模块经常误唤醒怎么办最开始我把唤醒词设为“小智小智”结果电视一播广告模块就应声回答。后来我换成“小光小光”误唤醒概率直线下降。此外音量阈值和灵敏度参数也值得调。CI-B01GS的配置工具里有一个“唤醒灵敏度”选项我把它从0调到了30为最灵敏7为最迟钝放在3的位置刚好不在旁边喊不醒正常家里也能唤醒。还有一个技巧在配置命令词时把“是、好、开”这类单字词全部删掉只保留“打开灯光”“关闭灯光”这种完整词组。这样即使模块被误唤醒也不会因为只说了一个“开”字就触发了动作。5.2 无线控制距离不够怎么办如果客厅到卧室的直线距离超过30米ESP-NOW可能偶发丢包。我的建议把中枢节点放在家居的中间位置比如走廊顶部的吊灯处这样到各房间的距离都比较近。增加一个“中继”节点利用ESP8266的软串口作为无线转发器把收到的数据帧重新广播一次。调整ESP8266的WiFi发射功率在WiFi.setOutputPower(20.5)设置为最大值20.5dBm。实测比默认功率高10%左右的距离。不过说实话正常户型一堵墙情况下ESP-NOW足够用。我实测过从厨房到卧室角落穿过两堵墙大概35米偶尔丢一两包但不会造成灯具控制失败因为每条语音指令都有重发机制用户会说第二遍。5.3 掉电重启后失控怎么办离线系统的最大优势是上电即工作但我踩过一个坑语音模块和ESP8266同时上电ESP8266启动快可能在语音模块还没准备好时就去读取串口导致第一条指令丢失。解决方案是在ESP8266的setup里延时2秒等待语音模块稳定后再初始化串口和ESP-NOW。另外继电器模块在上电瞬间可能会有短暂的电平抖动导致灯闪一下。我在执行端加了一个RC延时电路电容电阻接地让GPIO默认输出低电平等延时稳定后再进入主循环。5.4 实测效果与改进空间整套系统我用了大概四个月体验稳定。语音识别成功率在安静环境下将近98%嘈杂环境下开着电视、风扇也能达到92%以上。无线控制延时几乎感觉不到按下语音指令到灯亮大概在0.5秒以内这个速度比很多商业智能音箱都强。改进空间也有。比如现在只能做“单控”或“全开全灭”还没有联动场景。后续打算在ESP8266中枢里做一个简单的场景引擎把“看电影”映射为“关主灯开暗灯拉窗帘”这样只需一句语音就能唤起一组动作。另外当前执行端采用的是继电器通断灯光亮度不支持调节如果想做无极调光需要把继电器换成PWM调光模块用ESP8266的PWM引脚控制可控硅或MOS管这块电路更复杂一些。最后分享一个小技巧如果你手里没有编程基础其实也可以玩转这套系统。启英泰伦的配置工具支持图形化界面串口协议也可以直接用串口助手调试不一定非得写代码。用“USB转TTL”连接语音模块先手动发数据帧测试无线链路再接入ESP8266排查起来会顺畅很多。我自己每次加新设备都会先单独测试语音模块的串口输出确认收到正确数据后再接无线中枢这样可以把语音问题和无线问题分开定位。这套方法帮我省了不少排查时间分享给你。
企业数字化 ERP 产品动态
相关推荐
IPS2550电感式位置传感器I2C寄存器配置实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:07:33
云计算导论实战:从虚拟化到分布式计算,把概念变成命令 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:07:33
飞控校准本质:建立物理世界与数字模型的信任链 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:07:33
Comp AI CRM 前端实战:React 条件渲染为何要用三元运算符替代 ``,避免渲染出 0 与 NaN 后端前端CRM人工智能AI Agent 【免费下载链接】crm Comp AI CRM is an open source, CRM designed for AI agents. Agentic-first CRM. 项目地址: https://gitcode.com/gh_mirrors/crm48/crm 点击查看 免费下载 导读
本文围绕 Comp AI CRM 前端代码库(… · 2026/9/24 14:07:26
CH347F实战:一芯搞定STM32 SWD调试与SPI Flash烧录 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 14:07:20
Flet 中 OpenUrl 客户端动作:在用户手势内打开链接,彻底规避弹窗拦截 前端跨平台桌面应用移动开发 【免费下载链接】flet Build realtime web, mobile and desktop apps in Python only. No frontend experience required. 项目地址: https://gitcode.com/gh_mirrors/fl/flet 点击查看 免费下载 导读
在 Flet(一个仅用 Py… · 2026/9/24 14:07:20
EMQX Dashboard 修复 SSO 邮箱用户名 URL 编码下的 RBAC 与自助 MFA 禁用问题 后端物联网消息队列通信 【免费下载链接】emqx The most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles 项目地址: https://gitcode.com/gh_mirrors/em/emqx 点击查看 免费下载 EMQX Dashboard 在 5.9 起引入多因素认证(… · 2026/9/24 14:07:20
Xing4.0-29B-A4B国产算力训练全解:Ascend NPU与MindSpore深度优化 Xing4.0-29B-A4B国产算力训练全解:Ascend NPU与MindSpore深度优化 【免费下载链接】Xing4.0-29B-A4B Xing4.0-29B-A4B 是中电信人工智能科技有限公司研发的星辰语义大模型系列(原 TeleChat)新一代模型。模型总参数量 29B,激活参数… · 2026/9/24 14:07:20
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44