ESP32 MicroPython开发站
基于Raspberry Pi的MCP服务器,用于管理运行MicroPython的ESP32板。主机上的Claude可以闪存固件、部署代码,并通过局域网与电路板交互——无需终端切换,也无需复制粘贴工具输出。
它做什么
- 刷写固件 --将MicroPython闪存到任何连接的ESP32(经典、S2、S3、C3、C6)上;根据芯片类型自动选择正确的固件;固件在本地缓存,具有7天TTL
- 部署代码 --通过USB串行将单个文件或完整项目目录部署到板上
- REPL访问 --执行MicroPython命令并捕获输出;读取最近的串行输出;软/硬重置
- OTA更新 --通过WebREPL通过WiFi推送代码更新;超时时回退到USB *(第三阶段)*
- GitHub部署 --从GitHub仓库中提取最新代码,并在一次工具调用中部署到板上 *(第三阶段)*
所有功能都以MCP工具的形式公开——Claude直接调用它们,不需要复制粘贴。
需求
- 运行Python 3.10+的Linux机器(Raspberry Pi、ARM SBC或x86)
- 系统守护进程
- 通过USB连接的ESP32板
- 配置了MCP的主机上的Claude代码
设置
快速设置(推荐)
在Pi上运行安装脚本。它处理一切:克隆仓库,创建虚拟环境,安装依赖项,将您添加到 dialout 组,提示输入WiFi凭据,自动生成WebREPL密码,并安装+启动systemd服务。
curl -fsSL https://raw.githubusercontent.com/bakedpanda/esp32-station/main/setup.sh | bash或者先克隆并在本地运行:
git clone https://github.com/bakedpanda/esp32-station.git esp32-station
bash esp32-station/setup.sh脚本打印 claude mcp add 最后的命令--copy将其粘贴到您的主机上以注册服务器。
WebREPL密码会自动生成并存储在 /etc/esp32-station/wifi.json。如果您需要它(例如从浏览器手动连接到WebREPL),请使用以下方式查找:
sudo cat /etc/esp32-station/wifi.json手动设置(回退)
如果你喜欢一步一步地做:
1.克隆并安装依赖项
git clone https://github.com/bakedpanda/esp32-station.git esp32-station
cd esp32-station
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt2.添加串口权限
sudo usermod -aG dialout $USER
# Log out and back in for this to take effect3.创建WiFi凭据文件
sudo mkdir -p /etc/esp32-station
sudo tee /etc/esp32-station/wifi.json << 'EOF'
{"ssid": "YOUR_SSID", "password": "YOUR_WIFI_PASSWORD", "webrepl_password": "YOUR_WEBREPL_PASS"}
EOF
# WebREPL password can be anything — pick something or generate one:
# python3 -c "import secrets, string; print(''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(12)))"
sudo chmod 600 /etc/esp32-station/wifi.json4.安装systemd服务
编辑 esp32-station.service 替换 User=esp32 和 /home/esp32 使用您的实际用户名和主目录,然后:
sudo cp esp32-station.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable esp32-station
sudo systemctl start esp32-station5.使用Claude Code注册(在您的主机上)
claude mcp add --transport http esp32-station http://raspberrypi.local:8000/mcp替换 raspberrypi.local 使用Pi的实际主机名或IP地址。使用查找主机名 hostname 以及IP hostname -I.
MCP工具
| 工具 | 说明 |
|---|---|
list_connected_boards | 列出所有通过USB连接的ESP32板 |
identify_chip | 在串行端口检测芯片变体(ESP32、S2、S3、C3、C6) |
flash_micropython | 将MicroPython固件闪存到板上 |
get_board_state | 返回持久的板状态(芯片类型,上次检测到的) |
deploy_file_to_board | 通过USB将单个文件部署到板上 |
deploy_directory_to_board | 通过USB将完整的项目目录部署到板上 |
exec_repl_command | 执行MicroPython命令并捕获输出 |
read_board_serial | 读取板上最近的串行输出 |
reset_board | 通过USB软或硬重置电路板 |
deploy_ota_wifi | 通过WebREPL通过WiFi将文件部署到板上 |
pull_and_deploy_github | 拉取GitHub仓库并通过USB部署到板上 |
get_board_status | 查询板固件版本、WiFi状态、IP地址、可用内存和可用存储空间 |
check_board_health | 检查MicroPython是否正在运行,板是否响应;清楚地报告问题 |
discover_boards | 通过mDNS在本地网络上发现MicroPython板;返回IP地址 |
deploy_boot_config | 将带有WiFi、WebREPL和mDNS广告配置的boot.py部署到板上,从Pi本地凭据文件读取凭据 |
建筑
Main machine (Claude Code)
│ MCP over Streamable HTTP
▼
Raspberry Pi :8000
├── mcp_server.py — FastMCP tool registration
└── tools/
├── board_detection.py — USB enumeration, chip ID (esptool)
├── firmware_flash.py — Firmware cache + flash (esptool)
├── file_deploy.py — File/dir deploy (mpremote)
├── repl.py — REPL exec, serial read, reset (mpremote)
├── serial_lock.py — Per-port file lock (prevents USB conflicts)
├── ota_wifi.py — WiFi OTA deploy (webrepl_cli.py subprocess)
├── github_deploy.py — GitHub clone + deploy (git + deploy_directory)
├── board_status.py — Board status queries (firmware, WiFi, memory, storage)
├── webrepl_cmd.py — WebREPL command transport (over-WiFi REPL)
├── mdns_discovery.py — mDNS board discovery via python-zeroconf
├── credentials.py — WiFi + WebREPL credential loading from Pi-local file
└── boot_deploy.py — boot.py template generation and deployment
│
▼
ESP32 board(s) via USB关键决策:
- MCP over Streamable HTTP(非stdio)——可通过curl调试,在局域网上工作
- 每个端口串行锁定——对不同板的并发工具调用工作正常;相同的板调用安全序列化
- 子进程隔离——esptool、mpremote和git作为子进程运行;比进程内绑定更干净
- 切勿依赖esptool自动检测——芯片变体在闪烁前已明确提供或验证
运行测试
source venv/bin/activate
pytest状态
| 阶段 | 它提供了什么 | 状态 |
|---|---|---|
| 1--基础设施 | MCP服务器+板卡检测+固件闪存 | 完成 |
| 2--核心USB工作流 | 文件部署+REPL+串行锁+错误处理 | 完成 |
| 3--WiFi和高级 | WebREPL OTA+GitHub部署 | 完成 |
| 4--强化 | 可靠重置(DTR/RTS),明确-芯片执行,技术债务清理 | 完成 |
| 5--板状态 | 板健康检查、固件查询、WiFi状态、mDNS发现 | 完成 |
| 6--配置 | 始终擦除闪存、WiFi凭据管理、boot.py部署 | 完成 |
| 7--设置和入职 | 一个命令Pi设置脚本,更新文档 | 完成 |
超出范围
- Web UI/仪表板——Claude是界面
- 车队库存/多板跟踪——一次单板
- 非MicroPython固件(Arduino、ESP-IDF、Zephyr)
- 身份验证/安全强化——仅限受信任的局域网
