回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

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

头像 余老师 2025.10.20 16 0

功能说明:

因为和小智聊天特别有意思,但是我又不想尬聊,希望小智能做点儿正儿八经的任务。所以我很想让小智实现一个功能,控制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的功能,后续希望能用小智控制更多的传感器和外设。

评论

user-avatar