# Arduino To Rpi Dfrobot

> 将 DFRobot Arduino 传感器库（.h/.cpp/.ino）移植为树莓派 Python 库。 当用户只有 Arduino 库、需要封装 raspberrypi 库、移植到树莓派、 或提到 DFRobot Python/raspberrypi 时使用。

- Skill: `jiaziui/arduino-to-rpi-dfrobot` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add jiaziui/arduino-to-rpi-dfrobot`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jiaziui/arduino-to-rpi-dfrobot/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jiaziui (https://skillmd.com/u/jiaziui)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/jiaziui/arduino-to-rpi-dfrobot

---


# DFRobot Arduino → 树莓派 Python 库移植

将仅有 Arduino 实现的 DFRobot 库生成 `python/raspberrypi/`。命名、类结构、示例模板见 [conventions.md](conventions.md)。**不同步** Arduino 注释/排版格式。

## 前置

- [ ] 有 `.h` / `.cpp` 与 `examples/*.ino`
- [ ] **禁止** git 恢复已有 `python/raspberrypi/`；已存在则 diff 补缺
- [ ] 确认串口（默认 `/dev/ttyAMA0`）或 I2C 参数

## 工作流

1. 从 `.h` 盘点 public API、通信模式、类结构（看总线类，不看 `readReg` 函数名）。**仅当** `#include "DFRobot_RTU.h"` 或继承 `DFRobot_RTU` 时，加载 [references/modbus-rtu/conventions.md](references/modbus-rtu/conventions.md) 并按该文件执行；否则 **不要** 打开 `references/modbus-rtu/`
2. 列出本库实际存在的 protected/private 底层方法
3. 建 `python/raspberrypi/`（`DFRobot_XXX.py`、README 中英、`examples/<snake_case>/`）
4. 常量/枚举 → 类属性；`struct` → `ctypes.Structure`
5. 按 [conventions.md](conventions.md) 移植类：库内建总线；多接口派生覆写 `_read_reg` / `_write_reg`（若第 1 步已加载 Modbus 参考，则按该参考，勿自写 RTU）
6. 每个 `.ino` → 一个 `.py`（`setup`/`loop`；用 `__file__` 三级 `dirname` 把 `python/raspberrypi/` 加入 `sys.path`，**禁止**仅用 CWD 相对 `'../../'`）
7. 写 README；对照 [checklist.md](checklist.md)；删除 `__pycache__`

**类**：跟随 Arduino `.h`。多接口基类按 `I2C_MODE`/`UART_MODE` 创建 `SMBus` 或 `Serial("/dev/ttyAMA0")`；I2C 派生 `(bus, addr)`，UART 派生 `(baud, addr)`。UART 读写跟当前 `.cpp`，**勿一律套 Modbus**。

**示例**：不移植 `COMM_*` / SoftSerial / micro:bit `#error` / ASCII 接线表。多接口用 `ctype`（`0` = I2C，其它 = UART），只传总线号 / 波特率 / 地址。

## 注意

- 协议以**当前** `.cpp` 为准；不发明源库没有的底层函数；不改 `src/`
- 禁止：单类扩成多接口、GPIO 当主接口、示例注入 `Serial`/`SMBus`、按接口复制示例、把 Arduino 格式套到 Python

交付前删除 `python/raspberrypi/` 下 `__pycache__/`、`*.pyc`。汇报：文件列表、API 对照、通信模式、示例对应、实机验证建议。

