ESP32-S3结合百度文心一言大模型打造智能语音助手(从零实现自定义唤醒词与多API集成)
1. 项目概述:从零打造智能语音助手的完整方案
大家好,今天我要分享一个超实用的AI语音助手项目——用ESP32-S3结合百度文心一言大模型打造智能语音助手。这个项目特别适合想要入门AIoT开发的爱好者,无论你是学生、创客还是嵌入式开发者,都能从中获得实实在在的收获。
我实际测试过整套方案,效果真的很惊艳!ESP32-S3作为主控芯片,搭配INMP441麦克风和MAX98357音频放大器,再加上百度提供的语音识别、语音合成和大模型服务,就能实现一个完整的语音交互系统。最棒的是,这个项目支持自定义唤醒词训练,你可以训练属于自己的专属唤醒词,比如"小爱同学"、"天猫精灵"这样的唤醒词都可以自定义。
整个项目涵盖了硬件连接、软件配置、API调用和模型训练等多个环节。我会手把手带你走完每个步骤,包括如何搭建开发环境、如何连接硬件、如何调用百度AI服务,以及如何训练自己的唤醒词模型。即使你是零基础的新手,跟着我的步骤也能顺利完成。
2. 开发环境搭建与配置
2.1 Arduino IDE安装与配置
首先我们需要安装Arduino IDE,这是开发ESP32-S3的主要工具。我建议直接从Arduino官网下载最新版本,安装过程很简单,一路点击"下一步"就可以了。安装完成后,记得把界面语言设置为中文,这样用起来更顺手。
打开Arduino IDE后,我们需要安装ESP32-S3的开发板支持包。点击"文件"->"首选项",在"附加开发板管理器网址"中添加这个链接:https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
然后打开"工具"->"开发板"->"开发板管理器",搜索"esp32",选择版本2.0.17(这个版本比较稳定),点击安装。如果网络不好导致安装失败,可以尝试多次点击安装,或者使用离线安装包。
我实际安装时发现在线安装有时候会比较慢,所以准备了离线安装方案。你可以从百度网盘下载安装包(链接:https://pan.baidu.com/s/1Qruk23AAyqvJd3AS16LRrA 提取码:tz3n),解压到Arduino的packages目录下。具体路径是:C:\Users\你的用户名\AppData\Local\Arduino15\packages。注意AppData是个隐藏文件夹,需要在文件夹选项中设置显示隐藏文件。
2.2 必要的库文件安装
接下来需要安装几个必要的库文件。有些库可以直接通过库管理器安装,有些则需要手动导入。
在线安装的库包括:
- ArduinoJson:用于处理JSON数据格式
- base64:用于Base64编码解码
- UrlEncode:用于URL编码
安装方法很简单,点击"项目"->"加载库"->"管理库",搜索库名称,选择最新版本安装即可。
离线安装的库主要是唤醒词检测库(wakeup_detect_houguoxiong_inferencing),这个需要手动导入。点击"项目"->"加载库"->"添加.ZIP库",选择下载好的ZIP文件即可。
我在安装过程中发现,库文件的版本兼容性很重要。如果使用不兼容的版本,可能会导致编译错误。所以建议严格按照项目要求的版本进行安装。
3. 硬件准备与连接指南
3.1 所需硬件组件清单
要完成这个项目,你需要准备以下硬件组件:
核心开发板: ESP32-S3-N16R8开发板,这是项目的主控芯片,负责处理所有的逻辑控制和数据通信。我推荐使用这款开发板是因为它性能足够强大,而且兼容性很好。
音频模块: 推荐使用集成音频板,它包含了INMP441麦克风、MAX98357音频放大器和喇叭,可以直接通过排母扣接在ESP32-S3开发板上,避免了繁琐的杜邦线连接。如果你喜欢自己动手,也可以分别购买这些模块然后用杜邦线连接。
SD卡模块(用于唤醒词训练): 包括microSD卡(容量小于32GB)、读卡器和microSD SPI接口模块。SD卡需要格式化为FAT32格式,这个在电脑上很容易操作。
我在选择硬件时踩过一些坑,比如最初用了高速大容量SD卡,反而出现了兼容性问题。后来换成了低速小容量SD卡(128MB就够用),问题就解决了。所以建议大家也选择容量小于2GB的低速卡。
3.2 硬件连接详解
音频模块连接: INMP441麦克风与ESP32-S3的连接:
- SCK(BCLK)接GPIO4
- WS(LRC)接GPIO5
- SD(DIN)接GPIO6
- VCC接3.3V
- GND接GND
MAX98357与ESP32-S3的连接:
- BCLK接GPIO15
- LRCLK接GPIO16
- DIN接GPIO7
- VCC接3.3V
- GND接GND
喇叭的"+"连接到MAX98357的OUTP,"-"连接到OUTN。
SD卡模块连接:
- CS接GPIO10
- MISO接GPIO13
- MOSI接GPIO11
- SCK接GPIO12
- VCC接5V(重要:接3.3V可能会不稳定)
- GND接GND
我在连接VCC时发现,如果接3.3V,SD卡访问经常失败,改成接5V后就稳定了。这是因为这个microSD模块自身支持电平转换到3.3V。
4. 基础功能测试与调试
4.1 第一个示例程序:Blink测试
让我们从最简单的Blink程序开始,熟悉Arduino的开发流程。打开Arduino IDE,选择"文件"->"示例"->"Basics"->"Blink",这样就创建了一个让LED闪烁的示例工程。
接下来需要选择开发板和端口。点击工具栏上的开发板选择栏,选择"ESP32S3 Dev Module",端口选择USB连接后出现的串口号(可以在设备管理器中查看)。
编译代码点击左上角的对勾图标,下载程序需要先让ESP32-S3进入下载模式:按住BOOT键不松手,然后短按一下RST键后松手,最后松开BOOT键。这时候点击左上角的箭头图标开始下载程序。
下载完成后,你会看到板载LED开始闪烁,这说明我们的开发环境搭建成功了!你可以在代码中添加串口打印功能,方便调试:
void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); Serial.println("blink test"); } 4.2 音频录制与播放测试
音频功能测试很重要,我们需要确保麦克风和喇叭都能正常工作。测试工程在esp32s3-ai-chat/example/audio_player目录下。
这个测试程序实现了音频的环回功能:从麦克风采集音频,然后直接通过喇叭播放出来。如果硬件连接正确,你对着麦克风说话,就能从喇叭听到自己的声音。
如果听不到声音,可以通过串口监视器来调试。我推