当前位置: 首页 > wzjs >正文

山东省住房和城乡建设厅服务网站婚庆公司套餐价目表

山东省住房和城乡建设厅服务网站,婚庆公司套餐价目表,网站建设需求分析写什么,公司网站主页打不开前言 效果展示 效果展示录制 一、开发环境介绍 1、arduino开发平台; 2、所需设备:Esp32s3、inmp441、max98357、按键,杜邦线(接线); 3、大模型:百度的文心一言大模型; 4、语音识别(STT)和语音合成(TTS)&am…

前言

效果展示

效果展示录制

一、开发环境介绍

        1、arduino开发平台;

        2、所需设备:Esp32s3、inmp441、max98357、按键,杜邦线(接线);

        3、大模型:百度的文心一言大模型;

        4、语音识别(STT)和语音合成(TTS):使用百度语音识别和语音合成;

        5、使用语言:C/C++;

二、拓扑图

三、设备购买链接


        1、esp32s3:

        2、inmp441:

        3、max98357:

        4、按键:

        5、扬声器:

        6、杜邦线:

四、接线

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、接线

Esp32S3INMP441
GPIO 4引脚WS
GPIO 5引脚SCK       
GPIO 6引脚SD
GND引脚L/R和GND
3.3V引脚VDD

2、MAX98357与Esp32S3接线

        1、max98357介绍

         这是一个采用标准的I2S作为数字音频输入,内置解码器,可将数字音频信号解码为模拟信号,并拥有内置放大器,可以直接驱动扬声器的D类放大器。因其工作效率高,可以以2.7V~5.5V的直流电压运行,因此非常适合便携式及电池供电的音频播放项目

        2、max98357接口定义

                VIN:电源正(2.5V-5.5V)。
                GND:电源地。
                SD:关机和频道选择。SD MODE拉低以将器件处于关断状态。
                GAIN:增益和频道选择。在TDM模式下,增益固定为12dB。
                DIN:数字信号输入。
                BCLK:位时钟输入。
                LRC:I2S与LJ模式的左/右时钟。同步时钟用于TDM模式。

        3、实物图

        1.4、接线

Esp32S3MAX98357
GPIO 16引脚DIN
GPIO 17引脚BCLK   
GPIO 18引脚LRC
GND引脚GND
3.3V引脚VIN

3、按键与Esp32S3接线

        1、按键介绍

        按键按下输出高电平,松开输出低电平,输出电平电压等于电源电压。

        2、接口定义

        -:电源负极。

        中间:电源正极。

        S:按键信号输出。

        3、实物图

        4、接线

                

Esp32S3INMP441
GND-(左侧)
3.3v引脚中间
GPIO 13引脚S(右侧)

4、扬声器与MAX98357接线

这个接线比较简单,自己看着接就行。

5、源码-模块话开发

1、INMP441与MAX98357初始化接口

在my_inmp441_max98357.h文件中,实现初始化inmp441与max98357的接口。

