一、项目前言
从2023年12月ChatGPT发布以来,大语言模型已然成为当下技术顶流。而随着国内自研开源的大语言模型deepseek在2025年开年立于世界巅峰之列的态势发展,以及国家人工智能政策的加成,大语言模型点燃了中国人的热情。在这样的背景下,智能设备必然经历更大的革命。本项目旨在利用行空板 K10 开发一个多模态交互的的智能助手,实现通过语音、视频、图像等指令,利用大语言模型的思考和联网能力,控制各类设备和自动智能判断决策,提升生活和工作的便利性,同时也为探索物联网与多模态交互技术的融合应用提供实践案例,符合义务教育信息科技课程中对物联网实践与探索的教学要求。
二、项目来源
依据《义务教育信息科技课程标准(2022年版)》中“物联网实践与探索”“过程与控制”模块的要求,需设计真实场景下的数字化解决方案。
行空板K10作为集成AI与物联网功能的开源硬件,为教学项目提供技术基础。

三、项目功能
为了实现项目的多层次性,本文作为PoE(Proof of Execution)主要从语音识别和大语言模型交互的功能入手,先行探究功能实现的可能性。
实现以下功能:
语音交互:通过中文语音指令控制灯光等设备。

大模型接入:通过HTTP API的方式接入deepseek大语言模型。
二次处理和反馈:通过提示词二次处理交互信息,并通过屏幕显示和语音播报呈现
所需硬件:行空板K10(自带LED灯)
所需软件:WiFi网络、deepseek API KEY、JSON处理扩展

四、系统设计
功能 | 功能描述 | 技术实现 |
智能语音 | 解析中文语音指令、生成语音信息 | 板载人工智能,语音识别、合成 |
环境监测 |
实时显示温度、湿度、光照数据 | 板载温度,湿度,光线传感器 |
设备控制 | 通过GPIO控制灯光 | 信号口输出控制 |
大语言模型 | 语音交互、反馈 | GPT技术、联网搜索、深度思考 |
五、实现过程
1.关于deepseek
基于deepseek的成功,据有关媒体报道,微软、英伟达、亚马逊等全球领先的云计算平台也宣布接入deepseek,标志着中国AI技术首次大规模反向输出。但常常造成了以下情况:

我们可以通过第三方的 硅基流动 服务完成满血版使用:
首先,注册并登录硅基流动官网。现在硅基流动有活动,用我的邀请链接注册 (https://cloud.siliconflow.cn/i/NxHF7Q41),咱俩都能白嫖14块钱额度,高频使用2周到1个月没问题(真不是广告)。
登录后直接进入【模型广场】,别管排在首位的模型,看向最左边导航栏,找到【API密钥】点进去。

2. 关于json用户库:
参考:
【行空板K10】获得当前所在城市及JSON库的移植
https://mc.dfrobot.com.cn/thread-323610-1-1.html?fromuid=805438
(出处: DF创客社区 - 分享创造的喜悦)
六、相关代码



七、相关问题说明:
1.因为使用的是deepseek的联网搜索功能,所以返回的api信息是比较,复杂的。为了减少代码处理的难度。我这里使用了二次接口,进行数据清洗。


可以看到,返回的信息是能满足要求的。
2.这里还有一个问题:
因为大语言模型返回的内容中是json格式嵌套数组的。图形化用户库,没有这个功能。所以这里需要用到纯代码编写:

测试代码:
/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include <DFString.h>
#include <ArduinoJson.h>
#include "unihiker_k10.h"
// 动态变量
String mind_s_WangLuoFanHui;
// 函数声明
void DF_HuoQuWangLuoXinXi();
// 创建对象
// DynamicJsonBuffer jsonBuffer;
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
ASR asr;
// 主程序开始
void setup() {
k10.begin();
k10.initScreen(screen_dir);
k10.creatCanvas();
asr.asrInit(CONTINUOUS, CN_MODE, 6000);
while(asr._asrState == 0){delay(100);}
k10.canvas->canvasClear();
k10.canvas->canvasText("行空板K10", 1, 0x0000FF);
k10.canvas->updateCanvas();
asr.addASRCommand(0+1, "kai deng");
asr.addASRCommand(1+1, "guan deng");
asr.addASRCommand(2+1, "tian qi");
DF_HuoQuWangLuoXinXi();
}
void loop() {
delay(100);
if (asr.isWakeUp()) {
k10.canvas->canvasText("进入语音识别状态,请说出控制命令词...", 5, 40, 0x0000FF, k10.canvas->eCNAndENFont16, 50, true);
k10.canvas->updateCanvas();
}
else {
k10.canvas->canvasText("进入休眠状态,请说唤醒词“你好 小新”...", 5, 40, 0x0000FF, k10.canvas->eCNAndENFont16, 50, true);
k10.canvas->updateCanvas();
}
if (asr.isDetectCmdID(0+1)) {
k10.rgb->write(0, 0xFF0000);
k10.rgb->write(1, 0x33CC00);
k10.rgb->write(2, 0x0000FF);
}
if (asr.isDetectCmdID(1+1)) {
k10.rgb->write(-1, 0x000000);
}
// 大语言模型天气
if (asr.isDetectCmdID(2+1)) {
DF_HuoQuWangLuoXinXi();
}
}
// 自定义函数
void DF_HuoQuWangLuoXinXi() {
mind_s_WangLuoFanHui = "{ \"id\": \"97efaa39-07f1-4112-b230-26bafb78bc45@2\", \"model\": \"deepseek\", \"object\": \"chat.completion\", \"choices\": [ { \"index\": 0, \"message\": { \"role\": \"assistant\", \"content\": \"2025年2月12日,农历正月十五,元宵节。北京白天晴间多云,北风3-4级,阵风可达7级,最高气温6℃。夜间晴,北风1-2级,最低气温-4℃。白天风寒效应显著,外出需防风防寒;夜间风力减弱,适合赏灯赏月,但气温较低,建议保暖。\", \"reasoning_content\": \"\" }, \"finish_reason\": \"stop\" } ], \"usage\": { \"prompt_tokens\": 1, \"completion_tokens\": 1, \"total_tokens\": 2 }, \"created\": 1739337432 }";
DynamicJsonDocument jsonBuffer(1024);
DeserializationError error = deserializeJson(jsonBuffer, mind_s_WangLuoFanHui);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
// 获取choices数组
JsonArray choices = jsonBuffer["choices"];
JsonObject choice = choices[0];
int index = choice["index"];
const char* role = choice["message"]["role"];
const char* content = choice["message"]["content"];
const char* finish_reason = choice["finish_reason"];
String mind_s_WangLuoFanHui = String(content);
k10.canvas->canvasText(mind_s_WangLuoFanHui, 5, 40, 0x0000FF, k10.canvas->eCNAndENFont16, 19, true);
k10.canvas->updateCanvas();
delay(5000);
}
效果图:
隐藏彩蛋:
测试过程中,发现语音唤醒词使用:hi,esp也是可以的。
评论