云天 发表于 2024-12-30 13:40:23

行空板K10——图灵机器人

本帖最后由 云天 于 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;
      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;


      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设计一个简易背板,免费打印。




【演示视频】https://www.bilibili.com/video/BV1Fk6uYqEYX/?share_source=copy_web




一只想肥的猫 发表于 2024-12-30 16:55:36

说实话,确实很牛

hnyzcj 发表于 2024-12-30 18:10:34

说实话,确实很牛

rzegkly 发表于 2025-1-9 05:49:32

很牛,大模型对话新案例

qzs1982 发表于 2025-2-5 20:02:40

太牛了,如果可以开源就太好了

zuzu12138 发表于 2025-3-3 22:07:55

老师您好,请问这个http模块有分享文件吗?谢谢!

zuzu12138 发表于 2025-3-4 08:56:37

zuzu12138 发表于 2025-3-3 22:07
老师您好,请问这个http模块有分享文件吗?谢谢!

打扰了老师,我发现我没有更新新的公测版Mind+
页: [1]
查看完整版本: 行空板K10——图灵机器人