跳转至

设备管理界面

本文档引用的文件 - devices.html - index.html - style.css - hci_test.html - main.c - ble_scanner.c - webui_server.c

目录

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

简介

本文件为ESP32S3 BLE网关的设备管理界面提供全面的前端开发文档。内容涵盖设备列表页面的布局与交互、设备过滤功能、设备详情展示、表格数据渲染机制、过滤器实现逻辑、连接状态管理、对话框弹窗实现、MAC地址格式化与RSSI信号强度显示、设备自动刷新机制、连接状态同步以及用户交互响应等。同时提供过滤条件应用逻辑、数据缓存策略与性能优化建议,帮助开发者快速理解并扩展该界面。

项目结构

该仓库包含嵌入式固件与WebUI前端资源两部分: - 嵌入式固件(C/C++):负责BLE扫描、设备管理、网络与状态上报、WebUI服务端等。 - WebUI前端(HTML/CSS/JS):提供仪表盘、设备列表、配置与HCITester等页面。

graph TB
subgraph "嵌入式固件"
FW_Main["main.c<br/>系统初始化与任务调度"]
FW_BLE["ble_scanner.c<br/>BLE扫描与设备列表"]
FW_WebUI["webui_server.c<br/>HTTP服务与API端点"]
end
subgraph "WebUI前端"
UI_Devices["devices.html<br/>设备列表页面"]
UI_Index["index.html<br/>仪表盘页面"]
UI_Style["style.css<br/>样式定义"]
UI_HCITest["hci_test.html<br/>HCITester页面"]
end
FW_WebUI --> UI_Devices
FW_WebUI --> UI_Index
FW_WebUI --> UI_HCITest
FW_BLE --> FW_WebUI
FW_Main --> FW_BLE

图表来源 - main.c - ble_scanner.c - webui_server.c - devices.html - index.html - style.css - hci_test.html

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

核心组件

  • 设备列表页面(devices.html)
  • 提供开始扫描、停止扫描、清空设备列表的操作按钮。
  • 使用表格展示设备的MAC地址、名称、RSSI、状态与操作列。
  • 通过定时轮询从后端API获取设备数据并动态渲染。
  • 支持连接设备请求。

  • 仪表盘页面(index.html)

  • 展示系统状态、网络状态与BLE状态信息。
  • 定时刷新系统状态数据。

  • 样式文件(style.css)

  • 定义卡片、网格、按钮、表格等通用样式,确保页面一致的视觉风格。

  • HCITester页面(hci_test.html)

  • 提供HCITester工具,支持命令发送、事件轮询、设备列表展示与解析。

  • 后端WebUI服务(webui_server.c)

  • 提供REST API端点:/api/status、/api/devices、/api/devices/scan等。
  • 负责从BLE扫描模块读取设备数据并序列化为JSON返回给前端。

  • BLE扫描模块(ble_scanner.c)

  • 实现设备发现、过滤(RSSI、名称、MAC)、设备列表维护与连接状态管理。

章节来源 - devices.html - index.html - style.css - hci_test.html - webui_server.c - ble_scanner.c

架构总览

前端通过HTTP请求与嵌入式WebUI服务通信,后端从BLE扫描模块获取设备数据并返回JSON。前端定时刷新设备列表,用户可触发扫描控制与设备连接。

sequenceDiagram
participant Browser as "浏览器"
participant WebUI as "WebUI服务(webui_server.c)"
participant BLE as "BLE扫描(ble_scanner.c)"
Browser->>WebUI : GET /api/devices
WebUI->>BLE : 获取设备列表
BLE-->>WebUI : 设备数组(JSON)
WebUI-->>Browser : JSON响应
Browser->>WebUI : POST /api/devices/scan {enable : true/false}
WebUI->>BLE : 开始/停止扫描
WebUI-->>Browser : {scanning : true/false}
Browser->>WebUI : POST /api/devices/{mac}/connect
WebUI->>BLE : 连接指定设备
WebUI-->>Browser : {"ok" : true/false}

图表来源 - webui_server.c - ble_scanner.c - devices.html

详细组件分析

设备列表页面(devices.html)

  • 页面布局
  • 顶部导航栏包含“仪表盘”、“设备列表”、“配置”链接。
  • 卡片容器内包含设备表格,表头包含MAC地址、名称、RSSI、状态、操作列。
  • 操作区提供“开始扫描”、“停止扫描”、“清空”按钮。

  • 数据渲染机制

  • 首次加载与每3秒定时刷新调用loadDevices()。
  • loadDevices()通过fetch('/api/devices')获取JSON数据,遍历设备数组生成表格行。
  • 当设备列表为空时显示提示文本。

  • RSSI信号强度显示

  • 通过getRssiClass()根据RSSI值返回CSS类名,实现不同强度的颜色区分(弱/中/强)。

  • 用户交互

  • “开始扫描”、“停止扫描”分别向后端发送POST请求控制扫描启停。
  • “清空”删除设备列表并立即重新加载。
  • “连接”按钮向后端发送连接请求。
flowchart TD
Start(["页面加载"]) --> Init["绑定按钮事件<br/>启动定时刷新"]
Init --> Timer["每3秒执行一次"]
Timer --> Fetch["GET /api/devices"]
Fetch --> HasData{"是否有设备?"}
HasData --> |否| Empty["显示空提示"]
HasData --> |是| Render["生成表格行<br/>设置RSSI样式"]
Render --> End(["等待下一次刷新"])
Empty --> End

图表来源 - devices.html - devices.html

章节来源 - devices.html

