ESP32-C3 语音助手 + StarFive 2 上的 Home Assistant
控制灯具的实践
从硬件接线、离线 STT/TTS 部署,到唤醒词方案选型与踩坑记录
一路摸索下来,试过不少坑,解决问题的最终办法基本上都是从源代码进行编译,但通过实践验证了方案的可实践性(只要是HA中的智能家居都是可以控制的),Starfive2这块小开发板还是挺好用的。
有图有真相:
测试环境: Starfive2 厂家官方Debian, Home Assistant 2024.7 Core容器(较旧,勉强能用),ESP Home2025.5

数据流说明
- 采集:INMP441 通过 I2S 接口将 16kHz / 16bit / 单声道 PCM 音频送入 ESP32-C3。
- 传输:ESP32-C3 通过 ESPHome 的
voice_assistant组件,把音频流经 Wi-Fi 发送到 Home Assistant。 - 识别:HA 将音频转发给 Wyoming STT 服务(sherpa-ncnn),得到文本指令。
- 理解:HA 的对话代理(Intent)解析文本,匹配到"打开/关闭客厅的灯"意图。
- 执行:HA 调用灯具实体服务,通过 MQTT 或局域网协议控制灯。
- 反馈:HA 生成响应文本,经 Wyoming TTS(Piper)合成语音(可选播放)。



cmake .. -DCMAKE_BUILD_TYPE=Release \
-DGGML_RVV=OFF \
-DGGML_RV_ZFH=OFF \
-DGGML_RV_ZICBOP=OFF \
-DGGML_RV_ZIHINTPAUSE=OFF \
-DCMAKE_C_FLAGS="-march=rv64gc" \
-DCMAKE_CXX_FLAGS="-march=rv64gc"编写了一个 Wyoming 协议服务脚本 wyoming_sherpa_ncnn.py,通过 subprocess 调用 sherpa-ncnn 二进制完成识别,并用 systemd 管理为开机自启服务。
4.4 阶段四:离线 TTS(Piper)部署
- 从源码安装
wyoming-piper,依赖onnxruntime需手动安装 RISC-V wheel。 - 系统 Python 受 PEP 668 保护,必须使用虚拟环境。
- NumPy 2.x 与旧版 onnxruntime 不兼容,需
pip install "numpy<2"。 - 中文语音模型使用
zh_CN-huayan-medium。
4.5 阶段五:ESP32-C3 语音采集端配置
esp32:
board: esp32-c3-devkitm-1
variant: ESP32C3
framework:
type: esp-idf # 语音助手必须用 esp-idf,Arduino 不支持
i2s_audio:
- id: i2s_mic
i2s_lrclk_pin: GPIO6
i2s_bclk_pin: GPIO7
microphone:
- platform: i2s_audio
id: mic
adc_type: external
i2s_din_pin: GPIO5
channel: left
sample_rate: 16000
bits_per_sample: 32bit
pdm: false
voice_assistant:
microphone: mic
use_wake_word: false
noise_suppression_level: 2
auto_gain: 31dBFS4.6 阶段六:HA Assist Pipeline 配置
- 进入 设置 → 语音助手,创建管道。
- STT 选择 Wyoming Protocol(sherpa_ncnn)。
- TTS 选择 Piper(必须配置,否则 Pipeline 验证失败)。
- 对话代理选择 Home Assistant。
- 在 ESP32 设备页面绑定该管道。
6.5 一点心得
StarFive 2 是一块"性能跑起来还不错但需要一些折腾精神"的 RISC-V 开发板。它的价值不在于开箱即用的体验,低功耗和四核CPU、4/8G内存,RISC-V架构上可以稳定的运行Debian,在安装了128G NVME SSD后加载运行速度停不错的。一定不要裸奔,安装上散热片,有风扇就更好;
部分安装过程:
sudo apt update
sudo apt install -y curl build-essential libssl-dev pkg-config
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
rustup target add riscv64gc-unknown-linux-gnu
sudo apt install -y libffi-dev
python环境和rust编译环境准备好了,才能正常安装esphome(过程需要编译,等待了好一伙,好在成功了。)
source ~/esphome-venv/bin/activate
(esphome-venv) user@starfive:~$ dpkg -L libffi-dev | grep ffi.h
/usr/include/riscv64-linux-gnu/ffi.h
/usr/share/doc/libffi8/html/Using-libffi.html
(esphome-venv) user@starfive:~$ pip install esphome
🚀 启动 ESPHome Dashboard
1. 确保虚拟环境已激活(如果已经退出,需要重新激活):(我提前建好了config目录,)
source ~/esphome-venv/bin/activateesphome dashboard /data/esphome/config/














7小部分

开源社区 



