M5StamPLC MCP服务器

一个为M5StamPLC实现的模型上下文协议服务器,通过OpenAI实时API支持AI驱动的语音对话和PLC控制。

  • by onlymoein
  • C
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 moecr7/stamplc-mcp-server-io

使用说明

配备OpenAI语音助手的M5StamPLC MCP服务器

M5StamPLC的模型上下文协议(MCP)服务器实现,使用OpenAI的实时API实现AI驱动的语音对话。

特性

  • 🤖 MCP 服务器:完整的模型上下文协议实现
  • 🎤 语音助手:与OpenAI GPT-4o Mini实时进行自然语音对话
  • 🔊 语音到文本:使用OpenAI Whisper进行音频转录
  • 🗣️ 文本转语音:使用OpenAI TTS的自然语音响应
  • 🔌 PLC控制:完全控制输入、继电器和传感器
  • 📊 实时仪表盘:设备屏幕上显示实时状态
  • 🌐 RESTful API:用于设备控制的HTTP端点
  • 📡 服务器发送的事件:通过SSE实时更新状态

硬件要求

  • M5StamPLC装置
  • 用于编程的USB-C电缆
  • WiFi网络接入
  • OpenAI API密钥

软件需求

  • 平台IO IDE或CLI
  • Python 3.x(用于esptool)
  • Git

安装

1.克隆存储库

git clone https://github.com/moecr7/stamplc-mcp-server-io.git
cd stamplc-mcp-server-io

2.配置WiFi和API密钥

复制示例配置文件:

cp wifi_config.h.example wifi_config.h

编辑 wifi_config.h 使用您的凭据:

const char* WIFI_SSID = "YourWiFiSSID";
const char* WIFI_PASSWORD = "YourWiFiPassword";
const char* OPENAI_API_KEY = "sk-your-openai-api-key";

重要: wifi_config.h 保护您的凭据是合法的。永远不要提交此文件!

3.安装依赖项

PlatformIO将自动安装所需的库:

  • M5StamPLC库
  • ArduinoJson
  • 特别:
  • 异步TCP

4.构建和上传

通过USB连接M5StamPLC并上传固件:

pio run --target upload

监控串行输出:

pio device monitor

配置

WiFi设置

设备将在启动时自动连接到WiFi。状态LED将显示:

  • 🔴 红:WiFi已断开
  • 🟢 绿色:时间同步成功
  • ⚪ 白色:正常运行
  • 🔵 蓝色:传入命令

OpenAI API密钥

从获取API密钥 OpenAI平台 并将其添加到 wifi_config.h.

备注:OpenAI实时API需要付费帐户。确保你有足够的学分。

用法

MCP API终点

基础网址

http://<device-ip>/mcp

可用方法

读取输入

{
  "jsonrpc": "2.0",
  "method": "readInput",
  "params": {"inputNumber": 0},
  "id": 1
}

写入中继

{
  "jsonrpc": "2.0",
  "method": "writeRelay",
  "params": {"relayNumber": 1, "state": true},
  "id": 2
}

读取中继

{
  "jsonrpc": "2.0",
  "method": "readRelay",
  "params": {"relayNumber": 1},
  "id": 3
}

获取IO状态

{
  "jsonrpc": "2.0",
  "method": "getIOState",
  "params": {},
  "id": 4
}

获取系统信息

{
  "jsonrpc": "2.0",
  "method": "getSystemInfo",
  "params": {},
  "id": 5
}

播放音调

{
  "jsonrpc": "2.0",
  "method": "tone",
  "params": {"frequency": 1000, "duration": 500},
  "id": 6
}

语音对话API

端点: POST /voice/chat

请求:

  • 内容类型: audio/wav
  • 正文:音频文件(WAV格式,建议16kHz)

回应:

{
  "success": true,
  "transcribed": "User's speech transcribed to text",
  "text": "AI assistant response",
  "audio": "base64-encoded MP3 audio response"
}

使用curl的示例:

curl -X POST http://192.168.100.97/voice/chat \
  -H "Content-Type: audio/wav" \
  --data-binary @audio.wav

服务器发送的事件

连接到实时更新:

curl http://192.168.100.97/events

活动包括:

  • 输入状态(8个输入)
  • 继电器状态(4个继电器)
  • 传感器数据(温度、电压、电流)
  • 时间戳

能力端点

列出所有可用的MCP功能:

curl http://192.168.100.97/capabilities

项目结构

stamplc-mcp-server-io/
├── src/
│   ├── stamplc-mcp-server.cpp    # Main application
│   ├── mcp_server.h/cpp           # MCP server implementation
│   ├── dashboard_ui.h/cpp         # Display UI
│   ├── openai_realtime.h/cpp      # OpenAI API integration
│   └── wifi_config-def.h          # Configuration template
├── examples/                      # Example code
├── platformio.ini                 # PlatformIO configuration
├── wifi_config.h.example         # Configuration template
└── README.md                      # This file

继电器编号

继电器从0开始编号:

  • relayNumber: 0 =继电器1
  • relayNumber: 1 =继电器2
  • relayNumber: 2 =继电器3
  • relayNumber: 3 =继电器4

输入编号

输入从0开始编号:

  • inputNumber: 0 =输入1
  • inputNumber: 1 =输入2
  • …直到 inputNumber: 7 =输入8

故障排除

WiFi连接失败

  • 检查SSID和密码 wifi_config.h
  • 确保WiFi为2.4GHz(ESP32不支持5GHz)
  • 检查信号强度

OpenAI API错误

  • 验证API密钥是否正确
  • 支票账户有足够的信用额度
  • 确保API密钥可以访问实时API

上传失败

  • 将设备置于引导加载程序模式(按住BOOT按钮,按RESET)
  • 检查USB电缆连接
  • 验证端口是否正确 platformio.ini

设备没有响应

  • 检查设备显示屏上的IP地址
  • 验证设备和计算机是否在同一网络上
  • 检查防火墙设置

发展

建筑

pio run

上传中

pio run --target upload

监控

pio device monitor

清洁

pio run --target clean

许可证

MIT许可证-有关详细信息,请参阅许可证文件

贡献

欢迎投稿!请随时提交拉取请求。

作者

莫因(moerc7)

致谢

  • M5StamPLC硬件的M5Stack
  • 实时API的OpenAI
  • 开发平台平台IO

支持

对于问题和疑问:

  • 在GitHub上打开一个问题
  • 查看示例目录中的用法示例
  • 查阅MCP协议文档

更新日志

v1.0.0

  • 初始版本
  • MCP服务器实现
  • OpenAI语音助手集成
  • 实时仪表板用户界面
  • 完整的PLC控制能力