{"code":1,"msg":"成功","time":"1793358313","data":{"title":"[2026嵌入式大赛] 基于端侧 Agent 内核的多传感设备信息融合监测系统","content":"# [2026嵌入式大赛] 基于端侧 Agent 内核的多传感设备信息融合监测系统\r\n\r\n[TOC]\r\n\r\n## 项目介绍\r\n\r\n本项目面向物联网边缘监测场景，搭建一套**分布式传感采集、MQTT 消息汇聚、端侧多源信息融合、智能识别决策、LVGL 人机可视化交互**的轻量化物联网 Agent 监测系统。系统将多传感数据融合、异常研判与智能决策下沉至边缘端侧，同时依托 LVGL 图形组件实现本地数据看板、告警展示与参数配置。\r\n\r\n> 节点分布\r\n\r\n![screenshot_多设备信息融合示意图.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/ec1a4b7e797701da2cd03c0cfb4015cd.png)\r\n\r\n## 架构介绍\r\n\r\n\r\n### 硬件架构介绍\r\n\r\n#### 介绍\r\n> Edgi-Talk 开发板基于 PSoC™ E84 MCU,为工程师提供了一个灵活、全面的开发平台。板上集成了丰富的外设接口和示例模块，助力开发者快速完成多传感器、显示和通信应用的开发。\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/6efccb8383a32fc9a655ddb314c4f747.png.webp)\r\n\r\n#### 包装\r\n\r\n![screenshot_a69fbc8aecb8d46a92a6de85309663d6.jpg](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/b465bdd97063782bd93e6aab71d1cd4b.jpg.webp)\r\n\r\n![screenshot_4caad935447e55ef3e9ba0bdfc9bc5d9.jpg](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/372f0e72c03757330e69aec1736e75ac.jpg.webp)\r\n\r\n#### 外观\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/8fcec54a56f90538f0b1b368ded22cdf.png.webp)\r\n\r\n#### 资源分布\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/89055abf73a13fb608faea8c41bf3108.png.webp)\r\n\r\n#### 关键特性\r\n\r\nCortex ® -M55 CPU，搭载 Helium ™ DSP\r\n低功耗 Cortex ® -M33，带 DSP\r\n采用 Arm Ethos-U55 NPU 的高级机器学习\r\nNN Lite，适用于低功耗 Always-On ML\r\n高达 6MB SRAM，适用于下一代应用\r\n超低功耗 RRAM 技术\r\n丰富的外设组合，减少 BOM\r\n低功耗 2.5D GPU 和接口\r\nModusToolbox ™软件支持\r\n采用 DEEPCRAFT™ 的端到端机器学习解决方案\r\n最先进的安全区域\r\n英飞凌边缘保护技术\r\n\r\n### 软件架构介绍\r\n\r\n#### 整体软件架构如下\r\n\r\n整套软件运行在 RT-Thread 5.0.2 上，严格按照图中六层自上而下划分：**应用层、Agent 内核、工具与通道、网络协议栈、内核与 BSP、外部服务**。上层调用下层接口，下层通过注册到上层的 ops 表完成回调；跨层数据交互统一使用 mailbox 和消息队列。图中右侧为横切关注点，贯穿全部六层，不属于任意单一层级。\r\n\r\n1. **应用层**\r\n对应工程 `applications\/` 目录下的 LVGL 页面与系统启动编排逻辑。一共包含七个页面：开机进度覆盖层 `lv_boot`、首页仪表盘 `lv_home`、传感器详情折线页 `lv_sensors`、AI 聊天页 `lv_home_agent`、订阅话题管理页 `lv_topic_manager`、添加话题表单 `lv_sensor_add`、Wi-Fi 配网页 `lv_wifi_settings`。\r\n`board_init.c` 单独创建线程负责启动编排：依次初始化 LCD、启动 LVGL、连接 Wi‑Fi、SNTP 对时、拉起 Agent 内核。\r\n所有界面渲染操作仅在 LVGL 线程内执行，该线程栈大小 24 KB，优先级 21。其余业务线程不直接操作 GUI 控件，仅修改普通变量或者向 mailbox 投递消息，由 UI 定时器统一拉取更新。数据读取入口为 `mqtt_tool_topic_latest()`：首页卡片 500 ms 刷新一次，详情页 1 s 轮询一次；本地维护 300 点环形缓冲区（1 Hz 采样，对应 5 分钟窗口），MIN\/MAX\/AVG 与趋势指标由 `recompute_stats()` 实时计算。聊天页同时作为 Agent 的 LVGL 交互通道，用户输入直接投递至 Agent 输入 mailbox，模型回复由 UI 定时器从输出 mailbox 读取展示。\r\n\r\n2. **Agent 内核**\r\n源码位于 `packages\/Agent-latest\/src\/`，属于上游独立软件包，本工程以只读方式引入。内核运行一条 `AgentLoop` 线程（栈 10240 B，优先级 10），串行处理请求，同一时刻仅执行一轮对话任务。\r\n`MessageHub` 封装输入、输出两组 mailbox，队列深度均为 10，发送采用非阻塞模式；队列满时丢弃消息并打印警告日志。`main_loop()` 取出消息后，`agent_loop()` 在单次对话内可多次调用工具：一轮对话最多向大模型发起 6 次请求，同一个工具在一轮内最多执行 3 次，参数签名完全重复的调用会直接跳过。`chat()` 通过 webclient 发起 HTTPS POST 请求，逐字节解析 SSE 流式返回结果。会话上下文 `context` 保存历史对话，每轮结束裁剪至保留 16 条消息，system prompt 固定保留。`tool_base` 维护全局工具链表，`tool_func` 完成工具注册装配；`AgentConfig` 支持运行时动态覆盖模型名称、API 地址与密钥。\r\n分工明确：**意图理解、多源融合研判、告警文案生成由远端大模型负责**；本端 Agent 内核只承担消息路由、工具调度调用、结果回灌的工作。界面状态灯的 `READY \/ THINKING` 状态，通过读取内核忙标志 `agent_is_busy()` 同步。\r\n\r\n3. **工具与通道**\r\n工具是注册给大模型调用的功能单元，通道是消息进出 Agent 内核的接入接口。\r\n当前共注册 10 个工具：`add`、`mul`、`compare` 三个示例工具，外加 7 个 MQTT 业务工具（`mqtt_connect`、`mqtt_disconnect`、`mqtt_publish`、`mqtt_subscribe`、`mqtt_receive`、`mqtt_rule`、`mqtt_history`）。MQTT 工具集同时管理订阅表和时序缓存：支持 13 个订阅槽位、4 条阈值告警规则；每个话题保存最近 6 条历史采样，供给 `mqtt_history` 做趋势总结，另设置深度为 8 的滚动窗口，缓存来不及即时分析的数据。上报报文先经过门控过滤：`payload_looks_like_ask()` 识别咨询类消息，`rule_gate()` 根据 JSON 字段路径做阈值比对，边沿触发告警附带 60 s 冷却防抖。被门控拦截的报文不会丢弃，转入滚动窗口等待 `mqtt_receive` 按需读取。\r\n消息通道四选一：LVGL、CLI、Web、调试通道，由 `AgentChannels.h` 宏开关控制，本工程启用 LVGL 通道；包内仅提供头文件，ops 接口实例由应用层实现。语音能力同样归属本层：`AgentAudio` 完成 PDM 录音与播放控制，`wavplayer` 负责 WAV 解码播放；录音上传至文件服务器后交由 STT 服务转文字，识别文本注入 Agent。`simulated_sensor` 以 1 s 周期模拟发布 `device\/sensors` 话题，作为本地调试数据源。工具新增只需要实现标准注册接口，内核无需感知底层实现；NPU 推理、TTS 属于预留扩展能力，暂未落地。\r\n\r\n4. **网络协议栈**\r\n全部基于 RT-Thread 组件生态搭建：`wifi-host-driver` 适配 CYW55500 Wi-Fi 6 芯片，SAL 与 netdev 提供 Socket 抽象层，lwIP 2.1.2 作为 TCP\/IP 协议栈，paho-mqtt 采用 pipe 版本移植，webclient 2.2.0 负责 HTTP (S) 请求，mbed TLS 2.28.1 提供 TLS 加密与根证书校验；DFS+FAL 组件管理文件系统与 Flash 分区，finsh\/MSH 提供命令行调试入口。\r\nMQTT 连接、报文收发、保活运行在独立 `mqtt0` 线程（栈 8192 B，优先级 10），保活时长配置 60 s，实际 20 s 发送一次 PING 探活。订阅回调 `mqtt_sub_callback()` 仅做数据拷贝与入队，快速返回，避免阻塞探活流程。消息路由、门控校验、消息注入逻辑放置在 `mqtt_rx` 线程（栈 3072 B，优先级 15）；消息注入最小间隔 1 s，单次最多合并 5 条消息，Agent 繁忙时消息最长等待 180 s。\r\n\r\n5. **内核与 BSP**\r\nRT-Thread 内核提供线程调度、mailbox、消息队列、软件定时器、内存管理等基础能力，支持 32 级线程优先级，系统节拍 1000 Hz。板级支持包位于 `board\/` 和 `libraries\/`，固件主业务运行在 Cortex‑M55；Cortex‑M33 运行板载安全模板，负责拉起 M55 核，本工程不在 M33 上运行业务代码。\r\n已使用驱动：`drv_lcd` 依托 GFXSS + 双缓冲，通过 VGLite 后端将 480×800 竖屏面板渲染为 800×480 逻辑横画布；`drv_touch` 通过软 I2C 读取 ST7102 触摸芯片；`drv_i2s`、`drv_pdm` 对接 ES8388 音频 Codec 与数字麦克风；uart5 作为调试控制台串口；SDIO、HyperRAM 驱动提供存储与扩展内存。链接脚本 `link.ld` 划分 7 个存储段：ITCM 256 KB 存放代码，DTCM 256 KB 存放静态变量与栈，8 MB Flash 挂载 `\/flash` 文件系统，SOCMEM 用于代码与主堆，另有 256 KB 双核共享区、3 MB 显存。\r\n板载 Ethos‑U55 NPU 在当前固件版本暂未接入使用。\r\n\r\n6. **外部服务**\r\n包含四类远端服务：大模型接口（HTTPS 443 端口），提供工具调用与流式输出，系统所有研判结论、自然语言回复均由其生成；EMQX MQTT Broker（TCP 1883 端口），传感子节点发布数据至 Broker，本端订阅汇聚多路感知数据，同时可向外发布告警、控制指令；SNTP 服务（UDP 123 端口），用于开机时间同步；文件服务器，接收录音、多模态图片，转发给后端 STT 服务。\r\n传感子节点独立带 Wi‑Fi，直连 MQTT broker，不经过本主板转发。当前 Broker 采用明文 TCP + 账号密码鉴权，多节点规模化接入前，需要补齐 TLS 加密或者账号隔离方案。\r\n\r\n> 这是整套软件运行的架构\r\n\r\n![screenshot_agent-home-architecture.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/4b04ebd7b9b3bde2982a2a9ec532968e.png.webp)\r\n\r\n#### Agent 内核软件架构如下\r\n\r\n\r\n\r\n本项目的 Agent 内核引自上游独立软件包 `Agent-latest`，工程以只读方式引入，不修改内核源码。内核架构自上而下分为五层，与架构图分层一一对应：\r\n\r\n1. **交互通道层**：作为内核统一的消息出入口，预置 CLI（MSH 命令行）、WebNet（HTTP\/CGI）、Debug 调试通道、LVGL 交互通道四类接入方式。所有通道遵循同一套抽象 ops 接口，通过 `AgentChannels.h` 宏开关选择目标通道，主循环依托函数指针统一调度，避免零散的条件编译代码。本方案选用 LVGL 交互通道，内核包仅提供接口声明，接口实现由应用层 `lv_home_agent.c` 完成。\r\n\r\n2. **消息中心层**：由输入邮箱 `AgentInputMb`、输出邮箱 `AgentOutMb` 构成，两路邮箱队列深度均为 10。消息发送采用非阻塞机制，队列溢出时丢弃当前消息并输出告警日志；内存管理遵循明确所有权约定：消息经 `put_message` 入队后所有权转移，发送方不再负责内存释放，由消息消费者完成回收。\r\n\r\n3. **对话主循环层**：由独立的 `main_loop` 线程承载，线程栈大小 10240 B、优先级 10，采用串行处理模型，同一时刻仅处理一条会话请求。会话上下文基于 cJSON 数组维护，区分 system、user、assistant、tool 四类角色增量追加消息；每轮会话结束后自动裁剪上下文至最多 16 条，系统提示词（system prompt）永久保留。`chat` 模块负责对接大模型，流式解析思考内容、文本回复、工具调用三类数据分片，并对同索引的工具调用分片做合并组装。工具管理器维护全局工具注册链表，根据模型返回的调用指令匹配并执行本地工具，再将执行结果以 tool 消息回填至会话上下文。职责边界清晰：意图解析、多源传感融合研判、结论生成交由远端大模型承担，内核聚焦会话调度、异常重试与流程收尾。\r\n\r\n4. **基础能力层**：包含四个无状态支撑模块。`AgentConfig` 支持运行时动态配置模型标识、API 地址与密钥，无需重新编译固件；`Utils` 模块封装消息格式转换、多模态文件上传下载能力，STT 语音转写文本同样经由该模块注入会话；同时集成 webclient 实现 HTTPS 通信、cJSON 完成 JSON 报文解析。\r\n\r\n5. **外部服务层**：对接三类远端服务资源：兼容 OpenAI 协议的大模型推理接口、支持文件传输与语音转写的文件服务器、MQTT 消息 broker，为工具调用提供远端通信支撑。\r\n\r\n> Agent 内核整体架构\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/3f6a79d0d450efd7b54c5806de40ed44.png.webp)\r\n\r\n时序图完整描述了单条消息从接入到应答释放的全生命周期，共 16 个执行步骤，内置最多 6 轮工具迭代、指数退避重试与强制兜底终止逻辑：\r\n\r\n1. 交互通道调用 `put_message` 将输入消息送入输入邮箱，完成消息所有权移交；\r\n\r\n2. `main_loop` 阻塞等待并取出消息，封装为 user 消息写入上下文，进入最大 6 轮的工具循环。网络请求失败时采用指数退避策略重试，间隔依次为 1 s、2 s、3 s，连续三次失败则直接返回错误提示；\r\n\r\n3. 每一轮循环调用 `chat()` 向大模型发起流式请求：返回结果不含 `tool_calls` 时，直接输出最终回答并结束会话；若携带工具调用指令，则先保存 assistant 消息至上下文，再依次执行本地工具，将返回结果追加为 tool 消息，开启新一轮请求。该执行顺序不可颠倒，否则远端 API 将返回 400 参数错误；\r\n\r\n4. 兜底控制：当迭代达到 6 轮上限，或是连续两轮出现完全重复的工具调用时，发起一次关闭工具能力的模型请求，强制输出文本总结，终止工具迭代流程；\r\n\r\n5. 交互通道通过 `get_message_timeout` 从输出邮箱拉取应答消息，渲染展示后释放内存。在本工程 LVGL 通道中，消息拉取由 UI 定时器驱动，同步将界面状态标识由 `THINKING` 更新为 `READY`。\r\n\r\n整套会话链路串行运行于单一线程，不启用线程池，是方案明确的取舍：单个耗时较长的工具调用会延后后续消息处理。MQTT 告警事件复用这套消息入口：路由校验线程将经过门控过滤的报文通过 `agent_inject_text()` 注入输入邮箱；若 Agent 正处于繁忙状态，则自带限流等待机制，防止高频上报压垮远端 API。\r\n\r\n> Agent 内核时序图\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/3bfd755fc4c421555745a3d954bf0d59.png.webp)\r\n\r\nAgent 内核详情参考：https:\/\/github.com\/CXSforHPU\/Agent\/blob\/master\/docs\/framework.md\r\n\r\n#### UI设计\r\n\r\n> 界面采用单线程搭配多定时器的方式驱动。逻辑画布尺寸 800 × 480，屏幕硬件为 480 × 800 竖屏，横屏效果由 GPU 旋转实现。所有页面控件只在 LVGL 线程内修改，其他线程仅更新共享变量或者往邮箱投递消息。\r\n\r\n流程图从左到右分为四列，对应完整的数据流向：数据来源、LVGL 定时器、页面对象、渲染输出。\r\n\r\n**数据来源**\r\nUI 不直接操作硬件和网络。传感器读数取自 MQTT 工具层的订阅缓存，由`poll_cb`每秒调用一次`mqtt_tool_topic_latest()`拿到数值和时间戳。内置测点 5 秒内有新数据标记为 LIVE，外部测点使用更长的判断窗口。Agent 回复从输出邮箱读取；本地输入只有触摸屏和实体按键。\r\n\r\n**定时器调度**\r\n页面刷新全部依靠 LVGL 自带定时器，由`lv_timer_handler()`统一调度，主线程大约 9ms 跑一轮。各个定时器用途如下：\r\n\r\n- `boot_timer_cb`（50 ms）：开机进度层，实现进度平滑过渡\r\n- `home_timer_cb`（500 ms）：首页卡片、话题管理页面刷新\r\n- `poll_cb`（1000 ms）：详情页拉取数据、更新曲线、重新计算统计值\r\n- `agent_poll_cb`（200 ms）：轮询 Agent 输出邮箱，更新聊天内容与状态灯\r\n- `user_btn_timer_cb`（30 ms）：按键扫描，连续两次采样一致才判定按下\r\n\r\n添加话题向导、Wi-Fi 页面另设 400ms 定时器，逻辑一致。定时周期是目标期望值，实际间隔受渲染耗时影响。开机进度是跨线程交互的典型例子：启动线程只修改两个进度变量，界面刷新交给 50ms 定时器处理。\r\n\r\n**页面对象**\r\n一共七个页面：开机进度层、首页仪表盘、传感器详情、AI 聊天、添加话题向导、话题管理、Wi‑Fi 配网。界面使用 LVGL 局部刷新，合并脏区后批量提交，减少传输开销。传感器页面不额外复制数据，复用工具层 300 点环形缓存（1Hz 采样，保存 5 分钟数据）；曲线量程随数据自动适配，最大、最小、平均值和趋势由`recompute_stats()`实时算出。\r\n\r\n**Agent 消息通路**\r\n上行：聊天输入文本经`chat_send()`限制最长 240 字节，投递到 Agent 输入邮箱；Agent 未启动时自动拉起，邮箱满则提示稍后重试。语音走同一条通路：按键控制录音启停，音频文件暂存 Flash 或 SD 卡，音频线程打包后送入邮箱；STT 识别在 Agent 侧完成，识别结束删除临时文件。\r\n下行：不使用回调推送，依靠`agent_poll_cb`每 200ms 轮询输出邮箱。如果是详情页的 AI 静默摘要请求，按 FIFO 回填结果；普通回复生成聊天气泡，同步更新状态标识：RECORDING、SENDING、THINKING、READY，Agent 未运行时显示 OFFLINE。静默摘要最多 4 条待办，60 秒超时，结果不存入聊天记录。\r\n\r\n**渲染输出**\r\n两块 800 × 128 × 2 B 的局部绘制缓冲放在`.cy_gpu_buf`段。`disp_flush()`计算区域参数，调用`lcd_flush_rgb565_area()`送显，整帧绘制完成后统一提交；只刷新脏区对应的行，避免全屏重绘造成卡顿。VGLite 后端把画面旋转写入屏幕空闲缓冲，在帧中断里完成切换，实现竖屏面板显示横屏画面；LVGL 画布直接建立为 800 × 480，不在软件层做旋转。触摸坐标同步换算，90 度旋转时调换 xy 并修正偏移。\r\n\r\n**文字与主题**\r\n中文使用`lv_font_noto_sc_16_gb2312`，字体大小 3.4MB，只包含 GB2312 子集，生僻字会显示成方框。颜色、字号等样式统一放在`lv_ui_theme.h`，所有页面共用一套主题，方便修改维护。\r\n\r\n![screenshot_ui-flow.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/07b577433201ea4c9a790d22139285ea.png.webp)\r\n\r\n#### MQTT架构\r\n\r\n设备端 MQTT 主要实现双向通路：将订阅到的消息送入 Agent 分析，同时把 Agent 生成的指令下发到指定话题。底层通信依托 paho-mqtt 软件包，MQTT 相关工具实现在 Agent 包内`tool_mqtt\/`目录下。工具注册后， Agent 可通过调用它们完成订阅、退订、消息发布、查询历史、配置阈值规则等操作；每个话题订阅时可指定投递模式，本工程默认使用`filter`模式，用来区分普通周期性上报和需要交给 Agent 处理的告警、咨询事件。\r\n\r\n下发流程：用户在聊天界面下发控制需求，模型生成`mqtt_publish`工具调用。`tool_mqtt_publish()`先校验参数，参数非法则返回错误信息给模型；校验通过后由`mqtt_do_publish()`确保 MQTT 客户端正常连接，连接超时同样返回报错。连接就绪后调用 paho 接口向 Broker 发布报文，执行结果回填会话上下文，供模型生成回复。工具在 Agent 线程同步执行，异常不会静默丢失。\r\n\r\n> 下发命令（agent → 话题）\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/25bf6a114f4ce97accf04280699fcfac.png.webp)\r\n\r\n订阅上报由三个线程接力处理：\r\npaho 工作线程收到报文，在`mqtt_sub_callback`里仅拷贝数据并入接收队列，快速返回，避免阻塞保活探活。接收队列深度 16，队列满时丢弃新报文并统计丢包计数`s_rx_dropped`。\r\n`mqtt_rx`接收线程同步订阅状态后取出报文，根据话题投递模式分流：\r\n\r\n- `auto`：全部报文放行，适合指令、事件类话题；\r\n- `filter`（默认）：先判断是否为咨询类消息，再按 JSON 字段路径做阈值比对，告警边沿附带 60s 冷却；未命中规则的常规数据拦截下来，不送入 Agent；\r\n- `poll`：数据只存入滚动缓存，等待工具按需读取，适合高频测点。\r\n\r\n放行的报文不会直接注入 Agent：会等待 Agent 空闲，最长等待 180s，合并批量消息，注入间隔最小 1s。送入 Agent 时附带放行原因，方便模型输出告警或总结。被拦截的数据不会丢弃，存入每话题独立的滚动窗口（8 条）和短期历史（6 条），供`mqtt_history`查询、按需复盘。\r\n可通过`mqtt_tool status`查看链路状态，每个话题统计接收、注入、拦截数量，同时记录全局丢包。\r\n\r\n> 订阅消息分析（话题 → agent）\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/d4871fd617f25b54ced71bc31093ae0c.png.webp)\r\n\r\nmqtt tool 详情参考：https:\/\/github.com\/CXSforHPU\/Agent\/blob\/master\/docs\/tool_mqtt.md\r\n\r\n## 运行照片参考\r\n\r\n> 首页 3 列 6 卡，圆弧按话题量程映射，右上角 `LIVE` 表示 5 s 内有更新。点卡片进详情页。\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/e8e3050555a3b26590e19ba1b633c166.png.webp)\r\n\r\n> 详情页顶部是当前值和 5 min 折线，中间一行是 `recompute_stats()` 算出的 MIN\/MAX\/AVG 与趋势。`21\/300 READINGS` 是窗口内样本数，模拟器刚跑起来，所以折线只画到最右边一截。`AI SUMMARY` 走静默请求，结果不落到聊天列表里。\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/203000ae4b995d89e554391d2d2c574e.png)\r\n\r\n> 聊天页输入 `temp` 之后的往返。Agent 调本地工具 `mqtt_history` 取历史，把话题上的两种负载格式各列一行，给出当前值和最近几个采样，再补一句结论：波动 0.3 °C 以内，属于正常噪声。状态灯在轮询里从 `THINKING...` 回到 `READY`。\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/68c4b566eabba533a190a308b29f7af1.png.webp)\r\n\r\n> Topic 管理页列出全部订阅，`SUBSCRIBED 6\/12` 是已订阅槽位\/总容量，每行右侧的状态值来自 `mqtt_tool_topic_latest()`。刚发完 SUBSCRIBE、SUBACK 还没回来时显示 `PENDING`。内置 6 个话题固定，外部话题在这里删除，`+ ADD TOPIC` 打开添加向导。\r\n\r\n![screenshot_topic-manager.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/4ecc1e8163eb7c75bef8d51d152f9eb4.png)\r\n\r\n> 添加向导只需要一个话题名。`SUBSCRIBE` 之后取一条样本交给助手判型，`SOURCE` 和 `RANGE` 在拿到结果前保持 `-`，预览区显示 `NO SENSOR YET`。\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/3ba8221209f3657c7afc4877ba69a48f.png)\r\n\r\n> Wi-Fi 页顶部状态卡反映关联结果，未连上时列表照样可扫。\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/0dc29495a135e11f10e9bf6bd2dbd0f4.png)\r\n\r\n> 点列表项弹出 JOIN 对话框和屏幕键盘，密码框是空的占位符，不回填已存凭据。\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/db75c001827495671c6919605a3c50ad.png)\r\n\r\n##  展示视频（todo）\r\n\r\n\r\n\r\n## 开源代码链接\r\n\r\n### git 下载\r\n```bash\r\ngit clone https:\/\/gitee.com\/cxs_123\/muti_device_fusion.git\r\n```\r\n\r\n[开源链接](https:\/\/gitee.com\/cxs_123\/muti_device_fusion)\r\n\r\n### 百度网盘下载\r\n\r\n或使用百度网盘下载以下链接\r\n\r\n通过网盘分享的文件：multi_device_fusion.zip\r\n链接: https:\/\/pan.baidu.com\/s\/19kYUHfBsuQR4xArz-hrrEw?pwd=am56 提取码: am56 \r\n--来自百度网盘超级会员v6的分享\r\n\r\n* 为rtthread项目，直接在rt-studio新建项目中选择导入即可\r\n\r\n## 未来展望\r\n\r\n> 当前是一块板子、一个 Agent、一份订阅表。下一步是多块板子、多个 Agent、多份订阅表，服务器把这些信息合到一起处理。\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261023\/d95549f0b72b5092068ada73b101ab53.png.webp)\r\n\r\n| 层           | 职责                                              | 现状                                                         |\r\n| ------------ | ------------------------------------------------- | ------------------------------------------------------------ |\r\n| 服务层       | EMQX 转发、设备管理、STT、TTS、codex 编排、可视化 | EMQX 在用，STT 已接通，TTS 还没有配置项，管理和可视化未建 |\r\n| 端侧 Agent   | 订阅、路由、界面、语音、工具执行                  | 单节点全链路已跑通                                           |\r\n| 传感器子节点 | 采样并发布                                        | ------ |\r\n\r\n\r\n未来可引入多 Agent 协同范式，将感知、融合、告警等能力解耦，赋予各个端侧 Agent 不同的业务角色；由服务端 Codex 主 Agent 承担流程编排与全局调度职责，协调多个端侧子 Agent 分工完成信息采集、特征提取与融合研判，形成分布式协同感知体系，增强系统在多目标、动态变化监测场景下的智能化水平。","updatetime":"2026-10-26 19:35:35","author":"你好鸭"}}