Mind+图形化编程中行空板k10使用Deepseek
本帖最后由 云天 于 2025-2-24 08:48 编辑【制作背景】
扩展制作背景,在Mind+图形化编程中使用Http扩展无法连接Deepseek,并且Deepseek的API调用出现“当前服务器资源紧张,为避免对您造成业务影响,我们已暂停 API 服务充值。存量充值金额可继续调用,敬请谅解!”提示,我的免费额度已过期。所以通过第三方的硅基流动调用Deepseek,通过修改之前我编写的Kimi调用扩展,经过不断测试,完成Deepseek扩展。
【加载扩展】
在扩展中加载:https://gitee.com/yuntian365/Deepseek
【注册API】
通过第三方的硅基流动注册获取API,如方便注册,使用我的邀请码注册:https://cloud.siliconflow.cn/i/KwyEBX3e,邀请码:KwyEBX3e。共同获取免费额度。如果不方便注册,可使用我的API:sk-kxwsrzianqfxsebnihblrgyyytrrtgvvdjvdiujcuvwymrfp
【编程示例】
1.图形编程示例
2.Mind+自动生成代码
/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include <HTTPClient.h>
#include <DFRobot_Iot.h>
#include <ArduinoJson.h>
#include "unihiker_k10.h"
// 动态变量
volatile float mind_n_BiaoShi;
// 创建对象
DFRobot_Iot myIot;
HTTPClient http;
DynamicJsonBuffer jsonBuffer;
String model="deepseek-ai/DeepSeek-V3";
float temperature=0.0;
String deepseek_system;
int messageCount = 1;
int maxMessages = 10;
UNIHIKER_K10 k10;
ASR asr;
uint8_t screen_dir=2;
// 主程序开始
void setup() {
k10.begin();
http.begin("https://api.siliconflow.cn/v1/chat/completions");
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", "Bearer sk-kxwsrzianqfxsebnihblrgyyytrrtgvvdjvdiujcuvwymrfp");
deepseek_system ="你是deepseek,你更擅长中文对话。";
asr.asrInit(CONTINUOUS, CN_MODE, 60000);
while(asr._asrState == 0){delay(100);}
asr.setAsrSpeed(2);
k10.initScreen(screen_dir);
k10.creatCanvas();
Serial.begin(9600);
myIot.wifiConnect("***", "*********");
while (!myIot.wifiStatus()) {}
mind_n_BiaoShi = 0;
asr.addASRCommand(0+1, "jiang ge gu shi");
asr.addASRCommand(1+1, "cha xun tian qi");
asr.speak("初始化完成");
}
void loop() {
if (asr.isWakeUp()) {
if ((mind_n_BiaoShi==0)) {
mind_n_BiaoShi = 1;
asr.speak("我在");
}
}
else {
if ((mind_n_BiaoShi==1)) {
mind_n_BiaoShi = 0;
asr.speak("我先走了");
}
}
if (asr.isDetectCmdID(0+1)) {
asr.speak("好的");
maxMessages=5;
String mydata = String("{\"model\":\"")+model+String("\",\"max_tokens\":4090,\"temperature\":")+String(temperature)+String(",\"messages\":[");
mydata += String("{\"role\":\"system\",\"content\":\"")+String(deepseek_system)+String(",回答字数为150")+String("字\"},");
mydata += String("{\"role\":\"user\",\"content\":\"") + String("请讲个故事") + String("\"}");
mydata += String("]}");
http.POST(mydata);
String jsonString=http.getString();
while(jsonString==""){
http.POST(mydata);
jsonString=http.getString();
delay(100);
}
JsonObject& root = jsonBuffer.parseObject(jsonString);
String text = root["choices"]["message"]["content"];
Serial.println(text);
k10.canvas->canvasText(text, 0, 0, 0x0000FF, k10.canvas->eCNAndENFont24, 10, true);
k10.canvas->updateCanvas();
asr.speak(text);
}
if (asr.isDetectCmdID(1+1)) {
asr.speak("好的");
maxMessages=5;
String mydata = String("{\"model\":\"")+model+String("\",\"max_tokens\":4090,\"temperature\":")+String(temperature)+String(",\"messages\":[");
mydata += String("{\"role\":\"system\",\"content\":\"")+String(deepseek_system)+String(",回答字数为150")+String("字\"},");
mydata += String("{\"role\":\"user\",\"content\":\"") + String("请帮我查询一下今天的天气") + String("\"}");
mydata += String("]}");
http.POST(mydata);
String jsonString=http.getString();
while(jsonString==""){
http.POST(mydata);
jsonString=http.getString();
delay(100);
}
JsonObject& root = jsonBuffer.parseObject(jsonString);
String text = root["choices"]["message"]["content"];
Serial.println(text);
k10.canvas->canvasText(text, 0, 0, 0x0000FF, k10.canvas->eCNAndENFont24, 10, true);
k10.canvas->updateCanvas();
asr.speak(text);
}
}
【选择模型】
模型中使用了硅基流动中大部分Deepseek模式,但“deepseek-ai/DeepSeek-R1”模型没有测试通过,所以没有加到选项中。
【共同探讨】
因有时会出现,Post不成功情况,所以在扩展代码中增加了循环检测是否获取数据。
while(jsonString==""){
http.POST(mydata);
jsonString=http.getString();
delay(100);
}大家可共同探讨问题原因,及解决方法。
【测试演示】
为什么我显示模块和主板不对啊,我用的也是行空板嘛
需使用行空板K10 Mind+ V1.8.1
songzh 发表于 2025-2-25 16:55为什么我显示模块和主板不对啊,我用的也是行空板嘛
是行空板K10
Mind+版本是V1.8.1 RC1.0
请问,如果想实现语言回答是否可以实现,因为文字信息在课堂上展示并不生动,语言更有感染力。 有语音合成,示例程序中有
页:
[1]