92 lines
2.3 KiB
Markdown
92 lines
2.3 KiB
Markdown
# 数据格式说明
|
||
|
||
## 1. 雷达数据格式 (HBR01)
|
||
|
||
### 格式特征
|
||
- 以 `HBR01:` 开头
|
||
- 后跟8个用逗号分隔的数值字段
|
||
- 每行一条数据记录
|
||
|
||
### 数据字段说明
|
||
```
|
||
HBR01:presence,heart_rate,breath_rate,motion,rssi,heartbeat_waveform,breathing_waveform,raw_signal
|
||
```
|
||
|
||
### 字段含义
|
||
1. `presence` - 人员存在状态 (0=无人, 1=有人)
|
||
2. `heart_rate` - 心率 (bpm)
|
||
3. `breath_rate` - 呼吸率 (bpm)
|
||
4. `motion` - 运动状态 (0=静止, 1=运动)
|
||
5. `rssi` - 信号强度
|
||
6. `heartbeat_waveform` - 心跳波形数据
|
||
7. `breathing_waveform` - 呼吸波形数据
|
||
8. `raw_signal` - 原始信号数据
|
||
|
||
### 示例数据
|
||
```
|
||
HBR01:1,72,16,0,-45,120,45,-25
|
||
HBR01:0,0,0,0,-50,0,0,10
|
||
```
|
||
|
||
### 处理方式
|
||
在ESP32代码中通过 `parseSensorLine()` 函数处理,按行读取并解析逗号分隔的数值。
|
||
|
||
## 2. JSON数据格式
|
||
|
||
### 格式特征
|
||
- 以花括号 `{` 开始,`}` 结束
|
||
- 符合标准JSON格式
|
||
- 可能因长度超过BLE MTU而需要分包传输
|
||
|
||
### 示例数据
|
||
```json
|
||
{
|
||
"type": "radarData",
|
||
"deviceId": 1001,
|
||
"timestamp": 1640995200000,
|
||
"presence": 1,
|
||
"heartRate": 72.5,
|
||
"breathRate": 16.2,
|
||
"motion": 0,
|
||
"rssi": -45,
|
||
"heartbeatWaveform": 120,
|
||
"breathingWaveform": 45,
|
||
"rawSignal": -25
|
||
}
|
||
```
|
||
|
||
### 分包传输特点
|
||
- 每包最大20字节(BLE限制)
|
||
- 需要通过匹配花括号来重组完整JSON
|
||
- 可能出现一个完整JSON被分成多个BLE包的情况
|
||
|
||
### 接收处理方式
|
||
使用JavaScript代码中的 `processChunk()` 函数处理:
|
||
1. 将接收到的数据片段追加到缓冲区
|
||
2. 通过计数花括号来识别完整的JSON对象
|
||
3. 提取完整JSON并解析
|
||
4. 清理缓冲区中已处理的部分
|
||
|
||
## 3. 两种格式的主要区别
|
||
|
||
| 特性 | 雷达数据 (HBR01) | JSON数据 |
|
||
|------|------------------|----------|
|
||
| 格式标识 | HBR01:开头 | 花括号{}包围 |
|
||
| 数据结构 | 固定8个数值字段 | 灵活的键值对 |
|
||
| 分隔符 | 逗号分隔 | JSON标准格式 |
|
||
| 分包处理 | 按行处理 | 按花括号匹配 |
|
||
| 解析方式 | 数值转换 | JSON解析 |
|
||
|
||
## 4. 处理建议
|
||
|
||
### 雷达数据处理
|
||
- 按行读取处理
|
||
- 验证以"HBR01:"开头
|
||
- 按逗号分割提取8个字段
|
||
- 进行数值有效性检查
|
||
|
||
### JSON数据处理
|
||
- 使用缓冲区累积数据
|
||
- 通过花括号匹配识别完整对象
|
||
- 使用JSON解析库处理
|
||
- 注意缓冲区大小限制和清理 |