DFRobot Arduino → MakeCode(PXT)扩展
将已有 Arduino 库(.h / .cpp)生成 pxt-DFRobot_XXX/。细则见 conventions.md。
模式选择(I2C 门禁之后立即判定)
| 条件 | MODE | 积木面行为 |
|---|---|---|
用户 @ 了需求书,或目标仓库根存在 makecode-requirements.md |
requirements |
以需求书为应用层唯一规格;只生成白名单积木及其传递依赖 |
| 无需求书 | full |
全部 I2C 兼容 public API → 公开 //% block(默认) |
显式 @ 附件优先于默认文件名。模板见 makecode-requirements-template.md;完整样例见 makecode-requirements-example-HumanPose.md。
requirements 硬规则:
- 未列入需求书白名单的 public API:不生成公开积木,也不默认生成隐藏 API
- 仅被多个公开积木复用的必要函数,才允许
blockHidden=true/ 内部 helper - 缺必填项、引用不存在的 Arduino API、或与 I2C/协议硬约束冲突 → 停止索要,不静默回退
full - 协议层始终跟当前
.cpp;需求书不得虚构 CMD / 帧 / 线值
硬门禁(第一步,必须先做)
先确认能否支持 I2C。只有 USART → 结束,不生成文件。
判定(看 .h / .cpp 用到的总线,不凭 readReg 函数名):
| 结论 | 线索 | 动作 |
|---|---|---|
| 有 I2C | TwoWire / Wire / begin(TwoWire / I2C 地址宏 |
继续;MakeCode 只做 I2C |
| 只有 USART | 仅 Stream / HardwareSerial / SoftwareSerial / Serial,无 I2C |
停止。告知:需要 I2C,本库仅 USART,不生成任何文件 |
同时有 UART + I2C:继续,不移植 UART。
工作流
- [ ] 0. I2C 门禁(不通过则结束)
- [ ] 1. 判定 MODE:有需求书 → requirements;否则 full
- [ ] 2. requirements:读全文;输出「需求能力 → 拟积木」表;不足则停止
- [ ] 3. 盘点 public API、CMD、I2C 地址、协议帧(两种 MODE 都做)
- [ ] 4. 创建/更新 pxt-DFRobot_XXX/(pxt.json、protocol/app .ts、_locales、README、test.ts)
- [ ] 5. 协议层从当前 .cpp 直译;总线用 pins.i2cWriteBuffer / i2cReadBuffer
- [ ] 6. 积木层:
requirements → 仅白名单公开;分组/weight/参数/结果按需求书;必要处 blockHidden
full → 全部 I2C 兼容 public API → //% block;命名见 conventions
- [ ] 7. locales:公开积木覆盖;**`en` + `zh-cn` 始终生成并列入 `files`**;`zh-tw` 仅 §6 勾选「是」时才生成;生成的每种语言目录与 json **必须真实落盘**
- [ ] 8. README / `test.ts`:按 conventions 生成(需求书不写示例与测试);README Basic usage 与 `test.ts` 只调用白名单公开积木;full 则 i2cInit + 1~2 典型积木;README 须含 `Supported targets` / `PXT/microbit`
- [ ] 9. **交付前自检(硬)**:逐项核验 `pxt.json` → `files` 每个路径在磁盘存在;**不得多列**不存在的 locale/源码;`files` 合计尽量小于约 64KB(超限则把 `DESIGN.md` / 非必需 md 移出 `files`,仓库可保留)
- [ ] 10. 对照 [checklist.md](checklist.md);汇报 MODE、对照表、文件列表;确认可用 GitHub URL 作扩展导入
不改 Arduino src/。已有 pxt-* 则 diff 补缺,禁止 git 恢复旧扩展覆盖协议。
GitHub / MakeCode 导入
扩展要能被 MakeCode「从网址添加扩展」导入,仓库须满足:
- 仓库根目录有
pxt.json(独立扩展仓,如pxt-DFRobot_XXX) pxt.jsonfiles与仓库文件 一一对应:缺文件或列了不存在的路径 → 导入失败supportedTargets含microbit;README 保留Supported targets/PXT/microbit- 导入 URL 形如
https://github.com/<owner>/pxt-DFRobot_XXX(带不带.git均可) - Arduino 主库与 MakeCode 扩展宜分仓;不要把扩展埋在无根
pxt.json的 Arduino 仓里再指望整仓 URL 导入
交付
pxt-DFRobot_XXX/文件列表、I2C 判定依据、MODEfull:API↔积木对照requirements:需求项→实际积木/内部依赖对照、省略项核对test.ts最小示例- 已做
pxt.json↔磁盘存在性自检;可说明 GitHub 导入 URL(若已推送)