Papilio Arcade MCP服务器
MCP(模型上下文协议)服务器和调试固件,允许GitHub Copilot等AI助手直接控制Papilio Arcade FPGA板。
组件
此库包含:
- MCP服务器 (Python)-在主机PC上运行,将MCP工具调用转换为串行命令
- 凤尾鱼。h (Arduino)-仅标题库,用于将MCP调试添加到任何草图中
- 固件示例 -即用型调试固件草图
快速入门-将MCP调试添加到任何草图中
添加MCP调试功能的最简单方法是使用头库:
// Add BEFORE setup() - comment out to disable
#define PAPILIO_MCP_ENABLED
#include
void setup() {
Serial.begin(115200);
// ... your setup code ...
PapilioMCP.begin(); // Initialize MCP (does nothing if disabled)
}
void loop() {
PapilioMCP.update(); // Process MCP commands (does nothing if disabled)
// ... your loop code ...
}当 PAPILIO_MCP_ENABLED 未定义, PapilioMCP.begin() 和 PapilioMCP.update() 编译为空存根-开销为零。
快速入门-使用调试固件
1.上传调试固件
# From project root
pio run -e mcp_debug_firmware -t upload或者使用Makefile:
make mcp_debug_firmware-upload2.配置VS代码MCP
这 .vscode/mcp.json 应该已经配置好了。如果没有,请添加:
{
"servers": {
"papilio": {
"type": "stdio",
"command": "python",
"args": ["libs/papilio_mcp_server/server/papilio_mcp_server.py", "--port", "COM4"]
}
}
}3.安装Python依赖项
pip install pyserial opencv-python平台IO构建环境
在你的 platformio.ini,您可以通过构建标志将MCP调试添加到任何环境中:
; Normal build - MCP disabled
[env:my_project]
extends = env:papilio_arcade
; Debug build - MCP enabled
[env:my_project_debug]
extends = env:papilio_arcade
build_flags = ${env:papilio_arcade.build_flags}
-DPAPILIO_MCP_ENABLED特性
- RGB LED控制:设置和读取RGB LED颜色
- Wishbone巴士通道:读/写任何Wishbone巴士地址
- FPGA状态:获取调试转储和状态信息
- 串行端口管理:列出端口并连接到板
- 电脑屏幕截图工具:捕获HDMI输出的网络摄像头图像
- 视频模式控制:在测试模式、文本模式和帧缓冲区之间切换
- 文本模式:将文本写入80x26文本显示
- JTAG桥:为FPGA编程启用USB JTAG直通
串行命令(通过PapilioMCP.h)
| 命令 | 描述 | |
|---|---|---|
H | 帮助 | |
W AAAA DD | 将DD写入Wishbone地址AAAA | |
R AAAA | 阅读Wishbone地址AAAA | |
M AAAA NN | 读取AAAA开头的NN字节 | |
D | 转储调试寄存器 | |
| `J [1\ | 0]` | 启用/禁用JTAG桥 |
可用的MCP工具
RGB LED控制
| 工具 | 说明 |
|---|---|
set_rgb_led | 设置RGB LED颜色(每个通道0-255) |
get_rgb_led | 读取当前RGB LED颜色值 |
Wishbone巴士通道
| 工具 | 说明 |
|---|---|
wishbone_read | 从Wishbone总线地址读取一个字节 |
wishbone_write | 向Wishbone总线地址写入一个字节 |
董事会管理
| 工具 | 说明 |
|---|---|
list_serial_ports | 列出可用串行端口 |
connect_board | 连接到特定端口上的板 |
disconnect_board | 断开与板的连接(空闲串行端口) |
get_fpga_status | 获取调试状态并注册转储 |
send_raw_command | 发送带有流式输出的原始命令 |
电脑屏幕截图工具
| 工具 | 说明 |
|---|---|
capture_screenshot | 捕获HDMI显示器的网络摄像头图像 |
list_cameras | 列出可用的相机索引 |
set_camera | 选择要使用的相机 |
set_screenshot_crop | 设置截图裁剪区域 |
clear_screenshot_crop | 清除作物区域 |
视频模式控制
| 工具 | 说明 |
|---|---|
set_video_mode | 设置视频模式(0-4) |
get_video_mode | 获取当前视频模式 |
视频模式:
- 0:颜色条
- 1:网格图案
- 2:灰度梯度
- 3:文本模式(80x26)
- 4:帧缓冲区(160x120 RGB332)
文本模式
| 工具 | 说明 |
|---|---|
text_clear | 清除文本屏幕 |
text_set_cursor | 设置光标位置 |
text_set_color | 设置文本颜色(CGA 16调色板) |
text_write | 在光标处写入文本 |
text_write_at | 在特定位置用颜色书写文本 |
Wishbone地址图
| 地址范围 | 外围设备 |
|---|---|
| 0x8000 | 视频模式寄存器 |
| 0x8020-0x802B | 文本模式控制 |
| 0x8100-0x8103 | RGB LED控制器 |
| 0x0000-0x4B00 | 帧缓冲区(160x120 RGB332) |
使用示例
配置MCP服务器后,您可以询问Copilot:
- “将RGB LED设置为红色”
- “将LED变为蓝色”
- “读取当前LED颜色”
- “将0xFF写入地址0x8100”
- “切换到文本模式”
- “在位置10,5处写下‘Hello World’”
- “截图”
- “运行原始命令H”
文件结构
papilio_mcp_server/
├── library.json # PlatformIO library manifest
├── README.md # This file
├── src/
│ └── PapilioMCP.h # Header-only library for sketches
├── server/
│ └── papilio_mcp_server.py # Main MCP server
└── examples/
├── mcp_debug_simple/ # Minimal debug firmware
└── mcp_debug_firmware_full/ # Full-featured debug firmware