Bài 9. Điều khiển thiết bị bằng Chatbot Xiaozhi qua giao thức MCP

Trong thời đại AI (trí tuệ nhân tạo)IoT (Internet of Things), việc điều khiển thiết bị bằng giọng nói hoặc chatbot đã trở nên phổ biến nhờ các nền tảng như ChatGPT, Google Assistant hay Alexa, giúp con người tương tác với máy móc một cách tự nhiên hơn bao giờ hết. Nắm bắt xu hướng đó, Điện Thông Minh E-smart sẽ hướng dẫn bạn cách sử dụng Chatbot Xiaozhi để điều khiển thiết bị IoT qua giao thức MCP, biến ESP32 thành cầu nối thông minh giữa AI và thế giới thực.

Chatbot Xiaozhi là một trợ lý AI cá nhân thông minh được thiết kế để hiểu và phản hồi ngôn ngữ tự nhiên của con người. Điểm đặc biệt của Xiaozhi nằm ở khả năng tương tác trực tiếp với thiết bị IoT thông qua một giao thức mới mang tên MCP (Model Context Protocol).

Chatbot xiaozhi điều khiển thiết bị qua giao thức MCP dùng ESP32

Giao thức MCP cho phép Xiaozhi gửi lệnh điều khiển, nhận dữ liệu cảm biến, hoặc thực thi hành động vật lý thông qua các thiết bị như ESP32, ESP8266, hoặc các hệ thống nhúng khác.

Điều thú vị là — ESP32, một vi điều khiển giá rẻ nhưng mạnh mẽ, có thể trở thành MCP Server giúp Chatbot Xiaozhi điều khiển các thiết bị thật trong thế giới vật lý.

Bài viết này sẽ hướng dẫn bạn từng bước để:

  • Hiểu Chatbot Xiaozhi là gì và MCP hoạt động như thế nào.
  • Cài đặt môi trường Arduino IDE để lập trình ESP32.
  • Viết chương trình ESP32 triển khai MCP Server bằng thư viện xiaozhi-mcp.
  • Cho phép Chatbot Xiaozhi điều khiển thiết bị, ví dụ như bật/tắt hoặc nháy đèn LED trên ESP32.

Chatbot Xiaozhi là gì?

Xiaozhi là một trợ lý AI thông minh được phát triển để giao tiếp bằng ngôn ngữ tự nhiên. Không chỉ trò chuyện, Xiaozhi còn có thể kết nối với thiết bị IoT thực tế thông qua các giao thức tiêu chuẩn, giúp người dùng điều khiển thiết bị bằng giọng nói hoặc tin nhắn.

Ví dụ, bạn có thể nói:

“Xiaozhi, bật đèn phòng khách lên.”

Ngay sau đó, chatbot sẽ gửi yêu cầu qua giao thức MCP tới thiết bị ESP32 của bạn, và đèn thật sẽ sáng lên.

Điểm đặc biệt là Xiaozhi hỗ trợ ngôn ngữ tiếng Việt và có thể được cấu hình thông qua website xiaozhi.me, giúp người dùng dễ dàng thêm thiết bị, đổi ngôn ngữ, và tạo các công cụ điều khiển (tools) tùy chỉnh.

Giao thức MCP (Model Context Protocol) là gì?

MCP (Model Context Protocol) là một giao thức mới được thiết kế nhằm kết nối chatbot AI với thế giới thực. Nó cho phép các thiết bị IoT, máy chủ, hoặc ứng dụng tự định nghĩa “các công cụ” (gọi là tools) mà chatbot có thể sử dụng.

Chatbot xiaozhi điều khiển thiết bị qua giao thức MCP dùng ESP32

Cụ thể:

  • Chatbot Xiaozhi sẽ kết nối đến MCP Server qua WebSocket.
  • Mỗi MCP Server có thể đăng ký nhiều tool với mô tả JSON schema.
  • Khi người dùng nói hoặc nhập lệnh, Xiaozhi sẽ tự động gọi tool tương ứng bằng cách gửi lệnh JSON đến thiết bị ESP32.
