ESP32 + Rust 开发的简易语音助手
本文分享使用 ESP32 和 Rust 开发简易语音助手的经验与踩坑记录。虽然涉及嵌入式开发,但主要聚焦于应用层逻辑,适合从纯软件开发转向嵌入式的开发者参考。
项目地址:https://github.com/xgpxg/esp32-voice-assistant-demo
硬件准备
由于需要在几十块的板子上运行语音功能,ESP32 自带 WiFi、蓝牙并支持 I2S,是合适的选择。本次选择 ESP32-S3。
语音输入需要麦克风和喇叭,常用型号为 INM441 和 MAX98357A。

开发环境准备
ESP32 官方提供了 Rust SDK esp-idf-svc,环境配置可参考:https://github.com/esp-rs/esp-idf-template。
环境示例:Windows + WSL2。
安装依赖
# 依赖包
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
# 工具包
cargo install cargo-generate
cargo install ldproxy
cargo install espup
cargo install espflash
# 安装 esp
espup install
# 安装 usbipd(用于将 Windows 的 USB 设备提供给 WSL)
winget install usbipd
烧录程序直接执行 cargo run -r 即可,无需 debug 模式以减小体积。
连接麦克风
麦克风使用 INM441,引脚功能如下:
- VDD:电源输入,3.3V。
- GND:接地。
- SD:数据输入。
- L/R:左声道/右声道,默认接地为左声道。
- WS:字选择时钟。
- SCK:BCLK,数据位同步。

连接到 ESP32-S3 时,SD、WS 和 SCK 需与代码中分配的 IO 口保持一致。
连接喇叭
喇叭包含解码器 MAX98357A 和小喇叭。



