ESP32-C5接入MCP,实现小智控制ESP32-C5板载设备

2025-10-20492
AI 快速预览详细 收起
本文介绍了如何通过接入MCP,使用小智聊天机器人控制ESP32-C5上的板载LED灯。首先需要将行空板K10接入小智,并进行相关配置。然后在Arduino IDE中安装Websockets和xiaozhi-mcp库,并编写代码实现LED灯的控制。通过注册MCP工具,可以实现小智对ESP32-C5板载LED灯的控制。这个项目适合零基础新手和STEM教育场景,能够激发孩子的创造力。

功能说明:

因为和小智聊天特别有意思,但是我又不想尬聊,希望小智能做点儿正儿八经的任务。所以我很想让小智实现一个功能,控制ESP32-C5上的板载设备,我们就从最简单的入手,控制板载LED灯。

先看效果:

实现步骤:

1、将行空板K10接入小智,并做相关配置,可参考(K10接入聊天机器人-小智 DF创客社区

2、打开arduino IDE,安装library,(Websockets、xiaozhi-mcp)

代码如下:

 

代码
#include <WiFi.h>
#include <WebSocketMCP.h>

int LED_BUILTIN 15
const char* ssid = "your ssid";
const char* password = "your password";

// MCP服务器配置
const char* mcpEndpoint = "your wss, get it in xiaozhi console";

// 创建WebSocketMCP实例
WebSocketMCP mcpClient;

// 连接状态回调函数
void onConnectionStatus(bool connected) {
  if (connected) {
    Serial.println("[MCP] 已连接到服务器");
    // 连接成功后注册工具
    registerMcpTools();
  } else {
    Serial.println("[MCP] 与服务器断开连接");
  }
}

// 注册MCP工具
void registerMcpTools() {
  // 注册一个简单的LED控制工具
  mcpClient.registerTool(
    "led_blink",
    "控制ESP32-C5板载LED",
    "{\"type\":\"object\",\"properties\":{\"state\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"blink\"]}},\"required\":[\"state\"]}",
    [](const String& args) {
      DynamicJsonDocument doc(256);
      deserializeJson(doc, args);
      String state = doc["state"].as<String>();
      /*
      if (state == "on") {
        digitalWrite(LED_BUILTIN, HIGH);
      } else if (state == "off") {
        digitalWrite(LED_BUILTIN, HIGH);
      } else if (state == "blink") {
        for (int i = 0; i < 5; i++) {
          digitalWrite(LED_BUILTIN, HIGH);
          delay(200);
          digitalWrite(LED_BUILTIN, HIGH);
          delay(200);
        }
        
      }
      */
      return WebSocketMCP::ToolResponse("{\"success\":true,\"state\":\"" + state + "\"}");
    }
  );
  Serial.println("[MCP] LED控制工具已注册");
}

void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  // 连接WiFi
  Serial.print("连接到WiFi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println("WiFi已连接");
  Serial.println("IP地址: " + WiFi.localIP().toString());

  // 初始化MCP客户端
  mcpClient.begin(mcpEndpoint, onConnectionStatus);
}

void loop() {
  // 处理MCP客户端事件
  mcpClient.loop();
  
  // 其他代码...
  delay(10);
}

初步实现了接入MCP的功能,后续希望能用小智控制更多的传感器和外设。

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -