type
Post
status
Published
date
Sep 12, 2025
slug
summary
tags
ESP32
语音识别
category
Hardware
icon
password
一开始单纯的想玩一把硬件电路,2个小时候后,手搓出一个语音控制系统!
估计很大概率是受短视频平台上,各种手搓党视频的蛊,什么手搓遥控图传飞机、什么手搓激光火控系统、什么维修多年废弃赛车…
就突然很想玩一把硬件科技。于是,就这么突兀的开始有方向但没目标的手搓之旅。
这个语音控制系统是如何一步一步手搓出来的呢?
超声波:近距离控制小灯
虽然很少有接触硬件,但作者CS背景,所以单片机开发所需的开发环境和C++上手起来还算顺利。
想着从最简单的入手,于是找到各种硬件、连接电路、打开陌生开发环境Ardunio,开整!

想实现的效果:手一挥小灯就自动亮起,显示器上实时显示小灯状态。
实现原理很简单:超声波检测距离,然后控制小灯开关。直接上核心代码:
- 超声波测距
- 硬件电路控制,给到高电平即可
经过几轮的距离检测调试,目标效果完美实现。
这个时候发现,ESP32单片机本身自带了WIFI模块,于是这个想法就冒出来了:能不能把小灯控制做成Web服务,就是说实现网页控制?
WIFI:远距离控制小灯
先看效果:比如你在公司里就可以通过网络就可以控制家里的小灯。(不知道这是不是一个实际需求场景)

实现方案也不复杂,在ESP32单片机上部署一个简单的小灯开关控制服务,然后通过ESP32的WIFI模块连接上网,实现网页和手机端访问。
如果在进一步,利用ngrok内网穿透技术,可以轻松实现公网环境控制小灯。
思路有了,直接开整,核心实现代码如下:
- 初始化WiFi连接
- 在ESP32单片机上部署小灯控制Web服务
完成以上开发之后,部署上线测试。这里使用curl方式测试如下:
注意,果你本地有代理的话,需要这么测试:
在CLI(终端)中,实际测试下来控制效果完美!
这个时候发现,既然小灯开关服务都能上网了,那我给他加上语音控制不过分吧?
语音:用声音”拿捏“小灯
先看效果:嫌动手点击麻烦,控制小灯直接吼一嗓子就行

语音识别放在当下这个年代,已经快属于”时代过剩“的技术产物了。各种语音识别模块价格也早已被打下来了,从几十到几百不等。
但这些模块有一个很大的问题,基本只能通过刷入定制好的逻辑,不支持定制化开发。这对于追求自由定制化的作者来说很不友好。
这个时候想到多年前有同事玩过树莓派,一番资料查找之后确实可以。不过看了下最新款树莓派5得500多。成本嗖一下子就上去了。
最后,还是选择用我的老Mac+Vosk实现ASR(语音识别)能力。
来,”起锅烧油“,开整!
核心实现思路:使用WebSock建立前后端实时管道,用户通过前端语音输入,后端服务通过Vosk语音模型进行即时识别,并完成指定的小灯控制指令。
- 搭建前端用户界面,HTML+CSS+JavaScript
如效果图中看到的那样,语音识别的开关,以及识别结果和小灯控制结果的展示。
- 搭建后端核心语音识别服务:FastAPI+Vosk
整个项目比较小,就采用了经典前后端一体的项目结构方案,即基于FastAPI的静态路由功能。
实际测试下来,从发出指令到小灯完成动作,时间控制的1秒以内,还算满足预期。
这个时候发现,既然语音能远程控制小灯了,那小灯完成之后,语音告诉用户小灯的状态似乎也是一个需求。
算了,这个时候不发现了。TTS(文本转语音)的功能并不比ASR(语音识别)复杂多少,这块就以后有机会再迭代了。
初步成型的简单框架
最后,以上介绍了从一个想玩硬件的想法,一步步的到最后手搓了一个语音控制灯开关的小项目,完整的用户旅途下图:
技术上用到了JavaScript、Python、C++、Vosk(语音模型),基本上一个从软件→芯片→各种硬件简单框架,算是搭建起来了。
后续迭代思考
既然ASR都有了,那怎么能缺的了TTS(语音转文字)呢,这不就组成了极简版的”Siri”或者”小冰“了么。
现在大模型这么火,把AI接进来理解用户的意图,然后把小灯控制服务封装成MCP,这样一个智能版的”Siri”或者”小冰“不就有了么。
还有很多小硬件,比如电机、舵机、伺服机… 后续都可以集成进这个语音控制系统中。
OK,这期就先玩到这里,你有什么好玩的硬件或者AI+硬件的想法,欢迎评论区留言,或者联系作者交流。
- Author:Taylor
- URL:https://www.taylorblog.top/article/26c2186a-d85d-8005-93d9-f59a883ae366
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!





.png?table=block&id=3492186a-d85d-8036-afa6-d04ba7b9d421&t=3492186a-d85d-8036-afa6-d04ba7b9d421)
.png?table=block&id=3492186a-d85d-801e-bbf0-c3f2af2b27fe&t=3492186a-d85d-801e-bbf0-c3f2af2b27fe)
.png?table=block&id=3372186a-d85d-80a0-8eef-cb0482fa6ec4&t=3372186a-d85d-80a0-8eef-cb0482fa6ec4)