跳转至

主页仪表板

本文引用的文件 - data/index.html - rest_api.c - webui_server.c - style.css - config_manager.h - network_manager.h - ble_gateway.h - webui_server.h - mqtt_client_wrapper.c - mqtt_client_wrapper.h

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

本文件为 ESP32S3 BLE 网关“主页仪表板”的前端开发文档,聚焦于主页的整体布局设计、系统状态展示区域、WiFi 连接状态、MQTT 连接状态与 BLE 扫描器状态的界面实现。文档解释状态指示器的设计原理、实时数据更新机制与用户交互流程,并提供卡片式布局的 CSS 样式实现、响应式设计适配与视觉反馈机制的技术细节。同时给出状态数据绑定、定时刷新与错误处理的 JavaScript 实现要点,以及系统版本信息、运行时间与内存使用情况的展示逻辑。

项目结构

该仓库包含两套前端实现与对应的后端 REST API: - 新版前端:data/index.html(极简卡片布局,仅包含系统状态、网络状态与 BLE 状态) - 老版前端:old_version/data/index.html 与 old_version/data/style.css(完整仪表板,含 WiFi、MQTT、BLE 扫描器等)

后端通过 REST API 提供状态数据与设备列表,WebUI 服务器负责静态资源与路由注册。

graph TB
subgraph "浏览器"
UI["主页仪表板<br/>data/index.html"]
Style["样式表<br/>data/style.css"]
end
subgraph "嵌入式Web服务器"
WebUI["WebUI服务器<br/>webui_server.c"]
REST["REST API处理器<br/>rest_api.c"]
end
subgraph "系统服务"
Config["配置管理<br/>config_manager.h"]
NetMgr["网络管理<br/>network_manager.h"]
BleGW["BLE网关接口<br/>ble_gateway.h"]
Mqtt["MQTT客户端封装<br/>mqtt_client_wrapper.c/.h"]
end
UI --> WebUI
UI --> REST
REST --> Config
REST --> NetMgr
REST --> BleGW
REST --> Mqtt
WebUI --> REST

图表来源 - data/index.html - webui_server.c - rest_api.c - config_manager.h - network_manager.h - ble_gateway.h - mqtt_client_wrapper.c

章节来源 - data/index.html - webui_server.c

核心组件

  • 主页仪表板 HTML 结构与样式:采用卡片式网格布局,包含系统状态、网络状态与 BLE 状态三大区域,使用 CSS Grid 实现自适应排列。
  • 实时数据更新:通过 JavaScript 定时调用 /api/status 接口,解析返回的 JSON 并更新 DOM 元素。
  • 后端 REST API:提供 /api/status 返回系统版本、运行时间、可用内存、网络连接状态与 IP、接口名及 BLE 设备数量。
  • WebUI 服务器:注册 /、/api/status 等路由,承载前端页面与 API 服务。

章节来源 - data/index.html - rest_api.c - webui_server.c

架构总览

下图展示了从浏览器到后端服务的数据流与职责划分:

sequenceDiagram
participant Browser as "浏览器"
participant WebUI as "WebUI服务器"
participant REST as "REST API"
participant Sys as "系统服务"
Browser->>WebUI : 请求 /
WebUI-->>Browser : 返回 data/index.html
Browser->>REST : GET /api/status
REST->>Sys : 读取配置/网络/BLE状态
Sys-->>REST : 系统状态数据
REST-->>Browser : JSON 响应
Browser->>Browser : 更新DOM系统状态/网络状态/设备计数
Browser->>REST : 每5秒重复请求 /api/status

图表来源 - data/index.html - rest_api.c - webui_server.c

详细组件分析

卡片式布局与响应式设计

  • 布局结构:容器采用最大宽度限制与居中对齐;卡片使用阴影与圆角提升可读性;状态网格使用 CSS Grid,自动适配列数。
  • 响应式:在小屏设备上,网格会自动调整为单列,保证内容可读性。
  • 视觉反馈:状态项中的值根据连接状态动态添加在线/离线类名,实现颜色区分。

章节来源 - data/index.html - data/index.html

系统状态展示区域

  • 字段包括:网关ID、固件版本、运行时间(分钟)、可用堆内存(KB)。
  • 数据绑定:通过 fetch 获取 /api/status,解析字段并填充对应 DOM 节点。
  • 时间格式化:运行时间以秒为单位,前端转换为“分钟”显示。
  • 内存格式化:字节数转为 KB 显示。

