发作品签到
专业版

ESP32直接对话大语言模型人工智能语音助手

工程标签

2.4w
0
0
62

简介

ESP32S3使用INMP441接收声音换为文字,再讲文字发送至大语言模型服务提问,文字发送至TTS语音合成服务,并通过MAX98357A播放音频。

简介:ESP32S3使用INMP441接收声音换为文字,再讲文字发送至大语言模型服务提问,文字发送至TTS语音合成服务,并通过MAX98357A播放音频。
星火计划2024

开源协议

GPL 3.0

创建时间:2024-06-05 16:08:31更新时间:2024-07-11 11:44:40

描述

ESP32S3使用INMP441接收声音后将pcm音频数据发送至STT语音识别服务转换为文字,再将文字发送至大语言模型API提问,最后将回答的文字发送至TTS语音合成服务,并通过MAX98357A播放音频,过程中用TFT触摸显示屏进行交互显示。

视频连接:

https://www.bilibili.com/video/BV1F1421k7Sv/?vd_source=922712da2bcef8666165702c88f19f89

项目原本是做ESP32播放MP3播放器的衍生项目。想着既然能播放就也能录音,所以就继续作了这个用esp32进行音频处理的简单处理的小玩意。

项目中STT语文识别和TTS语音合成都是使用的是讯飞API,需要先注册讯飞账号(https://www.xfyun.cn/),领取试用礼包后,方可以免费用时间。

项目中大语言模型使用的是火山引擎的豆包同款引擎(https://www.volcengine.com/product/ark),也是需要先注册账号,领取免费试用后,也可以试用一段时间。

上面三个API从各自官网控制台获取到KEY后修改代码中相关的字段,才可以正常连接到API,代码中还需要修改WiFi的连接信息

其中讯飞的服务使用webscoket连接API,TTS使用了流式处理,一边接收一边播放音频,但数据处理不严谨有时会发生错误还没有解决,请自行排查修改吧。

火山引擎使用HTTP连接API(因为火山的webscoket确实没有调通,才疏学浅见笑了),没有做到流式处理,反应时间部分浪费再了这里。

STT虽然也使用webscoket连接但没有用流式处理(懒),说短句子没有什么影响,发送长句子的话,有一部分时间也是浪费在这里了。

主任才疏学浅,勉强整合些基础知识,让这个想法实现,代码供同道新人参考,高手一笑了之。

如道友有意复刻此项目,请务必先下载源码进行编译测试,可编译通过再进行复刻尝试,如若不能还请三思。

编译环境如下

编译软件:ArduinoIDE 2.3.2

SDK:  ESP32 SDK 2.0.13(开发板管理中下载)

使用主要库:TFT_eSPI 2.5.43 (库管理中下载)、

                     U8g2_for_TFT_eSPI (下载地址:https://github.com/Bodmer/U8g2_for_TFT_eSPI)

开发板设置:

附件的源码包中有一个 Base64_Arturo库,需先复制到libraries/ 目录下

主板上R38和R39两个电阻是控制MAX98357A模块GAIN接口上下拉的,只需焊接其中之一或都不焊接都行。切勿两个同时焊接,务必注意,默认悬空不焊接。

GAIN管脚作用:

GAIN is, well, the gain setting. You can have a gain of 3dB, 6dB, 9dB, 12dB or 15dB.

  • 15dB if a 100K resistor is connected between GAIN and GND
  • 12dB if GAIN is connected directly to GND
  • 9dB if GAIN is not connected to anything (this is the default)
  • 6dB if GAIN is connected directly to Vin
  • 3dB if a 100K resistor is connected between GAIN and Vin

 

 

TFT-espi的管脚设置:

#define ILI9341_DRIVER
#define TFT_WIDTH  320 
#define TFT_HEIGHT 240 

#define TFT_MISO 19
#define TFT_MOSI 4 // In some display driver board, it might be written as "SDA" and so on.
#define TFT_SCLK 5
#define TFT_CS   16  // Chip select control pin5
#define TFT_DC   6  // Data Command control pin
#define TFT_RST  -1  // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL   7  // LED back-light
#define TFT_BACKLIGHT_ON HIGH
#define TOUCH_CS 15     // Chip select pin (T_CS) of touch screen

 

 

 

关于其中元器件:

ESP32S3模块选用:S3-WROOM-1-N16R8 版本 我使用的连接:https://item.taobao.com/item.htm?spm=a1z09.2.0.0.54402e8dfVHHff&id=675349632310&_u=o2oqo1kf26cd

INMP441 与 MAX98357A 使用的都是模块,直接从淘宝上搜索购买即可

电池插头是1.25间距正接头,仅支持单节3.7v锂电池,typec接口有充电功能,可以给锂电池充电。

喇叭:MAX98357A可以推动3w喇叭

串口模块是CH340C,后面代C需要注意。

显示屏幕是3.2寸带触摸屏幕参考连接:https://item.taobao.com/item.htm?spm=a1z09.2.0.0.54402e8dfVHHff&id=643516677167&_u=o2oqo1kfcc57

主板上有一颗MPU-6050陀螺仪,本来是想用于屏幕跟随旋转使用的,但本项目并未使用,不玩的话可以空掉不焊接。

 

其他具体看视频介绍吧,主任基本上不回复信息,因为大部分问题我也不知该如何作答。

一定要问的话,抖音上回复的概率高些。

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
ESP32S3_STT_TFT_Doubao_xunfeiTTS_v1.3_k.zip
1658
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航