ESP32_AI_LLM

ESP32_AI_LLM

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

Stars: 82

Visit
 screenshot

ESP32_AI_LLM is a project that uses ESP32 to connect to Xunfei Xinghuo, Dou Bao, and Tongyi Qianwen large models to achieve voice chat functions, supporting online voice wake-up, continuous conversation, music playback, and real-time display of conversation content on an external screen. The project requires specific hardware components and provides functionalities such as voice wake-up, voice conversation, convenient network configuration, music playback, volume adjustment, LED control, model switching, and screen display. Users can deploy the project by setting up Xunfei services, cloning the repository, configuring necessary parameters, installing drivers, compiling, and burning the code.

README:

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)。手机或电脑连接此网络后,浏览器访问(http://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)。手机或电脑连接此网络后,浏览器访问(http://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

For Tasks:

Click tags to check more tools for each tasks

For Jobs:

Alternative AI tools for ESP32_AI_LLM

Similar Open Source Tools

For similar tasks

For similar jobs