Skip to content

本项目使用esp32、esp32s3接入讯飞星火、豆包、通义千问(智能体应用)、Chatgpt等大模型,实现语音对话聊天功能,支持语音唤醒、连续对话、音乐播放等功能,同时外接了一块显示屏实时显示对话的内容。

License

Notifications You must be signed in to change notification settings

Explorerlowi/ESP32_AI_LLM

Repository files navigation

ESP32_AI_LLM(接入asrpro模块的版本在withasrpro分支)

简介

本项目使用esp32接入讯飞星火大模型、豆包大模型(流式调用)、通义千问大模型实现语音对话聊天功能,支持在线语音唤醒、连续对话、音乐播放等功能,同时外接了一块显示屏实时显示对话的内容。

使用说明

开通讯飞相关服务(在llm-parameter文件夹可以看到各参数所在位置的图片)

1.进入讯飞开发平台主页(https://www.xfyun.cn),注册账号,然后进入控制台,创建新应用。

2.开通相关服务:

  • llm大模型服务:
  • stt语音转文字服务:

开通豆包大模型服务(可选)

进入火山引擎主页(https://console.volcengine.com),注册账号,实名认证。 主页->产品->豆包大模型(火山方舟)->立即体验->API Key管理->创建API Key->开通管理->开通你想使用的大模型服务->在线推理->创建推理接入点

开通通义千问大模型服务(可选)

进入阿里云百炼大模型服务平台(https://bailian.console.aliyun.com),支付宝扫码登录,或者注册账号。

项目开发环境

使用vscode中的platformIO插件

硬件使用清单

ESP-WROOM-32、INMP441全向麦克风、MAX98357 I2S音频放大器模块、喇叭、1.8寸(128x160)RGB_TFT屏幕、面包板(400孔85x55mm)两块、面包板跳线若干、数据线一条、led灯一个(可选)

  • 注意事项:其中ESP32需要安装相应的驱动程序

硬件接线

麦克风:

  • VDD -> 3.3v
  • GND -> GND
  • SD -> GPIO22
  • WS -> GPIO15
  • SCK -> GPIO4

音频放大模块:

  • Vin -> VIN
  • GND -> GND
  • LRC -> GPIO27
  • BCLK -> GPIO26
  • DIN -> GPIO25

1.8寸OLED屏幕:

  • VDD -> VIN
  • GND -> GND
  • SCL -> GPIO18
  • SDA -> GPIO23
  • RST -> GPIO12
  • DC -> GPIO32
  • CS -> GPIO5

led灯:

  • 正极 -> GPIO33
  • 负极 -> GND

连接成品图在最后

串口监视器推荐

https://serial.keysking.com

  • 设置参考: image0

程序执行流程

setup初始化:

  • 初始化串口通信、引脚配置、屏幕显示、录音模块Audio1、音频输出模块Audio2。
  • 初始化Preferences,调用wifiConnect()连接网络。
  • 调用getTimeFromServer()从百度服务器获取当前日期和时间,然后调用getUrl()生成url和url1(分别用于星火大模型和语音识别的鉴权)。
  • 如果网络连接成功,则开始对话;如果连接失败,esp32启动热点和web服务器。

loop循环:

  • 轮询处理WebSocket客户端消息,检查和处理从服务器接收的消息、发送等待发送的数据,维护与服务器的连接。
  • 如果有多段语音需要播放,调用voiceplay()函数播放后续的语音。
  • 调用audio2.loop()确保音频流的连续和稳定播放。
  • 没有音频播放时,熄灭板载LED;有音频播放时,点亮板载LED。
  • 进入待机模式,启动唤醒词识别,可在onMessageCallback1()中自定义唤醒词。
  • 检测到板载boot按键被按下时,连接WebSocket服务器1(语音转文字)并开启录音,在8秒内没有说话就会结束本轮对话,然后进入待机模式,启动唤醒词识别。如果有说话,录音结束后调用讯飞STT服务API接口将语音转文本。如果文本内容为空,回复“对不起,我没有听清,可以再说一遍吗?”;不为空时连接WebSocket服务器(大模型),将文本发送给星火大模型(可选豆包大模型),然后接收大模型回复文本,并发送给百度的TTS服务转语音播放,同时在屏幕上显示对话内容。
  • 检测到AI说话完毕后,自动连接WebSocket服务器1(语音转文字)并开启录音,后面的与上一条相同,实现连续对话功能。

功能介绍

语音唤醒功能

设备启动连接网络后会直接进入待机状态,开启录音并连接讯飞的stt服务进行唤醒词识别,如果长时间不使用,请断开设备电源,防止讯飞stt服务量的大量耗费。唤醒词可在main.cpp的第999行修改。

语音对话功能

ESP32连接网络后,进行语音唤醒或者按下板载的boot键即可开始对话。项目使用INMP441全向麦克风模块接受用户的语音输入,然后调用科大讯飞的STT服务API接口,将语音数据发送进行语音识别,接收返回的信息并提取出识别结果。接收到识别结果后,调用科大讯飞的星火大模型(可选豆包大模型)的API接口,将识别结果发送至大模型,由大模型给出回答后,从返回的信息中提取出回答内容,并发送给百度的TTS服务,最终输出语音回答。

  • 注意:没有屏幕也能正常进行对话

便捷配网功能

网络连接通过读取ESP32 flash的NVS中存储的Wi-Fi信息实现。设备启动后开始联网时,板载LED会闪烁,屏幕显示相应的连接状态信息。esp32处于断网状态时,ESP32启动AP模式,创建临时网络热点ESP32-Setup(初始密码为12345678)。手机或电脑连接此网络后,浏览器访问(https://192.168.4.1),出现配置网页界面,通过该网页界面,即可进行网络的配置。

配置界面包含以下功能:

  • 输入目标Wi-Fi的SSID和密码后,点击Save按钮提交。如果Wi-Fi不存在,则添加到ESP32 flash的NVS中;如果存在,则修改密码。操作完成后,屏幕显示信息。
  • 输入目标Wi-Fi的SSID后,按下Delete按钮,从ESP32 flash的NVS中删除Wi-Fi信息。操作完成后,屏幕显示信息。
  • 点击List Wi-Fi Networks按钮,查看NVS中已存储的所有Wi-Fi信息。

音乐播放功能

音乐播放白嫖了网易云的音乐服务器,通过("https://music.163.com/song/media/outer/url?id=音乐数字id.mp3")即可访问音乐文件(vip音乐不支持)。 image1 音乐播放通过读取ESP32 flash的NVS中存储的音乐信息实现。esp32处于断网状态时,ESP32启动AP模式,创建临时网络热点ESP32-Setup(初始密码为12345678)。手机或电脑连接此网络后,浏览器访问(https://192.168.4.1),出现配置网页界面,通过该网页界面,即可进行音乐信息的添加与删除。

配置界面包含以下功能:

  • 输入目标音乐的名称和数字id后,点击Save按钮提交。如果音乐不存在,则添加到ESP32 flash的NVS中;如果存在,则修改数字id。操作完成后,屏幕显示信息。

需要注意的点:比较长的音乐名建议不要写全,因为stt不一定识别的出来,可能只能识别出一部分,然后就是尽量不要写英文名称,因为英文识别准确率太烂了。还有就是部分音乐播放到中间会重新开始播放,好像是网易云的问题。

  • 输入目标音乐的名称后,按下Delete按钮,从ESP32 flash的NVS中删除音乐信息。操作完成后,屏幕显示信息。
  • 点击List Saved Music按钮,查看NVS中已存储的所有音乐信息。

音量调节和开关灯功能

通过相关的语音指令,可以实现音量的调节与显示,led灯的开关。在AI说话时,按下boot键说出调节音量和开关灯的指令,esp32做出对应的反应后会继续刚才没说完的话。

音乐暂停和恢复播放指令

在音乐正在播放时,按下boot键说出”暂停播放”指令,即可暂停播放,再按下boot键说出”恢复播放”指令,即可恢复播放。

大模型切换功能指令

在和AI进行对话时,通过说出“切换模型”指令(要具体的说出切换为第几个大模型或者大模型具体的名字),目前可以在豆包,星火,通义千问三个大模型之间进行切换。

屏幕显示功能

使用一块1.8寸(128x160)RGB_TFT屏幕显示用户与大模型的对话内容等信息

项目部署教程

  • 下载vscode和platformIO插件
  • 开通讯飞相关服务(可选:开通豆包大模型服务)
  • 将项目克隆到本地,在vscode中打开整个文件夹,然后等待依赖库下载完毕(右下角的状态栏显示下载进度)
  • 找到.pio\libdeps\upesy_wroom\TFT_eSPI路径下的User_Setup.h文件,删除它,然后将根目录下的User_Setup.h文件剪切粘贴过去
  • 填写main.cpp中要求填写的讯飞账号参数(可选:填写豆包大模型的参数)
  • 安装esp32的驱动
  • 编译、烧录

项目成品图参考

image image

About

本项目使用esp32、esp32s3接入讯飞星火、豆包、通义千问(智能体应用)、Chatgpt等大模型,实现语音对话聊天功能,支持语音唤醒、连续对话、音乐播放等功能,同时外接了一块显示屏实时显示对话的内容。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published