一、引言
在之前的帖子《Esp32S3通过文心一言大模型实现智能语音对话》中,我们介绍了如何使用Esp32S3微控制器与文心一言大模型实现基本的智能语音对话功能,但受限于语音识别技术,只能处理2-3秒的音频数据。为了提升用户体验,满足更长时间的语音聊天对话需求,本次优化采用了流式语音识别技术,并添加了语音唤醒模块,实现了语音关键词唤醒功能。
二、开发环境介绍
1、arduino开发平台;
2、所需设备:Esp32s3、inmp441、max98357、ASRPRO语音模块、ILI9488显示屏,杜邦线(接线);
3、大模型:百度的文心一言大模型,豆包的火山引擎大模型;
4、语音识别(STT)和语音合成(TTS):使用百度语音识别和语音合成;
5、使用语言:C/C++;
三、拓扑图
四、设备购买链接
1、esp32s3:
2、inmp441:
3、max98357:
4、ASRPRO语音模块:
5、扬声器:
6、杜邦线:
7、ILI9488显示屏
五、接线
1、INMP441与Esp32S3接线
1.1、inmp44介绍
INMP441是一款高性能,低功耗,数字输出,带底部端口的全向MEMS麦克风。该完整的INMP441解决方案由一个MEMS传感器,信号组成调节,模数转换器,抗混叠滤波器,电源管理和行业标准的24位I²S接口。I²S接口允许INMP441直接连接到数字处理器,如DSP和微控制器,无需使用用于系统中的音频编解码器。INMP441具有高信噪比,是一款出色的选择近场应用。 INMP441具有扁平宽带频率响应,导致自然声音高清晰度。
1.2、inmp441接口定义
SCK:I²S接口的串行数据时钟。
WS:用于I²S接口的串行数据字选择。
L/R:左/右声道选择。设置为低电平时,麦克风在I²S帧的左声道输出信号。设置为高电平时,麦克风在右声道输出信号。
SD:I²S接口的串行数据输出。
VDD:输入电源,1.8V至3.3V。
GND:电源地。
1.3、实物图
1.4、接线
Esp32S3 | INMP441 |
GPIO 8引脚 | WS |
GPIO 46引脚 | SCK |
GPIO 9引脚 | SD |
GND引脚 | L/R 和GND |
3.3V引脚 | VDD |
2、MAX98357与Esp32S3接线
2.1、max98357介绍
这是一个采用标准的I2S作为数字音频输入,内置解码器,可将数字音频信号解码为模拟信号,并拥有内置放大器,可以直接驱动扬声器的D类放大器。因其工作效率高,可以以2.7V~5.5V的直流电压运行,因此非常适合便携式及电池供电的音频播放项目
2.2、max98357接口定义
VIN:电源正(2.5V-5.5V)。
GND:电源地。
SD:关机和频道选择。SD MODE拉低以将器件处于关断状态。
GAIN:增益和频道选择。在TDM模式下,增益固定为12dB。
DIN:数字信号输入。
BCLK:位时钟输入。
LRC:I2S与LJ模式的左/右时钟。同步时钟用于TDM模式。
2.3、实物图
2.4、接线
Esp32S3 | MAX98357 |
GPIO 19引脚 | DIN |
GPIO 20引脚 | BCLK |
GPIO 21引脚 | LRC |
GND引脚 | GND |
3.3V引脚 | VIN |
3、ASRPRO与Esp32S3接线
3.1、ASRPRO语音模块介绍
ASRPRO是一款高性能、低功耗的语音识别芯片,在使用过程中可以设置唤醒词和命令词。唤醒词用于将模块从待机状态切换到工作状态,防止误触发;命令词则用于执行具体的语音指令。本文中主要是借用了唤醒词的功能,使得esp32s3板子可以依赖语音唤醒。
3.2、接口定义
该模块接口可自行查资料了解。
3.3、实物图
3.4、接线
Esp32S3 | ASRPRO |
GPIO 10引脚 | PA_2 |
GPIO 11引脚 | PA_3 |
4、扬声器与MAX98357接线
这个接线比较简单,自己看着接就行。
六、源码-模块化开发
文件目录如下: