跳转至

扫描控制API

本文档引用的文件 - main.c - webui_server.c - rest_api.c - rest_api.h - ble_gateway.c - index.html - devices.html

目录

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

简介

本文档详细描述了ESP32-S3 BLE网关项目的扫描控制API。该API提供了对BLE扫描功能的远程控制能力,允许通过HTTP接口启动和停止BLE设备扫描。系统采用RESTful API设计,支持JSON格式的请求和响应数据。

BLE网关项目是一个企业级的双网络支持(以太网/WiFi)BLE扫描网关,集成了WiFi配置功能、BLE扫描和多设备连接管理。主要功能包括:

  • 双网络支持:同时支持以太网和WiFi连接模式
  • BLE扫描控制:通过API控制BLE扫描的启停
  • 设备发现:自动发现和跟踪BLE设备
  • Web界面:提供直观的Web管理界面
  • MQTT集成:可选的MQTT消息传输功能

项目结构

项目采用模块化架构设计,主要包含以下核心组件:

graph TB
subgraph "应用层"
WebUI[Web用户界面]
REST[REST API服务器]
end
subgraph "业务逻辑层"
BLEGateway[BLE网关服务]
ConfigManager[配置管理器]
NetworkManager[网络管理器]
end
subgraph "硬件抽象层"
HCITransport[HCI传输层]
BLEScanner[BLE扫描器]
end
subgraph "外设层"
LED指示灯
按钮
网络接口
end
WebUI --> REST
REST --> BLEGateway
REST --> ConfigManager
REST --> NetworkManager
BLEGateway --> HCITransport
HCITransport --> BLEScanner
BLEGateway --> LED指示灯
BLEGateway --> 按钮
NetworkManager --> 网络接口

图表来源 - main.c - webui_server.c - rest_api.c

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

核心组件

REST API服务器

REST API服务器是系统的核心通信接口,基于ESP-IDF的HTTP服务器框架构建。它提供了完整的RESTful API端点,支持GET、POST、PUT等HTTP方法。

主要特性: - URI路由:支持通配符URI匹配 - JSON处理:使用cJSON库进行JSON数据解析和生成 - 错误处理:标准HTTP状态码返回 - 内存管理:合理的内存分配和释放策略

BLE网关服务

BLE网关服务负责BLE设备的扫描、连接和数据管理。它通过HCI传输层与底层BLE硬件通信,实现了完整的BLE协议栈功能。

核心功能: - 扫描控制:启动和停止BLE扫描 - 设备管理:跟踪和管理发现的BLE设备 - 连接管理:建立和维护BLE连接 - 状态监控:实时监控扫描状态和设备数量

Web用户界面

Web用户界面提供了直观的图形化操作界面,用户可以通过浏览器访问系统状态和控制BLE扫描。

主要页面: - 仪表板:显示系统状态和网络信息 - 设备列表:展示发现的BLE设备 - 配置页面:系统配置和设置

章节来源 - rest_api.c - ble_gateway.c - index.html - devices.html

架构概览

系统采用分层架构设计,确保了良好的模块分离和可维护性:

sequenceDiagram
participant Client as 客户端
participant WebUI as Web界面
participant REST as REST API
participant Gateway as BLE网关
participant HCI as HCI传输
participant Scanner as BLE扫描器
Client->>WebUI : 访问Web界面
WebUI->>REST : GET /api/status
REST->>Gateway : 获取状态信息
Gateway->>Scanner : 查询扫描状态
Scanner-->>Gateway : 返回扫描状态
Gateway-->>REST : 状态数据
REST-->>WebUI : JSON响应
WebUI-->>Client : 渲染页面
Client->>REST : POST /api/devices/scan
REST->>Gateway : 启动/停止扫描
Gateway->>HCI : 发送HCI命令
HCI->>Scanner : 配置扫描参数
Scanner-->>Gateway : 扫描结果
Gateway-->>REST : 执行结果
REST-->>Client : {"status" : "ok"}

图表来源 - rest_api.c - ble_gateway.c

系统架构的关键特点:

  1. 分层设计:清晰的层次分离,便于维护和扩展
  2. 模块化:各组件职责明确,耦合度低
  3. 异步处理:使用FreeRTOS任务处理并发操作
  4. 资源管理:合理的内存和任务资源管理

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

详细组件分析

扫描控制API实现

API端点定义

系统提供了专门的BLE扫描控制API,位于 /api/devices/scan 端点。该端点支持POST方法,用于控制BLE扫描的启停。

API规范: - 端点/api/devices/scan - 方法:POST - 内容类型application/json - 请求体:包含 enable 布尔参数

请求格式

请求必须包含有效的JSON对象,其中包含 enable 参数:

{
  "enable": true
}

参数说明: - enable (boolean):控制扫描启停的布尔值 - true:启动BLE扫描 - false:停止BLE扫描

响应格式

API调用成功时返回标准的JSON响应:

{
  "status": "ok"
}

响应状态码: - 200 OK:操作成功执行 - 400 Bad Request:请求格式无效或缺少必需参数 - 500 Internal Server Error:服务器内部错误

错误处理

API实现了完善的错误处理机制:

flowchart TD
Start([接收请求]) --> ParseJSON["解析JSON请求"]
ParseJSON --> ValidJSON{"JSON有效?"}
ValidJSON --> |否| Return400["返回400错误"]
ValidJSON --> |是| CheckParam["检查enable参数"]
CheckParam --> ValidParam{"参数有效?"}
ValidParam --> |否| Return400
ValidParam --> |是| ExecuteScan["执行扫描操作"]
ExecuteScan --> Success["返回200响应"]
Return400 --> End([结束])
Success --> End

图表来源 - rest_api.c

章节来源 - rest_api.c

BLE网关扫描实现

BLE网关服务通过发送HCI命令来控制底层BLE硬件的扫描行为:

扫描启动流程

sequenceDiagram
participant REST as REST API
participant Gateway as BLE网关
participant HCI as HCI传输
participant Hardware as BLE硬件
REST->>Gateway : enable = true
Gateway->>Gateway : 验证状态
Gateway->>HCI : 发送LE_SET_SCAN_PARAM
HCI->>Hardware : 设置扫描参数
Hardware-->>HCI : 命令确认
HCI-->>Gateway : 参数设置完成
Gateway->>HCI : 发送LE_SET_SCAN_ENABLE
HCI->>Hardware : 启动扫描
Hardware-->>HCI : 扫描开始确认
HCI-->>Gateway : 扫描启动完成
Gateway-->>REST : 返回成功状态

图表来源 - ble_gateway.c

扫描停止流程

sequenceDiagram
participant REST as REST API
participant Gateway as BLE网关
participant HCI as HCI传输
participant Hardware as BLE硬件
REST->>Gateway : enable = false
Gateway->>Gateway : 检查扫描状态
Gateway->>HCI : 发送LE_SET_SCAN_ENABLE(禁用)
HCI->>Hardware : 停止扫描
Hardware-->>HCI : 命令确认
HCI-->>Gateway : 扫描停止确认
Gateway-->>REST : 返回成功状态

图表来源 - ble_gateway.c

章节来源 - ble_gateway.c

Web界面集成

Web用户界面提供了直观的BLE扫描控制功能:

设备管理页面

设备管理页面包含了完整的BLE扫描控制界面:

graph LR
subgraph "设备管理界面"
StartBtn[开始扫描按钮]
StopBtn[停止按钮]
ClearBtn[清除按钮]
DeviceTable[设备列表表格]
end
StartBtn --> RESTAPI["/api/devices/scan<br/>POST {enable:true}"]
StopBtn --> RESTAPI2["/api/devices/scan<br/>POST {enable:false}"]
RESTAPI --> DeviceTable
RESTAPI2 --> DeviceTable
ClearBtn --> DeviceTable

图表来源 - devices.html

实时状态更新

Web界面通过定时轮询获取最新的系统状态:

sequenceDiagram
participant Browser as 浏览器
participant Server as Web服务器
participant API as REST API
participant Gateway as BLE网关
Browser->>Server : GET /api/status
Server->>API : 转发请求
API->>Gateway : 获取状态
Gateway-->>API : 返回状态数据
API-->>Server : JSON响应
Server-->>Browser : 渲染状态
Browser->>Browser : 3秒后再次请求

图表来源 - index.html

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

依赖关系分析

系统组件之间的依赖关系如下:

graph TB
subgraph "外部依赖"
ESP_IDF[ESP-IDF框架]
cJSON[cJSON库]
FreeRTOS[FreeRTOS]
end
subgraph "核心组件"
WebUIServer[WebUI服务器]
RESTAPI[REST API]
BLEGateway[BLE网关]
ConfigManager[配置管理器]
NetworkManager[网络管理器]
end
subgraph "硬件接口"
HCITransport[HCI传输]
BLEScanner[BLE扫描器]
end
ESP_IDF --> WebUIServer
ESP_IDF --> RESTAPI
ESP_IDF --> BLEGateway
ESP_IDF --> ConfigManager
ESP_IDF --> NetworkManager
cJSON --> RESTAPI
FreeRTOS --> WebUIServer
FreeRTOS --> RESTAPI
WebUIServer --> RESTAPI
RESTAPI --> BLEGateway
RESTAPI --> ConfigManager
RESTAPI --> NetworkManager
BLEGateway --> HCITransport
HCITransport --> BLEScanner

图表来源 - main.c - rest_api.c

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

性能考虑

内存管理

系统采用了高效的内存管理策略:

  • 静态分配:关键数据结构使用静态内存分配
  • 缓冲区管理:HTTP请求缓冲区大小合理设置(64字节)
  • JSON处理:使用cJSON库进行高效的JSON解析和生成
  • 内存回收:及时释放动态分配的内存

并发处理

系统使用FreeRTOS进行并发任务管理:

  • 任务优先级:不同任务具有合适的优先级设置
  • 队列通信:组件间通过队列进行异步通信
  • 互斥锁:保护共享资源的访问
  • 超时机制:避免无限等待,提高系统稳定性

网络优化

  • HTTP服务器配置:合理设置URI处理器数量和堆栈大小
  • 静态文件服务:SPIFFS文件系统提供高效的静态文件服务
  • 连接复用:支持HTTP连接复用减少开销

故障排除指南

常见问题及解决方案

API调用失败

问题:POST /api/devices/scan 返回400错误 可能原因: - 请求JSON格式不正确 - 缺少 enable 参数 - enable 参数类型不是布尔值

解决方法: 1. 确保请求包含有效的JSON对象 2. 验证 enable 参数存在且为布尔值 3. 检查网络连接是否稳定

扫描控制无效

问题:调用扫描控制API但扫描状态未改变 可能原因: - BLE硬件未正确初始化 - HCI传输层通信失败 - 权限不足

解决方法: 1. 检查BLE硬件连接状态 2. 验证HCI传输层初始化 3. 查看系统日志获取详细错误信息

Web界面无法访问

问题:无法通过浏览器访问Web界面 可能原因: - Web服务器未启动 - 网络连接问题 - 防火墙阻止访问

解决方法: 1. 确认Web服务器已成功启动 2. 检查网络配置和连接状态 3. 验证防火墙设置

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

结论

BLE扫描控制API为ESP32-S3 BLE网关项目提供了完整、可靠的BLE扫描管理功能。通过RESTful API设计,用户可以轻松地远程控制BLE扫描的启停,配合Web界面提供了直观的操作体验。

系统的主要优势包括:

  1. 简洁的API设计:单一端点提供完整的扫描控制功能
  2. 标准化响应:统一的JSON响应格式便于客户端集成
  3. 完善的错误处理:提供详细的错误信息和状态反馈
  4. 模块化架构:清晰的组件分离便于维护和扩展
  5. 实时状态监控:支持实时查看系统状态和设备信息

该API为构建更复杂的BLE应用奠定了坚实的基础,支持从简单的设备发现到复杂的企业级BLE网络管理场景。