Chatbot xiaozhi điều khiển thiết bị qua giao thức MCP dùng ESP32

Ví dụ, nếu ESP32 có tool "led_blink", chatbot có thể gửi:

JSON
{
  "tool": "led_blink",
  "args": {"state": "on"}
}

Thiết bị ESP32 nhận lệnh, bật đèn LED và gửi phản hồi lại chatbot:

JSON
{"success": true, "state": "on"}

Xiaozhi đọc phản hồi và nói:

“Đèn đã được bật.”

Nhờ giao thức MCP, chatbot Xiaozhi có thể tương tác hai chiều với thiết bị vật lý — giúp tạo nên hệ sinh thái IoT AI thông minh, linh hoạt và dễ mở rộng.

Chuẩn bị trước khi lập trình

Để triển khai thành công MCP Server trên ESP32, bạn cần chuẩn bị:

Chatbot xiaozhi điều khiển thiết bị qua giao thức MCP dùng ESP32
  • Phần cứng:
    • Một bo ESP32 DevKit V1 hoặc tương đương.
    • Cáp USB kết nối máy tính.
    • (Tùy chọn) Đèn LED ngoài hoặc thiết bị relay.
  • Phần mềm:
    • Arduino IDE phiên bản mới nhất.
    • Đã cài board ESP32.
    • Thư viện xiaozhi-mcp (hoặc WebSocketMCP).

Cài đặt môi trường lập trình Arduino IDE cho ESP32

Bước 1: Thêm board ESP32

  1. Mở Arduino IDE → chọn File → Preferences
  2. Tại mục Additional Board Manager URLs, dán vào: https://dl.espressif.com/dl/package_esp32_index.json
  3. Nhấn OK, sau đó vào Tools → Board → Boards Manager…
  4. Gõ “ESP32”, chọn esp32 by Espressif Systems, nhấn Install

Bước 2: Cài thư viện xiaozhi-mcp

  1. Mở Arduino IDE → Sketch → Include Library → Add .ZIP Library…
  2. Chọn file xiaozhi-mcp.zip bạn có thể tải thư viện tại đây.

Bước 3: Chuẩn bị thông tin kết nối

