侧边栏壁纸
  • 累计撰写 21 篇文章
  • 累计收到 1 条评论

30行Python代码搭本地离线语音控灯 断网也能控制IoT设备

2026-9-9 / 0 评论 / 7 阅读

你有没有遇过智能家居音箱断网就变砖,喊破喉咙也开不了客厅灯的情况?
今天搭的这套离线语音控制系统完全没这个问题,所有逻辑跑在本地,断网一样能用。

先装全依赖 别错选大模型拖慢速度

别上来就下几个G的通用语音模型,跑在树莓派或者旧笔记本上完全没必要,选vosk的0.2G中文小模型就够,常用控制指令识别准确率能到95%以上。

pip install vosk pyaudio requests
Windows装pyaudio报错就去Unofficial Windows Binaries for Python Packages下对应版本的whl包本地安装;树莓派先执行sudo apt install portaudio19-dev python3-pyaudio补系统依赖。

核心识别逻辑 改3个参数直接用

代码不用自己从头写,核心逻辑就是监听麦克风输入,匹配到预设控制词就往IoT设备发本地HTTP请求。

import vosk, pyaudio, requests, json
# 参数1:替换成你解压后的小模型本地路径
model = vosk.Model("vosk-model-small-cn-0.22")
recognizer = vosk.KaldiRecognizer(model, 16000)
mic = pyaudio.PyAudio()
stream = mic.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8000)
stream.start_stream()
while True:
    data = stream.read(4000)
    if recognizer.AcceptWaveform(data):
        res = json.loads(recognizer.Result())
        cmd = res.get("text","").replace(" ","")
        # 参数2、3:替换成你自己的IoT设备本地接口地址
        if "开灯" in cmd: requests.get("http://192.168.3.15/relay/on")
        if "关灯" in cmd: requests.get("http://192.168.3.15/relay/off")

IoT端极简配置 不用写复杂固件

  • ESP8266模块直接刷ESPEasy现成固件,开启继电器控制的Web接口,GPIO引脚接弱电继电器模块再串到灯的供电回路,不用自己写Arduino固件
  • 给ESP8266设置局域网固定IP,关闭DHCP动态地址分配,避免接口地址变动导致控制失效
  • 运行Python脚本的设备和ESP8266连同一个路由器即可,不需要公网IP、不需要对接任何云平台
实测整套链路识别延迟不到200ms,比多数联网智能音箱反应快,所有语音数据全程在局域网内处理,不会上传到任何第三方服务器,隐私性拉满。

评论一下?

OωO
取消