#include <Arduino.h>
#include <driver/i2s.h>
#include <hal/i2s_types.h>#define INMP441_WS 4
#define INMP441_SCK 5
#define INMP441_SD 6#define MAX98357_LRC 18
#define MAX98357_BCLK 17
#define MAX98357_DIN 16#define SAMPLE_RATE 16000i2s_config_t inmp441_i2s_config = {.mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX),.sample_rate = SAMPLE_RATE,.bits_per_sample = i2s_bits_per_sample_t(16),.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,.communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S),.intr_alloc_flags = ESP_INTR_FLAG_EDGE,.dma_buf_count = 8,   // buffer 的数量.dma_buf_len = 128    // buffer的大小,单位是i2s_bits_per_sample_t 采样位数,越小播放需要越及时时延越小,否则相反
};const i2s_pin_config_t inmp441_gpio_config = {.bck_io_num = INMP441_SCK,.ws_io_num = INMP441_WS,.data_out_num = -1,.data_in_num = INMP441_SD
};i2s_config_t max98357_i2s_config = {.mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_TX),.sample_rate = SAMPLE_RATE,.bits_per_sample = i2s_bits_per_sample_t(16),.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,.communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_STAND_MSB),.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,.dma_buf_count = 8,.dma_buf_len = 128
};const i2s_pin_config_t max98357_gpio_config = {.bck_io_num = MAX98357_BCLK,.ws_io_num = MAX98357_LRC,.data_out_num = MAX98357_DIN,.data_in_num = -1
};void inmp441_max98357_setup()
{i2s_driver_install(I2S_NUM_0, &inmp441_i2s_config, 0, NULL);i2s_set_pin(I2S_NUM_0, &inmp441_gpio_config);i2s_driver_install(I2S_NUM_1, &max98357_i2s_config, 0, NULL);i2s_set_pin(I2S_NUM_1, &max98357_gpio_config);
}void inmp441_max98357_loop()
{uint16_t data[1024];esp_err_t result;size_t bytes_read = 0;result = i2s_read(I2S_NUM_0, &data, sizeof(data), &bytes_read, portMAX_DELAY);//Serial.println(bytes_read);size_t bytes_write;result = i2s_write(I2S_NUM_1, &data, sizeof(data), &bytes_write, portMAX_DELAY);}

2、STT(语音转文字接口)

在my_stt.h文件中通过百度语音识别API接口实现语音转文字功能。

#include <Arduino.h>
#include <driver/i2s.h>
#include "base64.h"
#include "HTTPClient.h"
#include "cJSON.h"
#include <ArduinoJson.h>// 1、修改百度语言技术的用户信息:https://console.bce.baidu.com/ai/?fromai=1#/ai/speech/app/list
const int STT_DEV_PID = 1537; //选填,输入法模型 1737-英语 1537-普通话(近场识别模型) 1936-普通话远程识别 1837-四川话 
const char *STT_CUID = "CoPY70iMA458XXX4PVLWmlLCruuYQd6G"; //用户唯一标识,用来区分用户,计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码,长度为60字符以内。
const char *STT_CLIENT_ID = "sOKyRkOGpcTYCNvGcd2F1i"; //API Key
const char *STT_CLIENT_SECRET = "CoPY70iMAXXXo2r4PVLWmlLCruuYQd6G"; //Secret KeyString stt_token;const int adc_data_len = 1024*16*2;
const int data_json_len = adc_data_len * 2 * 1.4;
uint16_t adc_data[adc_data_len];
char data_json[data_json_len];String stt_gainToken() {HTTPClient stt_http;String token;String url = String("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=") + STT_CLIENT_ID + "&client_secret=" + STT_CLIENT_SECRET;stt_http.begin(url);int httpCode = stt_http.GET();if (httpCode > 0) {String payload = stt_http.getString();DynamicJsonDocument doc(1024);deserializeJson(doc, payload);token = doc["access_token"].as<String>();Serial.println("stt:" + token);} else {Serial.println("Error on HTTP request for token");}stt_http.end();return token;
}void stt_assembleJson() {memset(data_json, '\0', data_json_len * sizeof(char));strcat(data_json, "{");strcat(data_json, "\"format\":\"pcm\",");strcat(data_json, "\"rate\":16000,");strcat(data_json, "\"dev_pid\":1537,");strcat(data_json, "\"channel\":1,");strcat(data_json, "\"cuid\":\""); strcat(data_json, STT_CUID); strcat(data_json, "\",");strcat(data_json, "\"token\":\""); strcat(data_json, stt_token.c_str()); strcat(data_json, "\",");sprintf(data_json + strlen(data_json), "\"len\":%d,", adc_data_len * 2);strcat(data_json, "\"speech\":\"");strcat(data_json, base64::encode((uint8_t *)adc_data, adc_data_len * sizeof(uint16_t)).c_str());//int tmp = base64::decode((char *)adc_data, adc_data_len, data_json);strcat(data_json, "\"");strcat(data_json, "}");//Serial.println(data_json);
}String getTextFromRespomse(String response)
{// Parse JSON responseDynamicJsonDocument jsonDoc(1024);deserializeJson(jsonDoc, response);String outputText = jsonDoc["result"];int len = strlen(outputText.c_str());String output = outputText.substring(2, len-2);Serial.println(output);return output;
}String sendToSTT() {stt_assembleJson();HTTPClient http_client_stt;http_client_stt.begin("http://vop.baidu.com/server_api");//短语音识别请求地址: 标准版http://vop.baidu.com/server_api, 极速版https://vop.baidu.com/pro_apihttp_client_stt.addHeader("Content-Type", "application/json");int httpCode = http_client_stt.POST(data_json);if (httpCode > 0) {if (httpCode == HTTP_CODE_OK) {String response = http_client_stt.getString();Serial.println(response);String outputText = getTextFromRespomse(response);      http_client_stt.end();return outputText;}} else {Serial.printf("[HTTP] POST failed, error: %s\n", http_client_stt.errorToString(httpCode).c_str());http_client_stt.end();return String("响应失败请重新获取!");}
}void stt_setup()
{stt_token = stt_gainToken();//Serial.println(stt_token.c_str());
}

3、通过API接口访问文心一言大模型

在my_ErnieBot.h文件中实现访问文心一言大模型API接口获取响应结果。

#include <HTTPClient.h>
#include <ArduinoJson.h>// Replace with your OpenAI API key
const char* ERNIE_BOT_CLIENT_ID = "vCe0kXozsI5LC8BJNJsQ9";//API Key
const char* ERNIE_BOT_CLIENT_SECRET = "3iTfnHRaoP0Uiml00ACw6TPFsHbFt5";//Secret KeyString ErnieBot_accessToken;String ErnieBotGainToken() {HTTPClient http;String token;String url = String("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=") + ERNIE_BOT_CLIENT_ID + "&client_secret=" + ERNIE_BOT_CLIENT_SECRET;http.begin(url);int httpCode = http.GET();if (httpCode > 0) {String payload = http.getString();DynamicJsonDocument doc(1024);deserializeJson(doc, payload);token = doc["access_token"].as<String>();Serial.println("ErnieBot:" +  token);} else {Serial.println("Error on HTTP request for token");}http.end();return token;
}String getErnieBotAnswer(String inputText) {//Serial.println(inputText.c_str());HTTPClient http;http.setTimeout(1000000);String apiUrl = String("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=") + ErnieBot_accessToken.c_str();http.begin(apiUrl);http.addHeader("Content-Type", "application/json");String payload = "{\"messages\":[{\"role\": \"user\",\"content\": \"" + inputText + "两百字以内。" + "\"}],\"disable_search\": false,\"enable_citation\": false}";Serial.println(payload.c_str());int httpResponseCode = http.POST(payload);if (httpResponseCode == 200) {String response = http.getString();http.end();Serial.println(response);// Parse JSON responseDynamicJsonDocument jsonDoc(1024);deserializeJson(jsonDoc, response);String outputText = jsonDoc["result"];return outputText;} else {http.end();Serial.printf("Error %i \n", httpResponseCode);return "<error>";}
}void ErnieBot_setup() {ErnieBot_accessToken = ErnieBotGainToken();//Serial.println(ErnieBot_accessToken.c_str());String answer = getErnieBotAnswer("你好,文心一言");Serial.println("<Test Answer: " + answer);
}

