2025-3-31 22:04:11 只看该作者
132浏览
查看: 132|回复: 2
打印 上一主题 下一主题

[项目] ESP32-S3 AI智能摄像头模块Mind+图形化编程实践

[复制链接]

ESP32-S3 AI智能摄像头模块Mind+图形化编程实践图1

【项目背景】
最近,DF创客社区公布了ESP32-S3 AI智能摄像头模块的试用名单,这次的名额比之前发布的申请名额多了很多(我记得只有8个),真是令人振奋!我之前就提前入手了一块ESP32-S3 AI智能摄像头模块,仔细研究了“产品维库”文档后,发现它的功能非常丰富。于是,我立刻按照教程用Arduino IDE编写了一个项目,并撰写了相关文章。然而,对于学生来说,直接用代码编写程序可能会有一些难度。因此,我尝试使用Mind+图形化编程来为ESP32-S3 AI智能摄像头模块编写程序。虽然我的能力有限,目前只实现了部分功能,但我已经将这些内容发布到Gitee上,供大家参考和共同研究,希望我们一起努力,丰富和完善它的功能。
【项目设计】
在最新版本的Mind+软件中,上传模式下可以加载主控行空板K10。行空板K10和ESP32-S3 AI智能摄像头模块都搭载了ESP32-S3芯片。基于这一点,我开始思考是否可以将ESP32-S3 AI智能摄像头模块作为扩展模块来使用。于是,我着手进行了一系列的尝试和开发。
【实现功能】
目前,我已经成功实现了以下功能:
连接WiFi热点:设备可以连接到指定的WiFi网络,实现网络通信功能。
点亮板载LED灯:通过控制GPIO引脚,点亮板载的LED灯,用于指示程序运行状态或作为交互反馈。
检测按键Boot是否按下:程序可以检测Boot按键的状态,当按键被按下时触发相应的操作。
存储文本到SD卡文件:可以将文本内容写入到SD卡的指定文件中,方便数据存储和记录。
读取SD卡文件文本内容:能够从SD卡文件中读取存储的文本内容,用于后续处理或显示。
与Kimi模型进行对话:通过调用Kimi模型的API接口,实现与AI模型的对话功能,获取智能回复。
【项目展望】
虽然目前只实现了部分功能,但我相信这只是开始。未来,我将继续探索更多功能的实现,例如图像识别、音频流视频流传输等,充分发挥ESP32-S3 AI智能摄像头模块的潜力。同时,我也希望更多的人能够加入到这个项目中来,共同研究和开发,让这个项目变得更加完善和强大。

【扩展加载】
ESP32-S3 AI智能摄像头模块用户库:https://gitee.com/yuntian365/ESP32-S3-AI,进行扩展加载。
ESP32-S3 AI智能摄像头模块Mind+图形化编程实践图2

ESP32-S3 Kimi用户库:https://gitee.com/yuntian365/esp32-s3_-kimi,进行扩展加载。
ESP32-S3 AI智能摄像头模块Mind+图形化编程实践图3

【程序示例】
图形程序
ESP32-S3 AI智能摄像头模块Mind+图形化编程实践图4

