本帖最后由 云天 于 2024-12-30 13:45 编辑
【项目背景】
本项目旨在利用行空板K10与图灵机器人进行交互,通过行空板的语音识别功能将用户的语音问题转换成文本,随后将这些文本发送至图灵机器人。图灵机器人处理后,行空板再将返回的文本通过语音合成技术转换成语音输出,实现人机交互。 【项目目标】 该项目的目标是创建一个基于行空板K10的交互系统,该系统能够理解用户的语音指令,通过图灵机器人获取信息,并将这些信息以语音的形式反馈给用户。这不仅增强了行空板的功能性,也为用户带来了更加便捷的交互体验。 【项目实现】 为了实现上述目标,项目中将使用行空板K10的语音识别和语音合成功能。首先,用户的语音指令将被转换成文本形式,然后这些文本通过行空板K10发送至图灵机器人的API。图灵机器人将处理这些文本并返回相应的答案,行空板K10再将这些答案转换成语音,完成整个交互过程。 通过这种方式,行空板K10不仅能够执行简单的语音识别和语音合成任务,还能够与外部智能服务进行交互,扩展了其应用范围,并为用户带来了更加丰富的互动体验。 【连接图灵】
Arduino C代码:
-
- /*!
- * MindPlus
- * esp32s3bit
- *
- */
- #include <DFRobot_Iot.h>
- #include <DFRobot_HTTPClient.h>
-
- // 动态变量
- String mind_s_JieGuoWenBen;
- // 创建对象
- DFRobot_Iot myIot;
- String requestBody = R"({"reqType":0,"perception": {"inputText": {"text": "你好,你是谁?"}},"userInfo": {"apiKey": "*************","userId": "yuntian365"} })";
- DFRobot_HTTPClient http;
-
-
- // 主程序开始
- void setup() {
- http.init();
- myIot.wifiConnect("********", "***********");
- while (!myIot.wifiStatus()) {}
- Serial.begin(9600);
- Serial.println(myIot.getWiFiLocalIP());
- http.addHeader("Content-Type", "application/json");
- http.addString((requestBody));
- http.POST("http://openapi.turingapi.com/openapi/api/v2", 10000);
- mind_s_JieGuoWenBen = http.getString();
- delay(10000);
- Serial.println(mind_s_JieGuoWenBen);
- }
- void loop() {
-
- }
-
复制代码
"apiKey"通过登陆图灵机器人官网注册机器人获取。
运行程序后,得到反馈结果。
{"emotion":{"robotEmotion":{"a":0,"d":0,"emotionId":0,"p":0},"userEmotion":{"a":0,"d":0,"emotionId":0,"p":0}},"intent":{"appKey":"platform.chat","code":0,"operateState":1100},"results":[{"groupType":0,"resultType":"text","values":{"text":"我叫图灵机器人,不要被我的名字所迷倒哦!"}}]}
【分析结果数据】
-
- /*!
- * MindPlus
- * esp32s3bit
- *
- */
- #include <ArduinoJson.h>
- // 创建对象
- DynamicJsonBuffer jsonBuffer;
- String jsonString=R"({"emotion":{"robotEmotion":{"a":0,"d":0,"emotionId":0,"p":0},"userEmotion":{"a":0,"d":0,"emotionId":0,"p":0}},"intent":{"appKey":"platform.chat","code":0,"operateState":1100},"results":[{"groupType":0,"resultType":"text","values":{"text":"我叫图灵机器人,不要被我的名字所迷倒哦!"}}]})";
-
-
- // 主程序开始
- void setup() {
- JsonObject& root = jsonBuffer.parseObject(jsonString);
- String text = root[String("results")][0][String("values")][String("text")];
- Serial.begin(9600);
- delay(10000);
- Serial.println((text));
- }
- void loop() {
-
- }
-
复制代码
【文本显示朗读】
【语音识别】
【完整代码】
-
- #include <DFRobot_Iot.h>
- #include <ArduinoJson.h>
- #include <DFRobot_HTTPClient.h>
- #include "asr.h"
- #include "unihiker_k10.h"
-
- // 创建对象
- UNIHIKER_K10 k10;
- uint8_t screen_dir=2;
- ASR asr;
- // 动态变量
- String mind_s_WenTiWenBen;
- // 创建对象
- DFRobot_Iot myIot;
- DFRobot_HTTPClient http;
-
- // 主程序开始
- void setup() {
- k10.begin();
- k10.initScreen(screen_dir);
- k10.creatCanvas();
- asr.setAsrSpeed(2);
- asr.asrInit(CONTINUOUS, CN_MODE, 6000);
- while(asr._asrState == 0){delay(100);}
- asr.addASRCommand(0+1, "ni shi shui");
- asr.addASRCommand(1+1, "ni hao");
- asr.addASRCommand(2+1, "gu shi");
- asr.addASRCommand(3+1, "ji qi ren");
-
-
- myIot.wifiConnect("sxs", "smj080823");
- while (!myIot.wifiStatus()) {}
-
- Serial.begin(9600);
- Serial.println(myIot.getWiFiLocalIP());
-
-
- }
- void tuling(String question){
- http.init();
- // 设置请求头
- http.addHeader("Content-Type", "application/json");
-
- // 构建请求体
- String requestBody = R"({"reqType":0,"perception": {"inputText": {"text": ")" + question + R"("}},"userInfo": {"apiKey": "1f2c5095615446a1ac5bce1bfda33368","userId": "yuntian365"} })";
- Serial.println(requestBody);
-
- http.addString(requestBody);
- // 发送HTTP POST请求
- http.POST("http://openapi.turingapi.com/openapi/api/v2",10000);
-
- // 获取响应
- String jsonString = http.getString();
- DynamicJsonBuffer jsonBuffer;
- JsonObject& root = jsonBuffer.parseObject(jsonString);
- String text = root[String("results")][0][String("values")][String("text")];
-
-
- Serial.println(jsonString);
- k10.canvas->canvasText(text, 10, 10, 0x0000FF, k10.canvas->eCNAndENFont24, 9, true);
- k10.canvas->updateCanvas();
- asr.speak(text);
-
- }
- void loop() {
- if (asr.isDetectCmdID(0+1)) {
- mind_s_WenTiWenBen = "你是谁?";
- tuling(mind_s_WenTiWenBen);
- }
- if (asr.isDetectCmdID(1+1)) {
- mind_s_WenTiWenBen = "你好";
- tuling(mind_s_WenTiWenBen);
- }
- if (asr.isDetectCmdID(2+1)) {
- mind_s_WenTiWenBen = "讲个故事";
- tuling(mind_s_WenTiWenBen);
- }
- if (asr.isDetectCmdID(3+1)) {
- mind_s_WenTiWenBen = "你是机器人吗?";
- tuling(mind_s_WenTiWenBen);
- }
-
- }
-
复制代码
【行空板K10背板】
为保护行空板k10背面电子元器件,通过嘉立创EDA设计一个简易背板,免费打印。
【演示视频】
|