4、TTS(文字转语音接口)

在my_tts.h文件中通过百度语音识别API接口实现文字转语音功能。

#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <base64.h>
#include "cJSON.h"// 1、修改百度语言技术的用户信息:https://console.bce.baidu.com/ai/?fromai=1#/ai/speech/app/list
const char *TTS_CUID = "CoPY70iMA458o2r4xxxmlLCruuYQd6G"; //用户唯一标识,用来区分用户,计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码,长度为60字符以内。
const char *TTS_CLIENT_ID = "sOKyRkOGpc74TYxxvGcd2F1i"; //API Key
const char *TTS_CLIENT_SECRET = "CoPY70iMA45xx2r4PVLWmlLCruuYQd6G"; //Secret KeyString tts_token;String tts_gainToken() {HTTPClient http;String token;String url = String("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=") + TTS_CLIENT_ID + "&client_secret=" + TTS_CLIENT_SECRET;http.begin(url);int httpCode = http.GET();if (httpCode > 0) {String payload = http.getString();DynamicJsonDocument doc(1024);deserializeJson(doc, payload);token = doc["access_token"].as<String>();Serial.println("tts:" + token);} else {Serial.println("Error on HTTP request for token");}http.end();return token;
}// 百度语音合成的API URL  
const char* tts_url = "https://tsn.baidu.com/text2audio"; //https://tsn.baidu.com/text2audioString sendToTTS(String InputText, int *len) {InputText = urlEncode(InputText);//tex字段2次urlencodeInputText = urlEncode(InputText);//百度为了更好地兼容,支持1次及2次urlencode, 其中2次urlencode可以覆盖全部的特殊字符。因而推荐传递tex 参数时做2次urlencode编码。HTTPClient http;  http.begin(tts_url); // 初始化HTTP请求  http.addHeader("Content-Type", "application/x-www-form-urlencoded"); // 根据API要求添加HTTP头  application/x-www-form-urlencodedString payload = String("tex=")+InputText.c_str()+String("&tok=")+tts_token.c_str()+String("&cuid=")+TTS_CUID+String("&ctp=1&lan=zh&spd=5&pit=5&vol=1&per=5&aue=4");  Serial.println(payload);  String outputText;int httpCode = http.POST(payload); // 发送POST请求  if (httpCode == HTTP_CODE_OK) {  String response = http.getString(); // 获取响应体  //Serial.println(response);  *len = http.getSize();Serial.println(*len);http.end(); // 结束HTTP请求  return response;} else {  Serial.println("Error in the HTTP request");outputText = String("Error in the HTTP request");}  http.end(); // 结束HTTP请求  return outputText;
}void tts_setup()
{tts_token = tts_gainToken();//Serial.println(tts_token.c_str());
}

