Codex 接管嘉立创EDA 并复现 STM32 Blue Pill 学习底板的完整教学
1. 目标
本文只做一件事:从零开始,把你的电脑配置成 Codex -> MCP -> EasyEDA 官方 Bridge -> 嘉立创EDA Pro 的可用链路,并且复现出本文对应的最终成果:
- Codex 可以读取并调用嘉立创EDA Pro 的 API
- Codex 可以直接在嘉立创EDA Pro 里新建或修改 PCB
- Codex 可以自主生成一块 STM32 Blue Pill 学习扩展底板
- Codex 可以执行在线校验、回读板数据、运行 DRC、导出结果
本文不是概念介绍,是可操作复现文档。照着做即可。
2. 本次最终成果的定义
本次最终复现的板子是:
- 类型:STM32 Blue Pill 学习扩展底板
- 尺寸:3600 mil x 3200 mil
- 约等于:91.44 mm x 81.28 mm
- 满足要求:不超过 10 x 10 cm
- 中间:2 x 20 Blue Pill 插座
- 两侧:每个引脚都引出成学习接口
- 左侧接口顺序:GND – 3V3 – NET
- 右侧接口顺序:NET – 3V3 – GND
- 左右两侧 3V3 总线板内互联
- 左右两侧 GND 总线板内互联
最终实测结果:
- Pads: 160
- Lines: 140
- Strings: 46
- DRC: 0 errors
3. 先说清楚整个链路
你复现的不是“让 AI 看懂 PCB”,而是这条完整控制链:
只要这六段全部打通,Codex 就可以直接操纵嘉立创EDA Pro。
4. 复现前的硬条件
必须满足以下条件:
- Windows 电脑
- 已安装 Node.js 20+
- 已安装 嘉立创EDA Pro
- 能正常启动 Codex Desktop
- 本机允许 localhost 端口通信
- 你有一个可编辑的嘉立创EDA Pro 工程
建议条件:
- Node.js 版本不低于 20.17.0
- 嘉立创EDA Pro 已登录账号
- 能联网拉依赖和访问 GitHub/官方文档
5. 本机最终目录结构
以下目录就是本次成功链路所在工作目录:
C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda
其中关键子目录和文件:
- codex-easyeda-mcp
- 作用:Codex 使用的 MCP 服务
- easyeda-api-skill
- 作用:EasyEDA API 文档、桥服务脚本、技能说明
- eext-run-api-gateway
- 作用:嘉立创EDA Pro 侧运行的扩展源码
- generate-stm32-bluepill-study-base.js
- 作用:自动生成 Blue Pill 学习底板
- verify-stm32-bluepill-study-base.js
- 作用:回读板数据并校验
- verify-easyeda-connection.ps1
- 作用:快速验证 Bridge 与 API 是否通
6. 官方资料入口
复现时优先看官方资料,不要靠二手教程。
官方资料入口:
- EasyEDA 官方 GitHub 组织:https://github.com/easyeda
- EasyEDA API Skill 官方仓库:https://github.com/easyeda/easyeda-api-skill
- EasyEDA Pro API User Guide:https://prodocs.lceda.cn/en/api/guide/
- Invoking the Extension API:https://prodocs.lceda.cn/en/api/guide/invoke-apis.html
- Ancillary Projects / Run API Gateway:https://prodocs.lceda.cn/en/api/guide/ancillary-projects.html
本地也有一份可直接查的结构化文档:
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\easyeda-api-skill\\references
重点用到的 API 类:
- eda.dmt_Project
- eda.dmt_Pcb
- eda.dmt_EditorControl
- eda.pcb_Document
- eda.pcb_PrimitivePad
- eda.pcb_PrimitiveLine
- eda.pcb_PrimitiveString
- eda.pcb_Drc
7. 安装 Node.js
如果你还没有 Node.js,先装。
步骤:
验证命令:
node –v
npm –v
你只需要看到版本号,不需要纠结小版本。
8. 准备三个仓库或目录
你至少需要以下三部分内容:
本次已经放在:
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\easyeda-api-skill
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\eext-run-api-gateway
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\codex-easyeda-mcp
如果你要在另一台电脑全新复现,建议保持类似结构,避免路径混乱。
9. 安装依赖
对三个目录分别执行 npm install。
9.1 安装 easyeda-api-skill
cd C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\easyeda-api-skill
npm install
9.2 安装 eext-run-api-gateway
cd C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\eext-run-api-gateway
npm install
9.3 安装 codex-easyeda-mcp
cd C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\codex-easyeda-mcp
npm install
10. 确认三个目录分别是干什么的
10.1 easyeda-api-skill
它负责:
- 提供 EasyEDA API 结构化文档
- 提供桥服务脚本
- 给 AI 一个明确的调用工作流
10.2 eext-run-api-gateway
它负责:
- 作为嘉立创EDA Pro 的扩展安装到 EDA 里
- 在 EDA 内部接收桥服务连接
- 真正执行传入的 API 代码
10.3 codex-easyeda-mcp
它负责:
- 把上面那条 Bridge 能力包装成 Codex 的 MCP 工具
- 让 Codex 直接拥有这些工具:
- easyeda_status
- easyeda_list_windows
- easyeda_execute_code
- easyeda_search_docs
- easyeda_read_doc
- easyeda_select_window
11. 先启动或准备嘉立创EDA Pro
这一步必须做。
操作:
原因:
- 没有打开 EDA 窗口时,桥服务虽然能启动,但 edaConnected 会是 false
- 没有 PCB 文档时,很多 PCB API 会报错
12. 安装 Run API Gateway 扩展
这一层是嘉立创EDA Pro 端的关键。
12.1 方案一:使用已有扩展项目安装
本地扩展项目目录:
C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\eext-run-api-gateway
这个目录中有安装脚本:
scripts\\install-to-running-jlceda.mjs
它的工作方式:
- 通过本地 Chrome DevTools 协议连接运行中的嘉立创EDA Pro 页面
- 把扩展包注入并安装到当前运行实例
12.2 先构建扩展
在扩展目录执行:
cd C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\eext-run-api-gateway
npm run build
如果构建成功,通常会在 build\\dist 下生成 .eext 包。
12.3 执行安装脚本
cd C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\eext-run-api-gateway
node .\\scripts\\install-to–running-jlceda.mjs
如果嘉立创EDA Pro 页面可被 CDP 发现,脚本会把扩展注入进去。
12.4 方案二:手工在嘉立创EDA Pro 里安装
如果自动安装不通,就手工安装:
12.5 安装后的可见效果
常见状态:
- 顶部菜单出现 API Gateway
- 扩展处于启用状态
- 之后桥服务扫描端口时能与其完成握手
13. 启动 EasyEDA Bridge 服务
桥服务的职责是:
- 监听本机端口 49620 到 49629
- 等待嘉立创EDA Pro 侧扩展连接
- 提供 /health 与 /execute HTTP 接口
本地桥服务脚本在:
C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\easyeda-api-skill\\scripts\\bridge-server.mjs
手工启动命令:
cd C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\easyeda-api-skill
node .\\scripts\\bridge-server.mjs
注意:
- codex-easyeda-mcp 也会尝试自动拉起桥服务
- 但你第一次排障时,建议自己手工起一次,便于观察日志
14. 验证 Bridge 是否正常
桥服务起来后,访问健康检查:
Invoke-RestMethod http://127.0.0.1:49620/health | ConvertTo-Json –Depth 8
你要重点看这几个字段:
- service
- status
- edaConnected
- edaWindowCount
- activeWindowId
理想结果示例:
{
"service": "easyeda-bridge",
"status": "ok",
"edaConnected": true,
"edaWindowCount": 1
}
判断规则:
- service = easyeda-bridge:说明不是假服务
- status = ok:桥服务活着
- edaConnected = true:EDA 端真的连上了
- edaWindowCount > 0:当前至少有一个可控窗口
15. 直接测试官方 HTTP 执行接口
不要一上来就测 Codex。先直接测桥服务的 /execute。
PowerShell 示例:
$body = @{
code = 'return await eda.dmt_Project.getCurrentProjectInfo();'
} | ConvertTo-Json –Compress
Invoke-RestMethod –Method Post `
–Uri http://127.0.0.1:49620/execute `
–ContentType 'application/json' `
–Body $body | ConvertTo-Json –Depth 8
如果返回当前工程信息,说明:
- Bridge 通
- EDA 执行环境通
- API 调用通
15.1 一键验证脚本
本地已经有可直接跑的验证脚本:
C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\verify-easyeda-connection.ps1
执行:
cd C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda
powershell –ExecutionPolicy Bypass –File .\\verify-easyeda-connection.ps1
这个脚本会:
- 检查 /health
- 向 /execute 提交一段 EasyEDA API 代码
- 返回版本、用户信息和 API 可用性
16. 把 EasyEDA MCP 注册到 Codex
这一层做完后,Codex 才能在会话里直接调用 EasyEDA。
本机成功配置写在:
C:\\Users\\李天乐\\.codex\\config.toml
关键配置如下:
[mcp_servers.easyeda]
command = "node"
args = ['C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\codex-easyeda-mcp\\server.mjs']
含义:
- Codex 启动时会注册一个名为 easyeda 的 MCP 服务
- 该服务运行 server.mjs
- server.mjs 会去查找或启动 easyeda-api-skill 提供的桥服务
16.1 检查是否注册成功
你可以在有相应 CLI 支持时执行:
codex mcp list
理想状态应该能看到类似:
easyeda node C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\codex-easyeda-mcp\\server.mjs
17. 理解 codex-easyeda-mcp/server.mjs 的工作方式
这个文件是核心枢纽。
它做了几件关键事:
- easyeda-api-skill\\scripts\\bridge-server.mjs
- /health
- /eda-windows
- /execute
这就是为什么你只要打开 Codex 并注册了 MCP,它就能“看起来像直接操纵 EDA”。
18. 在 Codex 中验证 EasyEDA MCP 是否真能工作
启动 Codex Desktop 后,让它调用:
- easyeda_status
- easyeda_list_windows
理想结果:
- status = ok
- edaConnected = true
- edaWindowCount >= 1
- 有 windowId
如果这一步失败,就不要继续生成 PCB,先修通链路。
19. 复现用的目标板设计说明
本次设计对象是常见 STM32F103C8T6 Blue Pill 模块。
采用的 2×20 引脚顺序如下。
左排从上到下:
VBAT, PC13, PC14, PC15, PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PB0, PB1, PB10, PB11, NRST, 3V3, GND, GND
右排从上到下:
3V3, GND, 5V, PB9, PB8, PB7, PB6, PB5, PB4, PB3, PA15, PA12, PA11, PA10, PA9, PA8, PB15, PB14, PB13, PB12
这一步非常关键。
如果你的 Blue Pill 排针定义不同,整板功能逻辑会错。焊接前必须核对你手上的模块。
20. 自动生成板子的脚本
本地生成脚本:
C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\generate-stm32-bluepill-study-base.js
这个脚本做的事:
21. 生成脚本里的关键参数
板子整体参数:
const board = {
width: 3600,
height: 3200,
centerX: 1800,
leftSocketX: 1500,
rightSocketX: 2100,
topRowY: 2550,
rowPitch: 100,
leftGroup: { gndX: 250, vccX: 350, sigX: 450, labelX: 560 },
rightGroup: { sigX: 3150, vccX: 3250, gndX: 3350, labelX: 3040 },
body: { left: 1350, right: 2250, top: 2680, bottom: 520 },
};
这些值的作用:
- width/height:板框尺寸
- leftSocketX/rightSocketX:Blue Pill 两列插座中心线位置
- topRowY:最顶排坐标
- rowPitch:引脚间距,100 mil = 2.54 mm
- leftGroup/rightGroup:左右侧学习接口三列焊盘的坐标
- body:中间插座外框丝印区域
22. 如何拿到你自己的 PCB UUID
这一步很重要。
生成脚本和校验脚本都用到了:
const TARGET_PCB_UUID = "9d80b0d0984573bb";
这个值不是通用值,是本次成功案例中的实际 PCB UUID。
如果你新建了自己的工程或 PCB,必须换成你自己的 UUID。
22.1 用 EasyEDA API 读取当前 PCB 信息
可以直接对 /execute 发送:
return {
project: await eda.dmt_Project.getCurrentProjectInfo(),
pcb: await eda.dmt_Pcb.getCurrentPcbInfo()
};
然后从结果里抄:
- project.uuid
- pcb.uuid
22.2 为什么必须换 UUID
因为脚本开头会调用:
const tabId = await eda.dmt_EditorControl.openDocument(TARGET_PCB_UUID);
await eda.dmt_EditorControl.activateDocument(tabId);
如果 UUID 不对:
- 打不开目标 PCB
- 激活失败
- 后续全部失效
23. 如何执行生成脚本
23.1 方案一:通过 Codex 工具执行
这是最直接的方式。
Codex 读取脚本内容后,调用 easyeda_execute_code,把整段 JavaScript 发到 EDA 执行。
23.2 方案二:直接通过 HTTP /execute
你也可以不通过 Codex,直接 HTTP 发代码。
PowerShell 示例:
$code = Get-Content –Raw 'C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\generate-stm32-bluepill-study-base.js'
$body = @{ code = $code } | ConvertTo-Json –Compress
Invoke-RestMethod –Method Post `
–Uri http://127.0.0.1:49620/execute `
–ContentType 'application/json' `
–Body $body | ConvertTo-Json –Depth 20
如果执行成功,返回里通常会有:
- 当前 tabId
- 当前 pcb
- 删除的旧图元数量
- 新建图元数量
- 最终图元统计
24. 为什么这块板后来需要 reroute
这不是废话,是复现时最容易踩的坑。
最初设计里,GND 和 3V3 总线的连接方式过于直接,导致:
- 短路冲突
- 走线间距冲突
- DRC 报错
后面修正方式是:
- 左侧底部 GND 改为向下引出后再并到 GND 总线
- 右侧 GND 改为在中间区域下折后再接到 GND 总线
- 顶部 3V3 总线整体抬高,避开右侧 GND 的连接线
这就是为什么最终图元统计从早期版本变成了:
- Lines: 140
不是越少越好,能通过 DRC 才有意义。
25. 自动校验脚本
本地校验脚本:
C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\verify-stm32-bluepill-study-base.js
它的核心逻辑:
- Pad 数量
- Line 数量
- String 数量
26. 校验脚本验证了哪些关键点
本次实际取样点包括:
- (1500, 2550) 应为 VBAT
- (2100, 2350) 应为 5V
- (450, 2150) 应为 PA0
- (3150, 2250) 应为 PB9
- (350, 850) 应为 3V3
- (3350, 2450) 应为 GND
这些点验证的不是“画面长得像”,而是:
- 坐标位置正确
- 图元存在
- 该点网络正确
27. 如何执行校验脚本
PowerShell:
$code = Get-Content –Raw 'C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\verify-stm32-bluepill-study-base.js'
$body = @{ code = $code } | ConvertTo-Json –Compress
Invoke-RestMethod –Method Post `
–Uri http://127.0.0.1:49620/execute `
–ContentType 'application/json' `
–Body $body | ConvertTo-Json –Depth 20
本次最终成功返回值中的关键字段应当是:
{
"counts": {
"pads": 160,
"lines": 140,
"strings": 46
}
}
28. 如何跑 DRC
直接调用:
return await eda.pcb_Drc.check(true, false, true);
如果一切正确,最终结果应当是:
[]
这表示:
- 返回数组为空
- DRC 错误数量为 0
28.1 更完整的 DRC 调用示例
const project = await eda.dmt_Project.getCurrentProjectInfo();
const pcb = await eda.dmt_Pcb.getCurrentPcbInfo();
const drc = await eda.pcb_Drc.check(true, false, true);
return {
project: project ? { uuid: project.uuid, friendlyName: project.friendlyName } : null,
pcb: pcb ? { uuid: pcb.uuid, name: pcb.name } : null,
drcCount: Array.isArray(drc) ? drc.length : null,
drc
};
29. 最终应达到的实测结果
如果你完整复现成功,最终应该同时满足:
- health.service = easyeda-bridge
- health.status = ok
- health.edaConnected = true
- health.edaWindowCount >= 1
- 当前项目可读
- 当前 PCB 可读
- 生成脚本执行成功
- 校验脚本返回
- pads = 160
- lines = 140
- strings = 46
- DRC = 0
只要有一项对不上,就说明你没有完整复现成功。
30. 本次成功案例中的实际项目信息
这是本次已经跑通的现场数据,用来对照:
- Project: STM32_BluePill_Study_Base_20260528061222
- Project UUID: 641c2110522042b4b78ef2e850424ef4
- PCB: PCB1
- PCB UUID: 9d80b0d0984573bb
- EasyEDA Window ID: fb4c4dba-9b23-432d-adae-e488a6faf91a
注意:
- Project UUID
- PCB UUID
- Window ID
这些值在你的环境里大概率都不一样,不要照抄。
31. 结果证明文件
本地已有两份实测证明:
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\easyeda-integration-proof-2026-05-28.md
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\stm32-bluepill-study-base-proof-2026-05-28.md
其中包含:
- MCP 注册证据
- Bridge 健康状态
- /execute 调用结果
- 项目与 PCB 回读结果
- 图元统计
- DRC 最终为 0 的证据
32. 如何保存校验结果为 JSON
你可以把返回结果直接落盘,便于留证。
PowerShell 示例:
$code = Get-Content –Raw 'C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\verify-stm32-bluepill-study-base.js'
$body = @{ code = $code } | ConvertTo-Json –Compress
$result = Invoke-RestMethod –Method Post –Uri http://127.0.0.1:49620/execute –ContentType 'application/json' –Body $body
$result | ConvertTo-Json –Depth 20 | Set-Content 'C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\verify-stm32-bluepill-study-base.json'
33. 如何导出最终截图
本文不强制规定导出方式,但复现时建议你至少保存一张最终板图,方便对照。
常见方式:
本次结果图文件在:
C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\easyeda-bluepill-study-base-render.png
34. 如果 Codex 显示桥服务已启动但无法控制 EDA
看这几个点:
典型错误状态:
{
"status": "ok",
"edaConnected": false,
"edaWindowCount": 0
}
这说明:
- 只有桥服务活着
- EDA 没接上
- 不能真正控制画板
35. 如果 /execute 调用失败
常见原因:
排查顺序建议:
return 123;
return await eda.dmt_Project.getCurrentProjectInfo();
return await eda.dmt_Pcb.getCurrentPcbInfo();
36. 如果生成脚本执行了但板子不对
优先检查:
特别注意:
脚本中删除的是:
- Pad
- Line
- String
如果你的目标 PCB 里还有别的类型图元,脚本不会自动处理。
37. 如果 DRC 不是 0
不要自欺欺人。
只要 DRC 不为 0,就说明你的复现不是最终成功版。
优先检查这些连线:
原则:
- 电源总线与地总线不要挤在同一水平走廊
- 需要让连接线有明确避让
- 通过 DRC 才算完成
38. 为什么这套方法是真接管,不是伪自动化
因为你不是在让 AI 输出一段“建议”,而是在执行真实 API:
- eda.dmt_Project.getCurrentProjectInfo()
- eda.dmt_Pcb.getCurrentPcbInfo()
- eda.pcb_PrimitivePad.create()
- eda.pcb_PrimitiveLine.create()
- eda.pcb_PrimitiveString.create()
- eda.pcb_Document.save()
- eda.pcb_Drc.check()
这些 API 都是在嘉立创EDA Pro 进程里实际执行的。
所以只要桥接在线,Codex 就不是“看着你画”,而是在“代你操作 EDA 内核能力”。
39. 一套最短复现流程
如果你已经有基础,不想看长文,按这个最短流程做:
40. 一套最稳妥复现流程
如果你第一次做,按这个顺序,不要跳:
41. 你应该保留哪些文件
建议保留以下文件,后续直接复用:
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\generate-stm32-bluepill-study-base.js
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\verify-stm32-bluepill-study-base.js
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\verify-easyeda-connection.ps1
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\verify-stm32-bluepill-study-base.json
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\easyeda-bluepill-study-base-render.png
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\easyeda-integration-proof-2026-05-28.md
- C:\\Users\\李天乐\\Documents\\Codex\\2026-05-28\\codex-ai-eda\\stm32-bluepill-study-base-proof-2026-05-28.md
42. 你后续如何扩展这套系统
当你把本篇复现通后,后续可以继续做:
但前提永远是:
- 桥服务通
- EDA 窗口通
- 当前 API 真能执行
43. 本文最重要的结论
你真正要复现的不是某一张板子,而是这条能力链:
Codex -> MCP -> EasyEDA Bridge -> Run API Gateway -> 嘉立创EDA Pro API -> 实际 PCB 操作
只要这条链是活的,Codex 就可以:
- 读工程
- 读 PCB
- 画焊盘
- 画走线
- 加丝印
- 保存
- 校验
- 跑 DRC
这就叫可用的“自主画 PCB”能力。
44. 复现完成的判定标准
只有同时满足下面全部条件,才算你从零复现成功:
少一条都不算完整复现。
45. 本文结束前的最后提醒
三件事必须记住:
做不到这三条,就不要说自己“完全复现”了。

