你可以将下面的提示词复制给 Codex 或其它惯用的 AI 编程助手,让它代你实现该功能:
帮我实现一个通过 PCA5685 驱动 MG90S-360° 舵机的端侧 MCP 功能:
- 使用 Arcs-mini 的 I2C0(PA04/PA05)控制 PCA5685;
- 通过 PCA5685 输出 PWM,支持控制舵机旋转和停止;
- 注册一个可供语音调用的端侧 MCP 工具。
请基于 mini-v3.0.2-m3 完成代码修改,并帮我编译烧录。
帮我实现一个通过 PCA5685 驱动 MG90S-360° 舵机的端侧 MCP 功能:
- 使用 Arcs-mini 的 I2C0(PB06/PB07)控制 PCA5685;
- 通过 PCA5685 输出 PWM,支持控制舵机旋转和停止;
- 注册一个可供语音调用的端侧 MCP 工具。
请基于 mini-v3.0.2-m3 完成代码修改,并帮我编译烧录。
本文是一篇实战教程,旨在引导你通过自定义 MCP(Model Context Protocol)工具,结合语音指令控制硬件设备。我们将以 Arcs-mini 开发板为例实现一些 mcp 工具。
实操之前,请确保已根据文档《Arcs-Mini 开发环境搭建指南》 搭建开发环境。
本篇示例源码基于 3.0.2-m3 版本的 SDK。
可通过命令git log查看版本,如果版本不一致,请使用命令git checkout mini-v3.0.2-m3切到指定 SDK 版本。
参考文档《烧录工具安装教程》安装ADB工具
执行命令adb shell kv set int user.disable_app_update 1关闭云端OTA更新,防止云端更新把刚烧录的固件刷掉了。
通过舵机驱动板微雪 Servo Driver for micro:bit (IC为PCA5685)可以让Arcs-mini控制更多电机,PCA5685能够同时控制16路舵机,具体介绍可参考:这篇文档
| 硬件型号 | 图片 | 购买链接 |
|---|---|---|
舵机驱动板微雪 Servo Driver for micro:bit (IC为PCA5685) |
![]() |
购买链接 |
MG90S-360°舵机 |
![]() |
购买链接 |
一公二母type-c转接头 |
![]() |
购买链接 |
type-c公头转2pin端子 |
![]() |
购买链接 |
| Arcs-Mini2 | PCA5685 | 当前用途 | 说明 |
|---|---|---|---|
PA04 |
SCL |
I2C0 时钟 | Function 8 |
PA05 |
SDA |
I2C0 数据 | Function 8 |

| Arcs-Mini3 | PCA5685 | 当前用途 | 说明 |
|---|---|---|---|
PB07 |
SCL |
I2C0 时钟 | Function 8,会覆盖 UART2 RX |
PB06 |
SDA |
I2C0 数据 | Function 8,会覆盖 UART2 TX |

如果您不想重新编译代码而希望直接体验本固件,可点击下载。
代码仓库: https://cloud.listenai.com/CSKG532016/arcs_mini_sample/-/tree/sample/i2c_pca5685
固件下载:
Arcs-mini2 固件下载:arcs-mini3-v3.0.2-m3-i2c-pca5685.lpk
Arcs-mini3 固件下载:arcs-mini-v3.0.2-m3-i2c-pca5685.lpk
可参考文档《Arcs-Mini 固件烧录教程(ADB工具)》进行烧录。
烧录后,唤醒小聆,然后说 "舵机顺时针旋转" ,电机开始转动就成功了
当前 sample/pca5685 分支使用同一套 PCA5685 服务兼容两个板型,对外 MCP 工具名保持为 pca5685_control:
| 板型 | I2C 实例 | SDA | SCL | Pinmux Function |
|---|---|---|---|---|
Arcs-Mini2(arcs_mini) |
I2C0 |
PA05 |
PA04 |
8 |
Arcs-Mini3(arcs_mini3) |
I2C0 |
PB06 |
PB07 |
8 |
Mini3 的 PB06/PB07 在默认板级配置中用于 UART2。本示例初始化 PCA5685 时会把这两个引脚重新配置为 I2C0,因此不能同时使用外部 UART2。
PCA5685 服务位于:
apps/arcs-mini/services/service_pca5685.capps/arcs-mini/services/service_pca5685.h服务在 apps/arcs-mini/services/CMakeLists.txt 中参与编译,并提供初始化、顺时针旋转、逆时针旋转和停止接口。应用启动时由 apps/arcs-mini/main.c 调用 service_pca5685_init()。
Mini2 保持原来的 PA05/PA04,Mini3 使用 PB06/PB07:
#define PCA5685_I2C_ADDR 0x40U
#define PCA5685_I2C_FUNC CSK_IOMUX_FUNC_ALTER8
#ifdef CONFIG_BOARD_ARCS_MINI3
#define PCA5685_I2C_PAD CSK_IOMUX_PAD_B
#define PCA5685_I2C_SDA_PIN 6U
#define PCA5685_I2C_SCL_PIN 7U
#define PCA5685_I2C_SDA_NAME "PB06"
#define PCA5685_I2C_SCL_NAME "PB07"
#else
#define PCA5685_I2C_PAD CSK_IOMUX_PAD_A
#define PCA5685_I2C_SDA_PIN 5U
#define PCA5685_I2C_SCL_PIN 4U
#define PCA5685_I2C_SDA_NAME "PA05"
#define PCA5685_I2C_SCL_NAME "PA04"
#endif
初始化时显式覆盖目标引脚的 pinmux,并通过 I2C0() 获取控制器:
IOMuxManager_PinConfigure(PCA5685_I2C_PAD,
PCA5685_I2C_SDA_PIN, PCA5685_I2C_FUNC);
IOMuxManager_PinConfigure(PCA5685_I2C_PAD,
PCA5685_I2C_SCL_PIN, PCA5685_I2C_FUNC);
s_i2c_dev = I2C0();
PCA5685 默认 I2C 地址为 0x40。服务按芯片初始化流程设置 MODE 寄存器和预分频值,把 16 路输出配置为约 50Hz PWM,并在启动时将所有通道设置为停止脉宽。
服务把纳秒脉宽换算为 PCA5685 的 12 位计数值,再写入对应通道的 LEDn_ON/LEDn_OFF 寄存器。所有 I2C 访问通过互斥锁串行化,避免多个任务同时控制舵机时破坏总线时序。
MCP 工具位于 apps/arcs-mini/mcp-tools/mcp_tool_pca5685.c,支持两个必填参数:
direction:cw、ccw 或 stop。servo_id:PCA5685 通道号,范围 0~15。MCP_TOOL_DEFINE(pca5685_control,
pca5685_control_list,
pca5685_control_call);
工具描述会根据板型显示 Mini2 的 PA05/PA04 或 Mini3 的 PB06/PB07,但注册名保持不变。
.\build.ps1 -S .\apps\arcs-mini -B build-pca5685-mini -DBOARD=arcs_mini
.\build.ps1 -S .\apps\arcs-mini -B build-pca5685-mini3 -DBOARD=arcs_mini3
两个板型均应生成 arcs-mini.bin、LPK、OTA 和 combined HEX。实板接线时,舵机电源建议独立供电,并务必与开发板和 PCA5685 共地。