Bạn cần có:

  • Tên Wi-Fi và mật khẩu để ESP32 kết nối mạng.
  • Địa chỉ MCP Endpoint từ chatbot Xiaozhi (ví dụ wss://api.xiaozhi.me/mcp/?token=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c). Cần đăng nhập vào website xiaozhi.me/console/agents chọn mục Configure Role –> MCP Setting –> Get MCP Endpoint sau đó chọn Copy để lấy đường dẫn liên kết.
Chatbot xiaozhi điều khiển thiết bị qua giao thức MCP dùng ESP32
Chatbot xiaozhi điều khiển thiết bị qua giao thức MCP dùng ESP32

Lập trình ESP32 triển khai MCP Server

Dưới đây là chương trình mẫu đầy đủ, có thể nạp trực tiếp vào ESP32 bằng Arduino IDE:

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

#define LED_BUILTIN 2  // LED mặc định trên bo ESP32

// Cấu hình WiFi
const char* ssid = "your-ssid";         // Thay bằng tên Wi-Fi của bạn
const char* password = "your-password"; // Thay bằng mật khẩu Wi-Fi

// Cấu hình MCP Server (lấy từ chatbot Xiaozhi)
const char* mcpEndpoint = "wss://your-mcp-server:port/path";

// Tạo đối tượng MCP client
WebSocketMCP mcpClient;

// Hàm callback khi kết nối/thất bại
void onConnectionStatus(bool connected) {
  if (connected) {
    Serial.println("[MCP] ✅ Đã kết nối tới máy chủ");
    registerMcpTools();
  } else {
    Serial.println("[MCP] ⚠️ Mất kết nối với máy chủ MCP");
  }
}

// Đăng ký MCP Tool để chatbot điều khiển LED
void registerMcpTools() {
  mcpClient.registerTool(
    "led_blink",                          // Tên tool
    "Điều khiển LED trên ESP32",          // Mô tả tool
    "{\"type\":\"object\",\"properties\":{\"state\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"blink\"]}},\"required\":[\"state\"]}", // JSON schema
    [](const String& args) {              // Hàm thực thi
      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] 🛠️ Đã đăng ký tool điều khiển LED");
}

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

  // Kết nối Wi-Fi
  Serial.print("Đang kết nối Wi-Fi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("\n✅ Wi-Fi đã kết nối");
  Serial.println("IP thiết bị: " + WiFi.localIP().toString());

  // Bắt đầu MCP
  mcpClient.begin(mcpEndpoint, onConnectionStatus);
}

void loop() {
  mcpClient.loop();
  delay(10);
}

Cách hoạt động của chương trình

  1. ESP32 kết nối với Wi-Fi và tạo kết nối WebSocket đến máy chủ MCP Endpoint của server xiaozhi.me.
  2. Khi kết nối thành công, ESP32 đăng ký một công cụ (tool) tên led_blink.
  3. Chatbot Xiaozhi sẽ tự động phát hiện tool này và có thể gọi lệnh khi người dùng yêu cầu.
Chatbot xiaozhi điều khiển thiết bị qua giao thức MCP dùng ESP32

Ví dụ, khi bạn nói:

“Xiaozhi, bật đèn led lên!”

Chatbot gửi lệnh MCP:

{"tool": "led_blink", "args": {"state": "on"}}

ESP32 bật LED và phản hồi lại:

{"success": true, "state": "on"}
Chatbot xiaozhi điều khiển thiết bị qua giao thức MCP dùng ESP32

Mở rộng tính năng

Sau khi bạn đã hiểu cơ bản, bạn có thể mở rộng thêm nhiều công cụ khác, ví dụ:

  • Điều khiển relay để bật/tắt quạt, đèn, motor.
  • Đọc cảm biến nhiệt độ, độ ẩm và gửi dữ liệu cho Xiaozhi.
  • Kết hợp với AI giọng nói để biến ESP32 thành thiết bị thông minh biết “nghe – hiểu – phản hồi”.

Ví dụ thêm một công cụ đọc nhiệt độ:

C++
mcpClient.registerTool("get_temp", "Đọc cảm biến DHT11", "{}", [](const String& args) {
  float temp = dht.readTemperature();
  String response = "{\"temperature\":" + String(temp) + "}";
  return WebSocketMCP::ToolResponse(response);
});

Kết luận

Giải pháp điều khiển thiết bị bằng Chatbot Xiaozhi qua giao thức MCP thực sự đơn giản nhưng mạnh mẽ, cho phép bạn dễ dàng xây dựng hệ thống nhà thông minh điều khiển bằng giọng nói, chatbot hoặc tự động hóa theo ngữ cảnh thực tế. Mô hình này nổi bật với khả năng mở rộng linh hoạt cho nhiều loại thiết bị, phản hồi thời gian thực qua WebSocket, và giao tiếp tự nhiên bằng tiếng Việt thông qua Xiaozhi. Chỉ với vài dòng code, ESP32 của bạn không còn là một vi điều khiển thông thường, mà đã trở thành một thiết bị AI thông minh kết nối trực tiếp với chatbot Xiaozhi — mở ra tiềm năng vô tận cho các ứng dụng IoT hiện đại.

5/5 - (7 bình chọn)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Tuyển sinh khóa Lập trình ESP32 căn bản, lớp 2-4-6 khai giảng ngày 27/10/2025. Học phí 1tr/khóa (15 buổi). Đăng ký qua zalo: 0919.890.938 (còn 5 suất)

X
Contact Me on Zalo