设备过滤功能

  • 前端过滤(devices.html)
  • 当前devices.html未实现前端过滤器UI与逻辑,但后端提供了完整的过滤能力。

  • 后端过滤(webui_server.c + ble_scanner.c)

  • 过滤器字段:名称包含、最小RSSI阈值、MAC地址精确匹配、仅显示有名称设备。
  • 应用逻辑:在设备更新时进行过滤判断,仅对通过过滤器的设备触发回调或返回给前端。
  • 设置方式:通过/api/ble/filter接口GET获取当前过滤器,POST设置新过滤器。
flowchart TD
ApplyFilter["应用过滤器"] --> CheckRSSI["比较RSSI阈值"]
CheckRSSI --> CheckName["检查名称是否包含"]
CheckName --> CheckMAC["检查MAC地址是否匹配"]
CheckMAC --> Pass{"全部通过?"}
Pass --> |是| Include["加入设备列表"]
Pass --> |否| Exclude["忽略设备"]

图表来源 - ble_scanner.c - webui_server.c

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

设备详情展示

  • devices.html当前未实现设备详情对话框,但具备展示设备基本信息的能力。
  • 如需实现详情对话框:
  • 在表格行点击“详情”按钮时,通过fetch('/api/devices/{mac}')获取设备详细信息。
  • 弹出模态框展示设备属性(MAC、名称、RSSI、连接状态、广告数据解析结果等)。
  • 可结合后端连接状态API同步当前连接状态。

章节来源 - devices.html

设备连接状态管理

  • 前端
  • devices.html提供连接按钮,向后端发送连接请求。
  • 可通过定时刷新同步连接状态并在表格中高亮当前连接设备。

  • 后端

  • 连接状态通过BLE扫描模块维护,并可通过API查询当前连接状态。
  • 连接/断开请求由webui_server.c处理并转发至BLE扫描模块。
sequenceDiagram
participant UI as "设备列表UI"
participant API as "WebUI API"
participant BLE as "BLE扫描模块"
UI->>API : POST /api/devices/{mac}/connect
API->>BLE : 触发连接流程
BLE-->>API : 返回连接结果
API-->>UI : {"ok" : true/false}
UI->>API : GET /api/ble/connection
API->>BLE : 查询连接状态
BLE-->>API : 返回连接状态
API-->>UI : {"state","peer_addr"}

图表来源 - webui_server.c - ble_scanner.c - devices.html

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

MAC地址格式化

  • 后端在返回设备列表时,将字节数组地址格式化为标准MAC地址字符串(XX:XX:XX:XX:XX:XX)。
  • 前端直接显示该字符串,无需额外格式化。

章节来源 - webui_server.c

设备自动刷新机制

  • devices.html使用setInterval定期调用loadDevices(),默认3秒刷新一次。
  • index.html使用setInterval定期调用updateStatus(),默认5秒刷新一次。
  • 建议:
  • 根据网络状况与设备数量调整刷新间隔。
  • 在页面不可见时暂停刷新,可见时恢复,以节省带宽与CPU。

章节来源 - devices.html - index.html

用户交互响应

  • 扫描控制:开始/停止扫描按钮通过POST请求切换扫描状态。
  • 清空设备:DELETE请求清空设备列表并立即刷新。
  • 连接设备:POST请求发起连接,前端可结合连接状态API确认结果。

章节来源 - devices.html

依赖关系分析

  • 前端页面依赖WebUI服务提供的API端点。
  • WebUI服务依赖BLE扫描模块获取设备数据与状态。
  • BLE扫描模块依赖硬件传输层(NRF52833 via HCI UART)。
graph LR
DevicesHTML["devices.html"] --> WebUI["webui_server.c"]
IndexHTML["index.html"] --> WebUI
WebUI --> BLEScanner["ble_scanner.c"]
BLEScanner --> Hardware["NRF52833(HCI UART)"]

图表来源 - devices.html - index.html - webui_server.c - ble_scanner.c - main.c

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

性能考虑

  • 刷新频率优化
  • 将设备列表刷新间隔从3秒调整为5-10秒,减少网络与CPU压力。
  • 在页面隐藏时暂停刷新,显示时恢复。

  • 数据渲染优化

  • 使用虚拟滚动或分页展示大量设备,避免一次性渲染过多DOM节点。
  • 对RSSI样式计算与字符串拼接进行缓存,减少重复计算。

  • 缓存策略

  • 前端可缓存最近一次设备列表,在刷新失败时回退显示。
  • 后端对设备列表进行去重与限流,避免重复推送。

  • 网络与并发

  • 控制并发请求数量,避免短时间内多次请求导致拥塞。
  • 对错误请求进行重试与退避策略。

故障排除指南

  • 设备列表不刷新
  • 检查浏览器控制台是否存在跨域或网络错误。
  • 确认后端WebUI服务已启动且API端点可用。

  • 扫描按钮无效

  • 确认后端BLE扫描模块已初始化成功。
  • 检查NRF52833硬件连接与供电状态。

  • 连接失败

  • 检查目标设备是否在扫描范围内且可连接。
  • 查看后端日志确认连接状态变化。

  • RSSI显示异常

  • 确认后端返回的RSSI值范围与前端样式映射一致。
  • 检查设备信号强度是否处于正常范围。

章节来源 - webui_server.c - ble_scanner.c - main.c

结论

设备管理界面通过简洁的HTML结构与定时轮询实现了设备列表的实时展示与基本交互。后端提供了完善的BLE扫描、过滤与连接管理能力,前端可在此基础上扩展设备详情对话框、更精细的过滤器UI与连接状态同步机制。通过合理的刷新策略与缓存优化,可在保证用户体验的同时提升系统性能与稳定性。