(摘) Arduino小智MCP库

声明:内容源自网络,版权归原作者所有。若有侵权请在网页聊天中联系我

购了两个小智,这是个不错的ESP32项目.B站资料也是比较多的.

它的一个较大功能节点就是加入了MCP功能,我也在PC上做了不少功能:开浏览器,关机,锁屏…

最近看到一个Arduino库xiaozhi-mcp.通过ESP32芯片来完成一定量的MCP功能.

之前也一直在考虑不需要长期使用PC的方法,以及WOL.

以下是库带的示例,并不是本人的.使用之前,安装WebSockets

PS: 在ESP32C3-SuperMini主板上,将LED_BUILTIN改为8,即可以控制蓝灯.

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

#define LED_BUILTIN 2

// WiFi配置
const char* ssid = "your-ssid";
const char* password = "your-password";

// MCP服务器配置
const char* mcpEndpoint = "ws://your-mcp-server:port/path";

// 创建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板载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, LOW);
      } else if (state == "blink") {
        for (int i = 0; i < 5; i++) {
          digitalWrite(LED_BUILTIN, HIGH);
          delay(200);
          digitalWrite(LED_BUILTIN, LOW);
          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);
}

相关文章