这段程序是一个基于ESP32-S3开发板的应用程序,主要功能是通过WiFi连接到网络,调用一个指定Kimi的API(https://api.moonshot.cn/v1/chat/completions)进行聊天交互,并将聊天结果存储到SD卡中,同时通过串口输出结果。
程序代码:
  1. /*!
  2. * MindPlus
  3. * esp32s3bit
  4. *
  5. */
  6. int led = 3;
  7. #include <WiFi.h>
  8. #include <HTTPClient.h>
  9. #include <ArduinoJson.h>
  10. #include <SPI.h>
  11. #include "FS.h"
  12. #include <SD_MMC_yuntian.h>
  13. const uint8_t SD_CMD = 11;
  14. const uint8_t SD_CLK = 12;
  15. const uint8_t SD_DATA0 = 13;
  16. void writeFile(fs::FS &fs, const char * path, const char * message){
  17.     File file = fs.open(path, FILE_WRITE);
  18.     if(!file){
  19.        return;
  20.     }
  21.     file.print(message);
  22. }
  23. String readFile(fs::FS &fs, const char * path){
  24.     String temp="";
  25.     String text="";
  26.     File file = fs.open(path);
  27.     if(!file){
  28.         return "";
  29.     }
  30.     while(file.available()){
  31.         temp=(char)file.read();
  32.         text=text+ temp;
  33.       }
  34.     return text;
  35. }
  36. // 动态变量
  37. String mind_s_FanHuiJieGuo;
  38. // 创建对象
  39. HTTPClient        http;
  40. DynamicJsonBuffer jsonBuffer;
  41. String            model="moonshot-v1-8k";
  42. float             temperature=0.3;
  43. String            chatmessages[10];
  44. int               messageCount = 1;
  45. int               maxMessages = 10;
  46. // 主程序开始
  47. void setup() {
  48.         pinMode(led,OUTPUT);
  49.         SD_MMC.setPins(SD_CLK, SD_CMD, SD_DATA0);
  50.   SD_MMC.begin("/sdcard", true);
  51.         const char *ssid = "sxs";
  52.         const char *password = "*****";
  53.         WiFi.begin(ssid, password);
  54.         http.begin("https://api.moonshot.cn/v1/chat/completions");
  55.         http.addHeader("Content-Type", "application/json");
  56.         http.addHeader("Authorization", "Bearer *****");
  57.         chatmessages[0] = R"({"role":"system","content":"你是Kimi,你更擅长中文对话。"})";
  58.         pinMode(0, INPUT);
  59.         digitalWrite(led,HIGH);
  60.         Serial.begin(115200);
  61.         while (!(WiFi.status() == WL_CONNECTED)) {}
  62.         digitalWrite(led,LOW);
  63. }
  64. void loop() {
  65.         if (!digitalRead(0)) {
  66.                 digitalWrite(led,HIGH);
  67.                 maxMessages=5;
  68.                 String mydata = String(R"({"model":")")+model+String(R"(","temperature":)")+String(temperature)+String(R"(,"messages":[)");
  69.                 for (int i = 0; i < messageCount; i++) {
  70.                         mydata += chatmessages[i];
  71.                         if (i < messageCount ) {
  72.                                 mydata += ",";
  73.                         }
  74.                 }
  75.                 mydata += String(R"({"role":"user","content":" )") + "你好,AI" +String(R"(,字数为)")+150+ String(R"(字"})");
  76.                 mydata += String("]}");
  77.                 http.POST(mydata);
  78.                 String jsonString=http.getString();
  79.                 JsonObject& root = jsonBuffer.parseObject(jsonString);
  80.                 String text = root["choices"][0]["message"]["content"];
  81.                 if (messageCount < maxMessages) {
  82.                         chatmessages[messageCount] = String(R"({"role":"user","content":" )") + "你好,AI" +String(R"(,字数为)")+150+ String(R"(字"},)")+String(R"({"role":"assistant","content":" )") + text + String(R"("})");
  83.                         messageCount++;
  84.                         } else {
  85.                                 for (int i = 0; i < maxMessages - 1; i++) {
  86.                                         chatmessages[i] = chatmessages[i + 1];
  87.                                 }
  88.                                 chatmessages[maxMessages - 1] =  String(R"({"role":"user","content":" )") + "你好,AI" +String(R"(,字数为)")+150+ String(R"(字"},)")+String(R"({"role":"assistant","content":" )") + text + String(R"("})");
  89.                         }
  90.                         mind_s_FanHuiJieGuo = text;
  91.                         Serial.println(mind_s_FanHuiJieGuo);
  92.                         writeFile(SD_MMC, "/hello.txt", (mind_s_FanHuiJieGuo.c_str()));
  93.                         Serial.println(readFile(SD_MMC, "/hello.txt"));
  94.                         digitalWrite(led,LOW);
  95.                 }
  96. }
复制代码
ESP32-S3 AI智能摄像头模块Mind+图形化编程实践图5

【演示视频】



沙发

feng0539  初级技匠

发表于 昨天 00:05

早知道你写库我也申请试用试用
回复

使用道具 举报

板凳

rzegkly  版主

发表于 9 小时前

ESP32-S3 AI智能摄像头模块买一个,一起学习,一起交流
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail