你可以将下面的提示词复制给 Codex 或其它惯用的 AI 编程助手,让它代你实现该功能:
帮我实现一个 AHT10 温湿度计的端侧 MCP 功能:
- 使用 Arcs-mini 的 I2C0,PA04 接 SCL、PA05 接 SDA;
- 读取 AHT10 的温度和湿度;
- 注册一个可供语音调用的端侧 MCP 工具。
请基于 mini-v3.0.2-m3 完成代码修改,并帮我编译烧录。
帮我实现一个 AHT10 温湿度计的端侧 MCP 功能:
- 使用 Arcs-mini 的 I2C0,PB07 接 SCL、PB06 接 SDA;
- 读取 AHT10 的温度和湿度;
- 注册一个可供语音调用的端侧 MCP 工具。
请基于 mini-v3.0.2-m3 完成代码修改,并帮我编译烧录。
本文是一篇实战教程,旨在引导您通过自定义 MCP(Model Context Protocol) 工具,结合语音指令控制硬件设备,实现智能环境监测。
我们将以 Arcs-mini 开发板为核心,展示如何通过语音触发 I2C 通信,驱动外接温湿度传感器,并实时返回环境数据。
无论您是物联网开发者、嵌入式爱好者,还是希望将语音交互能力融入硬件项目的创客,本教程都将带您一步步构建一个完整的“语音—I2C—传感器数据”软硬件联动系统。您将学习到如何配置 MCP 工具、编写 I2C 传感器驱动,并实现从语音指令到实时数据采集的无缝交互。
实操之前,请确保已根据文档《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更新,防止云端更新把刚烧录的固件刷掉了。
使用的温湿度传感器是 AHT10 ,参考手册下载链接:ASAIR-AHT10.pdf
| Arcs-Mini2 | AHT10 | 当前用途 | 说明 |
|---|---|---|---|
PA02 |
VIN |
传感器供电 | 沿用教程现有扩展口供电接法 |
PA03 |
GND |
公共地 | 与开发板共地 |
PA04 |
SCL |
I2C0 时钟 | Function 8 |
PA05 |
SDA |
I2C0 数据 | Function 8 |

| Arcs-Mini3 | AHT10 | 当前用途 | 说明 |
|---|---|---|---|
5V |
/ | 传感器供电 | 不直接接入传感器,接入降压模块,然后模块给传感器提供3.3V |
GND |
GND |
公共地 | 与开发板共地 |
PB06 |
SDA |
I2C0 数据 | Function 8,会覆盖 UART2 TX |
PB07 |
SCL |
I2C0 时钟 | Function 8,会覆盖 UART2 RX |
PB06/PB07 与 Mini3 的外部 UART2 复用,启用本示例后不能同时作为 UART2 使用。

