8aee83507d5021d5af03de00f09490f89ef00dbb
Rader_Success_5 - ESP32 雷达数据采集与传输系统
项目简介
本项目是一个基于 ESP32 的智能雷达数据采集与传输系统,通过 R60ABD1 雷达传感器采集人体生命体征数据,并通过蓝牙(BLE)与小程序交互,同时支持 WiFi 连接将数据上传到云服务器数据库。
主要功能
1. 雷达数据采集
- 人体存在检测:实时检测区域内是否有人
- 心率监测:监测人体心率(BPM)
- 呼吸率监测:监测人体呼吸频率
- 睡眠监测:监测睡眠状态(清醒/浅睡/深睡/REM)
- 运动检测:检测人体运动状态
- 距离测量:测量人体与设备的距离
- 睡眠质量评分:提供睡眠质量评估
2. 蓝牙通信(BLE)
- 设备配置与管理
- WiFi 网络扫描与配置
- 设备状态查询
- 雷达数据实时查询
- 持续数据发送模式
- 设备 ID 设置
3. WiFi 连接
- 自动 WiFi 连接与重连
- 支持多 WiFi 网络配置(最多 10 个)
- 网络信号强度检测
- 网络状态监控
4. 数据上传
- 将雷达数据上传到 InfluxDB 云数据库
- 支持每日数据汇总
- 支持睡眠数据专项上传
硬件配置
主控芯片
- ESP32:双核微控制器,支持 WiFi 和 BLE
雷达传感器
- 型号:R60ABD1
- 通信接口:UART
- 检测范围:人体存在、心率、呼吸率、睡眠状态等
引脚定义
| 引脚 | 功能 | 说明 |
|---|---|---|
| GPIO 0 | Boot 按钮 | 配置清除按钮 |
| GPIO 48 | 网络状态 LED | 指示网络连接状态 |
| GPIO 4 | 配置清除 LED | 指示配置清除状态 |
| GPIO 8 | 自定义 GPIO | 用户自定义功能 |
| GPIO 9 | 自定义 GPIO | 用户自定义功能 |
LED 状态指示
| 状态 | LED 行为 | 说明 |
|---|---|---|
| 初始化/未连接 | 慢闪(1秒间隔) | 正在初始化或未连接网络 |
| 连接中 | 快闪(200ms间隔) | 正在连接 WiFi |
| 已连接 | 呼吸灯 | WiFi 已连接 |
| 断开连接 | 慢闪(1秒间隔) | WiFi 断开连接 |
软件架构
核心模块
1. RadarManager(雷达管理器)
- 雷达数据采集与解析
- UART 通信管理
- 数据队列管理
- BLE 数据发送
2. WiFiManager(WiFi 管理器)
- WiFi 网络扫描
- WiFi 连接管理
- 配置存储与加载
- 自动重连机制
3. 主程序(main.cpp)
- 任务调度与管理
- LED 状态控制
- 按钮监控
- 系统初始化
FreeRTOS 任务
| 任务名称 | 功能 | 优先级 |
|---|---|---|
| uartProcessTask | UART 数据处理 | 高 |
| radarDataTask | 雷达数据处理 | 高 |
| bleSendTask | BLE 数据发送 | 中 |
| vitalSendTask | 生命体征数据发送 | 中 |
| wifiMonitorTask | WiFi 状态监控 | 中 |
| ledControlTask | LED 状态控制 | 低 |
| bootButtonMonitorTask | 按钮监控 | 低 |
| configClearLedTask | 配置清除 LED 控制 | 低 |
BLE API 文档
详细的 BLE API 文档请参考 BLE_API.md
主要 API 命令
scanWiFi- 扫描 WiFi 网络getSavedNetworks- 获取已保存的 WiFi 网络setWiFiConfig- 配置 WiFi 网络queryStatus- 查询设备状态setDeviceId- 设置设备 IDstartContinuousSend- 启动持续发送stopContinuousSend- 停止持续发送queryRadarData- 查询雷达数据echo- 回显测试
BLE 连接参数
- 服务 UUID:
a8c1e5c0-3d5d-4a9d-8d5e-7c8b6a4e2f1a - 特征值 UUID:
beb5483e-36e1-4688-b7f5-ea07361b26a8 - 分包大小: 20 字节/包
- 数据格式: JSON(UTF-8 编码)
数据结构
传感器数据(SensorData)
typedef struct {
float breath_rate; // 呼吸率
float heart_rate; // 心率
uint8_t breath_valid; // 呼吸率有效标志
uint8_t heart_valid; // 心率有效标志
uint8_t presence; // 存在状态
uint8_t motion; // 运动状态
int heartbeat_waveform; // 心跳波形
int breathing_waveform; // 呼吸波形
uint16_t distance; // 距离
uint8_t sleep_state; // 睡眠状态
uint32_t sleep_time; // 睡眠时长
uint8_t sleep_score; // 睡眠评分
// ... 更多字段
} SensorData;
睡眠状态定义
| 值 | 状态 | 说明 |
|---|---|---|
| 0 | 清醒 | 处于清醒状态 |
| 1 | 浅睡 | 处于浅度睡眠 |
| 2 | 深睡 | 处于深度睡眠 |
| 3 | REM | 快速眼动睡眠 |
配置管理
设备 ID
- 有效范围:1000-1999
- 存储位置:ESP32 Flash(Preferences)
- 默认值:0000(未设置)
WiFi 配置
- 最大保存数量:10 个网络
- 最小信号强度:-200 dBm
- 连接超时:15 秒
- 重连间隔:2 秒
配置清除
- 触发方式:启动时按住 Boot 按钮 3 秒
- 清除内容:所有 WiFi 配置和设备 ID
- LED 指示:呼吸灯模式
编译与烧录
开发环境
- IDE:Arduino IDE 2.x
- 框架:Arduino ESP32
- 编译器:GCC for ESP32
依赖库
Arduino.h- Arduino 核心库WiFi.h- WiFi 功能库BLEDevice.h- BLE 功能库ArduinoJson.h- JSON 处理库Preferences.h- Flash 存储库HTTPClient.h- HTTP 客户端库
编译步骤
- 使用 platformIO ,在vscode中打开项目
- 选择正确的串口
- 点击"上传"按钮编译并烧录
使用说明
首次使用
- 上电启动设备
- 通过手机蓝牙连接设备
- 使用小程序扫描 WiFi 网络
- 配置 WiFi 连接信息
- 设置设备 ID(可选)
- 设备自动连接 WiFi 并开始上传数据
日常使用
- 设备自动连接已保存的 WiFi
- 雷达数据实时采集
- 数据自动上传到云服务器
- 可通过 BLE 查询设备状态和雷达数据
配置清除
- 断电重启设备
- 按住 Boot 按钮不放
- 上电后保持按住 3 秒
- 配置清除 LED 呼吸闪烁
- 释放按钮,配置已清除
项目结构
Rader_Success_5/
├── src/
│ ├── main.cpp # 主程序
│ ├── radar_manager.cpp # 雷达管理器实现
│ ├── radar_manager.h # 雷达管理器头文件
│ ├── wifi_manager.cpp # WiFi 管理器实现
│ └── wifi_manager.h # WiFi 管理器头文件
├── BLE_API.md # BLE API 文档
├── 传感器数据.txt # 传感器数据说明
└── README.md # 项目说明文档
技术特点
- 模块化设计:雷达管理和 WiFi 管理分离,便于维护和扩展
- 多任务处理:使用 FreeRTOS 实现多任务并发处理
- 队列通信:使用 FreeRTOS 队列实现任务间数据传递
- 流控机制:BLE 数据发送采用流控,避免数据拥塞
- 自动重连:WiFi 断开后自动重连,提高系统稳定性
- Flash 存储:使用 Preferences 持久化存储配置信息
- LED 状态指示:直观的 LED 状态显示,便于用户了解设备状态
注意事项
- WiFi 限制:仅支持 2.4GHz WiFi 网络
- BLE 连接:一次只能连接一个 BLE 客户端
- 数据上传:需要确保 WiFi 连接正常才能上传数据
- 设备 ID:必须在有效范围内(1000-1999)
- 配置清除:清除配置后需要重新配置 WiFi 和设备 ID
- 雷达安装:建议安装在床铺正上方,距离 1-2 米
版本历史
| 版本 | 日期 | 说明 |
|---|---|---|
| 5.0 | 2025-02-28 | 第5版,重构代码结构,添加雷达和 WiFi 管理器模块 |
许可证
本项目仅供学习和研究使用。
联系方式
如有问题或建议,请联系项目维护者。
Description
Languages
C++
96.7%
C
2.4%
JavaScript
0.7%
Python
0.2%