章节来源 - data/index.html - data/index.html - rest_api.c

网络状态展示区域

  • 字段包括:连接状态(在线/离线)、IP 地址、接口名。
  • 连接状态样式:根据是否连接动态切换在线/离线样式类,实现颜色变化与视觉反馈。
  • 数据来源:/api/status 中的 network 对象,包含连接标志、IP 与接口名。

章节来源 - data/index.html - data/index.html - rest_api.c

BLE 扫描器状态展示区域

  • 字段包括:发现设备数量。
  • 数据来源:/api/status 中的 ble.devices。
  • 交互:老版前端包含“开始扫描/停止扫描”按钮,新版前端未包含该功能入口。

章节来源 - data/index.html - data/index.html - rest_api.c

实时数据更新机制与定时刷新

  • 初次加载即调用一次状态更新函数。
  • 使用定时器每 5 秒轮询一次 /api/status,确保状态面板实时反映系统状态。
  • 错误处理:当请求失败或解析异常时,不更新状态,避免覆盖当前有效数据。

章节来源 - data/index.html - data/index.html

状态指示器设计原理与视觉反馈

  • 在老版前端中,存在顶部状态指示灯 dot,根据 API 请求结果切换在线/离线样式类,实现全局状态可视化。
  • 新版前端未保留该指示灯,但通过状态项的颜色变化(在线/离线)实现局部反馈。

章节来源 - old_version/data/index.html - old_version/data/style.css

用户交互流程(老版前端)

  • 页面加载后,自动拉取系统状态、配置、过滤条件与设备列表。
  • 支持自动刷新开关,开启后定时刷新设备列表。
  • 支持设备详情弹窗、连接/断开设备、应用/清除过滤条件、保存配置与重启设备等操作。

章节来源 - old_version/data/index.html

API 定义与数据模型

  • GET /api/status:返回系统状态、网络状态与 BLE 状态。
  • GET /api/devices:返回 BLE 设备列表。
  • POST /api/devices/scan:启用/禁用 BLE 扫描。
  • GET /api/config:获取配置。
  • PUT /api/config:更新配置。

章节来源 - rest_api.c - webui_server.c

数据模型映射

  • 系统状态字段:gateway_id、firmware、uptime、heap_free、network(connected、ip、interface)、ble(devices)。
  • 设备列表字段:mac、name、rssi、connected。

章节来源 - rest_api.c - rest_api.c

依赖关系分析

graph LR
Index["data/index.html"] --> REST["components/rest_api/rest_api.c"]
REST --> ConfigMgr["include/config_manager.h"]
REST --> NetMgr["include/network_manager.h"]
REST --> BleGW["include/ble_gateway.h"]
WebUI["old_version/components/webui_server/webui_server.c"] --> REST
WebUI --> Style["old_version/data/style.css"]

图表来源 - data/index.html - rest_api.c - config_manager.h - network_manager.h - ble_gateway.h - webui_server.c - style.css

章节来源 - webui_server.c - rest_api.c

性能考虑

  • 定时刷新频率:主页每 5 秒刷新一次,平衡了实时性与网络负载。
  • 数据量控制:/api/devices 返回固定上限的设备列表,避免一次性传输过多数据。
  • 前端渲染:DOM 更新集中在状态面板,避免频繁重排与重绘。
  • 样式优化:使用 CSS Grid 与 Flex 布局,减少复杂选择器层级,提升渲染效率。

故障排除指南

  • 页面空白或状态不更新
  • 检查 /api/status 是否可达,确认 WebUI 服务器已启动且路由注册成功。
  • 查看浏览器开发者工具 Network 面板,确认请求返回 200 且 JSON 格式正确。
  • 网络状态始终显示离线
  • 确认网络管理模块已初始化并连接成功;检查 /api/status 中 network.connected 字段。
  • 设备数量不变化
  • 确认 BLE 扫描已启用;检查 /api/devices 是否返回设备列表。
  • 样式异常
  • 确认 data/style.css 或老版 style.css 已正确加载;检查媒体查询在目标设备上的表现。

章节来源 - webui_server.h - webui_server.c

结论

本主页仪表板通过简洁的卡片式布局与实时数据刷新,实现了对系统状态、网络状态与 BLE 设备数量的直观展示。前端通过定时轮询与条件样式实现良好的视觉反馈,后端 REST API 提供稳定的数据源。建议在保持现有性能的基础上,逐步引入更丰富的交互与状态指示器,以进一步提升用户体验。