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

让小智语音控制ESP32 S3点灯|极简MCP插件教程 简单

头像 rzyzzxw 2025.08.07 9 0

8.8

【写在前面】

这个帖子,将用ESP32 S3板载LED的控制开始,学习xiaozhi-mcp。所用到的主控板是某宝上购得的44针的ESP32 S3核心板板载1-N16R8 S3-DevKitC-1模块开发板。它并不是乐鑫标准板,应该是兼容板,引脚信息丝印在板子上,容易查看,便于在面包板上接线测试。

image.png

第一个帖子,记录小智AI用MCP控制它的板载LED灯。

027fbbc8f06a8ee1c24b0f01b6b9e21.jpg

材料清单

  • K10小智AI X1
  • ESP32 S3-DevKitC-1开发板(N16R8) X1

步骤1 Arduino下载安装和编译环境配置

(本步为小白学习记录)

 

一、下载安装Arduino IDE

 

1、​​访问官网​

打开 Arduino 官方网站:https://www.arduino.cc/en/software

 

​2、选择版本​

​Windows​​:推荐下载 .exe安装包(如 Windows Installer)(我的电脑是windows)。

 

3、双击 .exe文件,以 ​​管理员身份运行​

 

4、同意许可协议 → 选择 ​​“为所有用户安装”​​ → 自定义安装路径(建议非系统盘)。

 

5、勾选 ​​“安装驱动程序”​​(确保开发板可识别)。

 

6、完成安装后,桌面生成快捷方式。

 

7、设置中文界面​

文件 → 首选项 → Language → 选择“中文(简体)” → 重启 IDE

 

8、创建纯英文工作目录:(如果工作目录本来就是纯英文无需修改)

新建文件夹:例如:C:\ArduinoProjects

修改IDE设置:

文件 → 首选项 → 修改“项目文件夹位置”为 C:\ArduinoProjects

image.png

 

二、编译环境配置

1、开发板连接电脑

 

2、工具-开发板-开发板管理……-查找esp32-安装

4ac9c7b073feea5370449f550ec89be.png

 

工具→开发板---esp32:,选择ESP32S3 Dev Module

8428e2895af3682ebcc4796aee0239e.png
  • 3、点击端口选择对应的串口。
image.png

现在开发板连接了Arduino IDE 。

 

4、安装必备库(关键!)

 

打开 Arduino IDE → ​​项目​​ → ​​加载库​​ → ​​管理库...​

搜索安装以下库:

​xiaozhi-mcp

屏幕截图 2025-08-04 152546.png

WebSockets​​ by Markus Sattler(选择 2.3.6+ 版本)

屏幕截图 2025-08-04 154533.png

​ArduinoJson​​ by Benoit Blanchon(v6.21+)

屏幕截图 2025-08-04 154646.png

 

步骤2 代码修改

点击左边的库管理,搜索找到xiaozhi-mcp库,点击库名字右边三个小点,找到示例,点击BasicExample在新窗口中打开示例代码。

image.png

因为我们这个板子不是乐鑫官方标准板,它的绿色板载LED引脚为IO43。如下图,板载一个RGB灯在IO48,红色LED为电源指示灯,绿-TX这颗LED灯可控,蓝-RX不可控。

fd77fe4f30ea9f2a01480aab7717ecc.jpg

所以代码做以下修改:

IO引脚由2改为43

image.png

填入自己的WIFI信息和从小智获取的MCP接入点地址,wss改为ws。

image.png

注册MCP工具部分,圆框中的修改一下,这个LED灯低电平亮,高电平灭。方框中的注意一下,对应下面三个控制功能。(为将更多代码修改做准备)

image.png

初始化也改成高电平-灭。

image.png

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

#define LED_BUILTIN 43

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

// MCP服务器配置
const char* mcpEndpoint = "ws://api.xiaozhi.me/mcp/?token=";

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

  // 连接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);
}

步骤3 参考资料

GitHub - toddpan/xiaozhi-esp32-mcp: esp32设备接入小智mcp的例子,(持续维护,欢迎star)

详细资料请阅读虾哥文档。

下面截取部分图片做学习笔记。

image.png
image.png
image.png
image.png
image.png

评论

user-avatar