5、WiFi模块

在my_wifi.h文件中初始化wifi功能。

#include <WiFi.h>void wifi_setup() {WiFi.disconnect(true);// 3、填写您的wifi账号密码WiFi.begin("name", "password");  while (WiFi.status() != WL_CONNECTED) {Serial.print(".");vTaskDelay(200);}Serial.println("\n-- wifi connect success! --");
}

6、效果展示

整体流程已经基本调通,效果展示在帖子最前面。

各模块源码无保留在第五章节,loop()函数各位老铁自己调用模块接口实现。

从无到有实现目前的效果,有参考其他大佬的帖子,也有自己摸索实现的部分,知识劳动成果,实属不易。

如果需要技术支持,欢迎骚扰(+v:Sw-striving)!


文章转载自:

http://kM56fwRM.bywgy.cn
http://BBgRzc7Z.bywgy.cn
http://nuPQaFeD.bywgy.cn
http://KSIg8h4I.bywgy.cn
http://EJT8XhU5.bywgy.cn
http://3GyeLPSG.bywgy.cn
http://xKizMhnn.bywgy.cn
http://EdLid5uy.bywgy.cn
http://EEyMwmvV.bywgy.cn
http://UI1KN092.bywgy.cn
http://51b6djHb.bywgy.cn
http://Hl6XiG4N.bywgy.cn
http://E8DYVJEu.bywgy.cn
http://K52yatAy.bywgy.cn
http://39MZsKr8.bywgy.cn
http://bH2r3IpV.bywgy.cn
http://lheveE6A.bywgy.cn
http://wdFpLFCu.bywgy.cn
http://OZgGBq2X.bywgy.cn
http://D9VzbRvf.bywgy.cn
http://ORA6VEZF.bywgy.cn
http://2VZtO0i6.bywgy.cn
http://lzukZBu9.bywgy.cn
http://1fvRDhZY.bywgy.cn
http://7wswTSf0.bywgy.cn
http://GLZuedoD.bywgy.cn
http://a3v9uHGi.bywgy.cn
http://4INRtE1d.bywgy.cn
http://3tisEKa9.bywgy.cn
http://j9akMPrW.bywgy.cn
http://www.dtcms.com/wzjs/767277.html

相关文章:

  • 法律服务网站建设优惠券 wordpress
  • 网站建设需要哪些费用游戏网站首页设计
  • 公司网站 免费模板杭州专业网站
  • 如何在电子表格上做网站的连接漫画网站建设
  • 微信分销网站建设价格邢台贴吧
  • 网站对企业的作用企业网站推广的线上渠道
  • 如何做网站?WordPress签到打卡
  • 网站模板使用手机版网站seo怎么做
  • seo网站的优化方案二级建造师证书查询官方网站
  • 免费自助网站建站做网站的 简历
  • 建外贸企业网站可以做企业网站
  • 河北集团网站建设wordpress后台汉化
  • 网站内页设置多少个关键字最好asp网站怎么改成中英双语
  • 聊城市东昌府区建设局网站福田祥菱怎么样
  • 行政还要负责网站建设新媒体吗旅行网站的建设目录
  • 正规网站优化推广兴化网站网站建设
  • 四川省住房建设厅官方网站济南专业seo推广公司
  • 自己做热图的网站专题网站建设工作
  • 宁波电子商务网站建设石家庄网络公司招聘
  • 泰安东平县建设局网站传媒公司排行榜
  • 建立网站的数据表宿迁网站建设流程
  • 大兴区企业网站建设怎么快速刷排名
  • 一元夺宝网站建设费用开发网站的意义
  • 无忧网站后台制作网站流程
  • 青原区城乡建设局门户网站开发公司楼盘项目管理费合同
  • 石家庄网站建设公司怎么样想要黑掉一个网站 要怎么做
  • 音乐网站怎么建设网站怎么做下载内容
  • 网站建立的关键技术公司做一个网站内容如何设计方案
  • 外海网站如何做网站的推广做网站保证效果
  • 建立网站的目录结构时最好的做法是手机做app的软件叫什么