esp32语音大模型接入实现语音聊天

ESP32s3系列ai语音聊天

注释:本博客记录作者搜寻资料学习成果,使用请自行删减。

感谢让我学到很多的博主:https://vor2345.blog.youkuaiyun.com/article/details/136975580

在今年九月份我在网上看到了自己的ai聊天小助手,说做就做!搜索了很多资料

选择物料: esp32s3(需要大容量ram)作者用的是xiao-sense系列,max98357,麦克风,喇叭

话不多说开写
用的是VScode,下载platformIO,然后新建工程

在这里插入图片描述

思路简介

实现大模型接入玩法
制作自己的AI助手小人
首先通过简单
一:连接wifi✔
二:接收音频✔
三:打包数据成josn格式✔
四:接入模型API实现STT✔
五:打包传输下来的文件转成josn格式✔
六:接入模型API实现TTT✔
七:串口输出文本✔
八:再次上传接入语音minmax实现TTS✔
九:编码收集,I2S播放✔
*/

用到的库

arduinojson库
audioi2s库

#include <Arduino.h>
#include "base64.h"
#include "WiFi.h"
#include "HTTPClient.h"
#include "cJSON.h"
#define ARDUINOJSON_SLOT_ID_SIZE 4
#define ARDUINOJSON_STRING_LENGTH_SIZE 4
#include <ArduinoJson.h>
#include "Audio.h"
#include <SPIFFS.h>

Audio audio;
HTTPClient HTTP_TTS;
#define key 3
#define ADC 2
#define ledPin BUILTIN_LED
//max98357扬声器引脚
#define I2S_DOUT 6  // DIN connection
#define I2S_BCLK 5  // Bit clock
#define I2S_LRC 4   // Left Right Clock

下面填写自己的注册信息百度有免费的token可以申请
创建应用,我们用短句识别就可以了
在这里插入图片描述

在这里插入图片描述
将自己的信息填入下面

// 2、修改百度语言技术的用户信息:https://console.bce.baidu.com/ai/?fromai=1#/ai/speech/app/list
String CUID = "1155xxxxxx"; //AppID
String CLIENT_ID = "uxlxxxxxxxxxxxxxxxxxxxxxxx"; //API Key
String CLIENT_SECRET = "6Qxxxxxxxxxxxxxxxxxxxxxxxx"; //Secret key
String token;//通过上面得到的密钥

下面是tts要用到的api信息
我们使用的是minmax他的响应比较快
上他的官网注册一下
下面分别是TTT和TTS的接口

//https://www.minimaxi.com/news/%E9%80%9A%E7%94%A8%E5%A4%A7%E6%A8%A1%E5%9E%8Babab65%E7%B3%BB%E5%88%97
//Minmax参数
const char *AIKey = "";//TTT的密钥在接口密钥里新建一个
String  apiUrl =    "https://api.minimax.chat/v1/text/chatcompletion_v2";    
String TTS_group_id ="";//账户信息里的groupID
String TTS_API_Key  =";//	TTS	同上最好再建一个密钥用同一个应该也可以
//const char *tts_url = "https://api.minimax.chat/v1/t2a_pro?GroupId="+TTS_group_id;

一些参数定义

HTTPClient http_client;
hw_timer_t *timer = NULL;
const int recordTimeSeconds = 3;//录音时间秒为单位
const int adc_data_len = 16000 * recordTimeSeconds;
const int data_json_len = adc_data_len * 2 * 1.4;
uint16_t *adc_data;
char *data_json;
String aduio_json;
uint8_t adc_start_flag = 0;//开始采集标志位
uint8_t adc_complete_flag = 0;//采集完成标志位
uint32_t num = 0;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
String payload;//STT返回值
String input ;
String answer, aduiourl;
int audio_time ; 
int audio_end = 0;

函数申明

//函数申明
String gainToken();
void IRAM_ATTR onTimer();
void sendToSTT();
void assembleJson(String token);
String getGPTAnswer(String inputText);
String decodejson(String payload_message);
String getvAnswer(String ouputText) ;
void writeHexToMP3(String hexString, const char* filePath);
//WIFI账户和密码
const char* ssid = "veryveryfast";
const char* password = "veryveryfast123";
//WIFI连接
void WiFi_Connect()
{
   
	WiFi.begin(ssid, password);
	while (WiFi.status() != WL_CONNECTED)
	{
    //这里是阻塞程序,直到连接成功
		delay(300);
		Serial.print(".");
	}

}

//初始化
void setup()
{
   
  Serial.begin(115200); // open the serial port at 115200 bps;
  Serial.println(ESP.getFreeHeap());
	delay(100);
	pinMode(ADC, ANALOG);//麦克风接口
  Serial.print("Connecting.. ");
	WiFi_Connect();
	Serial.println("WiFi connected");
	Serial.println("IP address: ");
	Serial.println(WiFi.localIP());
  delay(100);
  //上面是WiFi连接
  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);//接口定义
  audio.setVolume(21); // 默认0...21声音大小
  delay(1000);
  token = gainToken();//得到密钥

  timer = timerBegin(0, 80
### ESP32 连接 AI 大模型实现方式 #### 硬件准备 为了使ESP32能够连接至AI大模型并执行推理操作,硬件方面主要依赖于ESP32开发板本身。该开发板具备强大的处理能力和较低的成本,在物联网应用中表现出色[^1]。 #### 软件环境搭建 软件配置上推荐使用MicroPython作为编程语言,并配合Thonny IDE来编写和上传代码到ESP32设备。MicroPython是一种专门为微控制器设计的轻量化Python解释器,非常适合用于快速原型制作以及小型项目开发;而Thonny则提供了友好的界面和支持多种平台的良好兼容性[^2]。 #### API接口调用 对于具体的API接入过程,以星火为例,可以采用HTTP协议发起请求。相较于WebSocket而言,这种方式具有更简单的实现逻辑、更低的资源占用率以及较好的网络适应能力。当需要向服务器发送数据时,只需构建相应的URL地址并将参数附加其中即可完成一次完整的交互流程。 ```python import urequests def send_request(api_url, payload): headers = {'Content-Type': 'application/json'} response = urequests.post(api_url, json=payload, headers=headers) result = response.json() return result['response'] ``` 此段代码展示了如何利用`urequests`库来进行POST方法的数据提交动作,其中包括定义头部信息(headers)、指定目标网址(api_url)还有待传输的有效载荷(payload),最后解析返回的结果并提取有用部分。 #### 数据处理与展示 收到由云端传回的信息之后,可以根据实际需求对其进行进一步加工或直接显示出来供用户查看。比如将文字转换成语音播放给听众听,或是驱动其他外设做出反应等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值