你可以将下面的提示词复制给你的 Codex 或其它惯用的 AI 编程助手,让它代你实现该功能(参考文档《使用 Agent 新增mcp工具:串口指令》)
帮我实现一个串口指令的端侧mcp功能:
目标:
当你通过串口板向 Arcs-mini PA05 发送信息 “xxx”, Arcs-mini 会通过 PA04 原样输出
当你说出“串口发送 xxx 时”,Arcs-mini 的可扩展接口 (PA04) 通过串口输出 “xxx”
完成后,直接帮我编译烧录。
帮我实现一个串口指令的端侧mcp功能:
目标:
当你通过串口板向 Arcs-mini3 PB07 发送信息 “xxx”, Arcs-mini3 会通过 PB06 原样输出
当你说出“串口发送 xxx 时”,Arcs-mini 的可扩展接口 (PB06) 通过串口输出 “xxx”
完成后,直接帮我编译烧录。
本文是一篇实战教程,旨在引导你通过自定义 MCP(Model Context Protocol)工具,结合语音指令控制硬件设备。我们将以 Arcs-mini 开发板为例,展示如何通过语音触发串口通信,最终在扩展 GPIO 接口输出串口信息。
无论你是物联网开发者、嵌入式爱好者,还是希望将语音交互能力接入硬件项目的创客,本教程都将带你一步步实现一个完整的 “语音—串口—GPIO” 软硬件联动示例。
你将学习到如何配置 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更新,防止云端更新把刚烧录的固件刷掉了。
| 硬件型号 | 图片 | 购买链接 |
|---|---|---|
FT232芯片串口板 |
![]() |
购买链接 |
| Arcs-Mini2 | USB 转串口模块 | 当前用途 | 说明 |
|---|---|---|---|
PA04 |
RX |
UART1 TX | 开发板发送端接串口模块接收端,Function 3 |
PA05 |
TX |
UART1 RX | 开发板接收端接串口模块发送端,Function 3 |
GND |
GND |
公共地 | 两端必须共地 |

| Arcs-Mini3 | USB 转串口模块 | 当前用途 | 说明 |
|---|---|---|---|
PB06 |
RX |
UART2 TX | 开发板发送端接串口模块接收端,Function 4 |
PB07 |
TX |
UART2 RX | 开发板接收端接串口模块发送端,Function 4 |
GND |
GND |
公共地 | 两端必须共地 |

如果您不想重新编译代码而希望直接体验本固件,可点击下载。
代码仓库:https://cloud.listenai.com/CSKG532016/arcs_mini_sample/-/tree/sample/uart
固件下载:
Arcs-mini2 固件下载:arcs-mini-v3.0.2-m3-uart.lpk
Arcs-mini3 固件下载:arcs-mini3-v3.0.2-m3-uart.lpk
可参考文档《Arcs-Mini 固件烧录教程(ADB工具)》进行烧录。
烧录后,唤醒小聆,然后说 "串口发送xxx" 就可以通过语音调用刚才编写的工具函数了

当前 sample/uart 分支通过同一套业务接口兼容两种板型,对外 MCP 工具名保持为 uart1_send:
| 板型 | 驱动实例 | TX | RX | Pinmux Function |
|---|---|---|---|---|
Arcs-Mini2(arcs_mini) |
uart1 |
PA04 |
PA05 |
3 |
Arcs-Mini3(arcs_mini3) |
uart2 |
PB06 |
PB07 |
4 |
串口服务位于:
apps/arcs-mini/services/service_uart1.capps/arcs-mini/services/service_uart1.h并在 apps/arcs-mini/services/CMakeLists.txt 中加入 service_uart1.c。虽然文件名沿用 uart1,但 Mini3 编译时实际使用 UART2。
代码通过 CONFIG_BOARD_ARCS_MINI3 选择设备实例和 pinmux:
#ifdef CONFIG_BOARD_ARCS_MINI3
#define UART_DEVICE "uart2"
#define UART_TX_PAD CSK_IOMUX_PAD_B
#define UART_TX_PIN 6U
#define UART_RX_PAD CSK_IOMUX_PAD_B
#define UART_RX_PIN 7U
#define UART_FUNC CSK_IOMUX_FUNC_ALTER4
#define UART_PINMUX_FN lisa_uart2_pinmux
#else
#define UART_DEVICE "uart1"
#define UART_TX_PAD CSK_IOMUX_PAD_A
#define UART_TX_PIN 4U
#define UART_RX_PAD CSK_IOMUX_PAD_A
#define UART_RX_PIN 5U
#define UART_FUNC CSK_IOMUX_FUNC_ALTER3
#define UART_PINMUX_FN lisa_uart1_pinmux
#endif
初始化时通过 lisa_device_get(UART_DEVICE) 获取对应 LISA UART 设备,再配置 2 个、每个 256 字节的循环接收缓冲区并开启 RX。
接收任务阻塞调用 lisa_uart_read_sync();收到数据后调用 service_uart1_send() 原样回发。如果驱动报告 LISA_DEVICE_ERR_OVERFLOW,必须按驱动约定重启接收,否则会持续返回溢出错误:
int r = lisa_uart_read_sync(uart_dev, buf, sizeof(buf));
if (r > 0) {
service_uart1_send(buf, (uint32_t)r);
} else if (r == LISA_DEVICE_ERR_OVERFLOW) {
lisa_uart_rx_disable(uart_dev);
lisa_uart_rx_enable(uart_dev);
}
MCP 工具位于 apps/arcs-mini/mcp-tools/mcp_tool_uart1.c,在对应 CMakeLists.txt 中参与编译。工具只接收一个必填字符串参数 content,调用 service_uart1_send() 发送文本:
MCP_TOOL_DEFINE(uart1_send, mcp_tool_uart1_list, mcp_tool_uart1_call);
Mini2 的工具描述显示 UART1 PA04/PA05,Mini3 的描述显示 UART2 PB06/PB07;工具注册名保持 uart1_send,避免破坏已有云端编排。
.\build.ps1 -S .\apps\arcs-mini -B build-uart-mini -DBOARD=arcs_mini
.\build.ps1 -S .\apps\arcs-mini -B build-uart-mini3 -DBOARD=arcs_mini3
两个板型均应成功生成 arcs-mini.bin、LPK 和 combined HEX。实际接线时,串口模块 TX 要接开发板 RX,串口模块 RX 要接开发板 TX,并共地。