如果您不想重新编译代码而希望直接体验本固件,可点击下载。
代码仓库: https://cloud.listenai.com/CSKG532016/arcs_mini_sample/-/tree/sample/i2c_aht10
固件下载:
Arcs-mini2 固件下载:arcs-mini-v3.0.2-m3-i2c-aht10.lpk
Arcs-mini3 固件下载:arcs-mini3-v3.0.2-m3-i2c-aht10.lpk
可参考文档《Arcs-Mini 固件烧录教程(ADB工具)》进行烧录。
烧录后,唤醒小聆,然后说 "环境温度湿度多少?" ,小聆回复环境温度就成功了
5d61d5770f3200cfbba3e5978e6420de.mp4
当前 sample/i2c_aht10 分支使用同一套 AHT10 服务兼容两个板型,对外 MCP 工具名保持为 sensor_temperature_humidity:
| 板型 | 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。本示例初始化 AHT10 时会把这两个引脚重新配置为 I2C0,因此不能同时使用外部 UART2。
AHT10 服务位于:
apps/arcs-mini/services/service_aht10.capps/arcs-mini/services/service_aht10.h服务文件在 apps/arcs-mini/services/CMakeLists.txt 中参与编译,提供以下三个接口:
int service_aht10_init(void);
int service_aht10_read_data(float *humidity, float *temperature);
int service_aht10_get_temperature_humidity(float *humidity, float *temperature);
应用启动时由 apps/arcs-mini/main.c 调用 service_aht10_init(),完成引脚复用、I2C0 初始化和 AHT10 上电等待。
服务通过 CONFIG_BOARD_ARCS_MINI3 选择引脚,Mini2 原有功能保持不变,Mini3 改用 PB06/PB07:
#ifdef CONFIG_BOARD_ARCS_MINI3
#define SERVICE_AHT10_I2C_PAD CSK_IOMUX_PAD_B
#define SERVICE_AHT10_SDA_PIN (6U)
#define SERVICE_AHT10_SCL_PIN (7U)
#define SERVICE_AHT10_SDA_NAME "PB06"
#define SERVICE_AHT10_SCL_NAME "PB07"
#else
#define SERVICE_AHT10_I2C_PAD CSK_IOMUX_PAD_A
#define SERVICE_AHT10_SDA_PIN (5U)
#define SERVICE_AHT10_SCL_PIN (4U)
#define SERVICE_AHT10_SDA_NAME "PA05"
#define SERVICE_AHT10_SCL_NAME "PA04"
#endif
#define SERVICE_AHT10_I2C_FUNC CSK_IOMUX_FUNC_ALTER8
初始化时显式覆盖目标引脚的 pinmux,然后获取 I2C0 驱动实例:
IOMuxManager_PinConfigure(SERVICE_AHT10_I2C_PAD,
SERVICE_AHT10_SDA_PIN, SERVICE_AHT10_I2C_FUNC);
IOMuxManager_PinConfigure(SERVICE_AHT10_I2C_PAD,
SERVICE_AHT10_SCL_PIN, SERVICE_AHT10_I2C_FUNC);
g_i2c_dev = I2C0();
I2C_Initialize(g_i2c_dev, aht10_i2c_cb, NULL);
I2C_PowerControl(g_i2c_dev, CSK_POWER_FULL);
I2C_Control(g_i2c_dev, CSK_I2C_TRANSMIT_MODE, 0);
I2C_Control(g_i2c_dev, CSK_I2C_BUS_SPEED, CSK_I2C_BUS_SPEED_STANDARD);
I2C_Control(g_i2c_dev, CSK_I2C_BUS_CLEAR, 0);
AHT10 默认 7 位地址为 0x38。服务使用异步 I2C 回调记录传输事件,并在每次读写后等待完成:
E1 08 00。AC 33 00。uint32_t raw_humi = ((uint32_t)data[1] << 12)
| ((uint32_t)data[2] << 4)
| ((data[3] & 0xF0) >> 4);
*humidity = (float)raw_humi * 100.0f / 1048576.0f;
uint32_t raw_temp = ((uint32_t)(data[3] & 0x0F) << 16)
| ((uint32_t)data[4] << 8)
| data[5];
*temperature = (float)raw_temp * 200.0f / 1048576.0f - 50.0f;
apps/arcs-mini/button/app_button.c 在电源键四击事件中调用 service_aht10_get_temperature_humidity(),读取成功后通过日志打印温度和湿度。该入口适合在接入云端 MCP 前先验证传感器接线和 I2C 通信。
MCP 工具位于 apps/arcs-mini/mcp-tools/mcp_tool_aht10.c,并在对应 CMakeLists.txt 中参与编译。该工具没有输入参数,调用时直接读取传感器:
MCP_TOOL_DEFINE(sensor_temperature_humidity,
mcp_tool_aht10_list,
mcp_tool_aht10_call);
工具返回文本格式为“当前环境温度为 xx.x°C,湿度为 xx.x%”。读取失败时返回 isError=true,提示检查传感器连接。工具描述会根据目标板型显示实际 I2C 引脚,但注册名保持不变,避免破坏已有云端编排。
.\build.ps1 -S .\apps\arcs-mini -B build-aht10-mini -DBOARD=arcs_mini
.\build.ps1 -S .\apps\arcs-mini -B build-aht10-mini3 -DBOARD=arcs_mini3
两个板型均应成功生成 arcs-mini.bin、LPK、OTA 和 combined HEX。实板验证时,先确认 AHT10 供电和共地,再通过电源键四击或语音指令“环境温度湿度多少”触发读取。