628 lines
6.6 KiB
Markdown
628 lines
6.6 KiB
Markdown
# BLE\+MCU架构开发流程
|
||
|
||
# 1\. 系统架构说明
|
||
|
||
## 功能说明
|
||
|
||
设备采用 BLE \+ MCU 双芯片架构:
|
||
|
||
- MCU:
|
||
|
||
- 负责产品业务控制;
|
||
|
||
- 传感器采集;
|
||
|
||
- 外设控制;
|
||
|
||
- 产品逻辑处理。
|
||
|
||
- BLE 模组:
|
||
|
||
- 负责 BLE 通信;
|
||
|
||
- APP连接;
|
||
|
||
- 网关接入;
|
||
|
||
- 云端通信;
|
||
|
||
- OTA升级;
|
||
|
||
- 数据透传。
|
||
|
||
整体通信链路:
|
||
|
||
```Plain Text
|
||
APP
|
||
|
|
||
BLE
|
||
|
|
||
MCU
|
||
|
|
||
设备功能
|
||
```
|
||
|
||
云端通信:
|
||
|
||
```Plain Text
|
||
设备
|
||
|
|
||
BLE----------
|
||
| |
|
||
网关 APP
|
||
| |
|
||
服务器-------
|
||
```
|
||
|
||
---
|
||
|
||
# 2\. BLE启动流程
|
||
|
||
## 2\.1 BLE上电初始化
|
||
|
||
### 功能说明
|
||
|
||
BLE 模组上电完成初始化后,主动向 MCU 获取设备身份信息。
|
||
|
||
### BLE → MCU
|
||
|
||
请求获取设备信息:
|
||
|
||
|**字段**|**内容**|
|
||
|---|---|
|
||
|命令|0x01|
|
||
|请求类型|获取设备身份信息|
|
||
|
||
---
|
||
|
||
### MCU → BLE
|
||
|
||
返回设备身份信息:
|
||
|
||
|**字段**|**内容**|
|
||
|---|---|
|
||
|产品类别|Product Type|
|
||
|产品型号|Product Model|
|
||
|设备SN|Device SN(可选)|
|
||
|
||
BLE收到信息后:
|
||
|
||
1. 保存产品类别;
|
||
|
||
2. 保存产品型号;
|
||
|
||
3. 生成BLE广播数据。
|
||
|
||
广播内容:
|
||
|
||
```Plain Text
|
||
Product Type
|
||
+
|
||
Product Model
|
||
+
|
||
设备标识
|
||
```
|
||
|
||
注意:
|
||
|
||
> BLE上电后默认不启动配网广播。
|
||
>
|
||
>
|
||
|
||
只有收到 MCU 配网指令后才进入配网状态。
|
||
|
||
---
|
||
|
||
# 3\. 配网流程
|
||
|
||
## 3\.1 用户触发配网
|
||
|
||
### 功能说明
|
||
|
||
用户长按设备按键进入配网。
|
||
|
||
流程:
|
||
|
||
```Plain Text
|
||
用户操作
|
||
↓
|
||
MCU检测按键
|
||
↓
|
||
MCU发送配网指令
|
||
↓
|
||
BLE开启配网广播
|
||
↓
|
||
网关连接
|
||
↓
|
||
完成配网
|
||
```
|
||
|
||
---
|
||
|
||
## 3\.2 MCU通知BLE进入配网
|
||
|
||
### MCU → BLE
|
||
|
||
|**字段**|**内容**|
|
||
|---|---|
|
||
|命令|0x10|
|
||
|参数|配网模式\+配网超时时间|
|
||
|
||
BLE收到后:
|
||
|
||
1. 清除旧连接状态;
|
||
|
||
2. 开启BLE广播;
|
||
|
||
3. 等待APP或网关连接。
|
||
|
||
---
|
||
|
||
# 4\. BLE联网成功流程
|
||
|
||
## 4\.1 获取MCU版本信息
|
||
|
||
### 功能说明
|
||
|
||
BLE完成联网后,获取MCU版本信息并上传服务器。
|
||
|
||
流程:
|
||
|
||
```Plain Text
|
||
BLE联网成功
|
||
↓
|
||
BLE请求MCU版本
|
||
↓
|
||
MCU返回版本
|
||
↓
|
||
BLE组合自身版本信息
|
||
↓
|
||
上传服务器
|
||
```
|
||
|
||
版本信息:
|
||
|
||
|**类型**|**示例**|
|
||
|---|---|
|
||
|BLE版本|V1\.0\.0|
|
||
|MCU固件版本|V1\.0\.0|
|
||
|硬件版本|V1\.0\.0|
|
||
|
||
说明:
|
||
|
||
> 服务器出厂时已保存设备版本,因此该上报主要用于版本同步和调试。
|
||
>
|
||
>
|
||
|
||
---
|
||
|
||
# 5\. BLE状态同步机制
|
||
|
||
## 功能说明
|
||
|
||
BLE实时同步当前通信状态给 MCU。
|
||
|
||
### BLE → MCU
|
||
|
||
状态字段:
|
||
|
||
|**状态**|**描述**|
|
||
|---|---|
|
||
|Bit0|已完成配网|
|
||
|Bit1|已连接互联网(云)|
|
||
|Bit2|APP 在线|
|
||
|Bit3|手机已连接 BLE|
|
||
|Bit4|OTA 升级中|
|
||
|Bit5|配网模式中|
|
||
|Bit6\~Bit7|Reserved|
|
||
|
||
例如:
|
||
|
||
设备断电重新启动:
|
||
|
||
```Plain Text
|
||
BLE启动
|
||
↓
|
||
检测保存的配网信息
|
||
↓
|
||
发送回连广播
|
||
↓
|
||
成功连接网关
|
||
↓
|
||
BLE通知MCU:设备已完成配网
|
||
```
|
||
|
||
---
|
||
|
||
# 6\. BLE与MCU心跳机制
|
||
|
||
## 6\.1 心跳检测
|
||
|
||
### 功能说明
|
||
|
||
检测 BLE 与 MCU UART通信是否正常。
|
||
|
||
规则:
|
||
|
||
- BLE超过55秒没有收到 MCU 数据;
|
||
|
||
- BLE主动发送心跳。
|
||
|
||
---
|
||
|
||
## BLE → MCU
|
||
|
||
### 心跳请求
|
||
|
||
|**字段**|**内容**|
|
||
|---|---|
|
||
|命令|0x12|
|
||
|序号|Seq|
|
||
|
||
---
|
||
|
||
## MCU → BLE
|
||
|
||
### 心跳回复
|
||
|
||
|**字段**|**内容**|
|
||
|---|---|
|
||
|命令|0x13|
|
||
|状态|执行结果|
|
||
|
||
---
|
||
|
||
## 6\.2 心跳异常
|
||
|
||
判断:
|
||
|
||
```Plain Text
|
||
发送心跳
|
||
↓
|
||
等待回复
|
||
↓
|
||
失败
|
||
↓
|
||
次数+1
|
||
↓
|
||
连续3次失败
|
||
```
|
||
|
||
进入异常状态。
|
||
|
||
---
|
||
|
||
# 7\. MCU通信异常报警
|
||
|
||
## 7\.1 BLE内部异常记录
|
||
|
||
BLE保存:
|
||
|
||
|**参数**|**说明**|
|
||
|---|---|
|
||
|异常类型|MCU通信异常|
|
||
|时间|时间戳|
|
||
|
||
---
|
||
|
||
## 7\.2 报警上报协议
|
||
|
||
### BLE → Server
|
||
|
||
|序号|字段名称|字节长度|内容说明|
|
||
|---|---|---|---|
|
||
|1|包头|2|固定 `0x55AA`|
|
||
|2|包长度|2|`len(命令...校验和)`|
|
||
|3|命令|1|0x12|
|
||
|4|序列号|1|数据包序列号|
|
||
|5|Error Code|1|错误码|
|
||
|6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|
|
||
|
||
错误码定义:
|
||
|
||
|**错误码**|**描述**|
|
||
|---|---|
|
||
|0x01|MCU通信超时|
|
||
|0x02\~0xFF|预留|
|
||
|
||
---
|
||
|
||
## 离线处理
|
||
|
||
如果:
|
||
|
||
```Plain Text
|
||
BLE未联网
|
||
```
|
||
|
||
则:
|
||
|
||
```Plain Text
|
||
BLE保存报警记录
|
||
↓
|
||
等待BLE重新联网
|
||
↓
|
||
主动补报服务器
|
||
```
|
||
|
||
---
|
||
|
||
# 8\. APP通信流程
|
||
|
||
## 功能说明
|
||
|
||
设备完成配网后:
|
||
|
||
BLE作为透明传输通道。
|
||
|
||
```Plain Text
|
||
APP
|
||
↓
|
||
BLE
|
||
↓
|
||
MCU
|
||
------------
|
||
MCU
|
||
↓
|
||
BLE
|
||
↓
|
||
APP
|
||
```
|
||
|
||
BLE不解析业务数据。
|
||
|
||
---
|
||
|
||
# 9\. 摄像功能控制
|
||
|
||
## 9\.1 MCU控制录像/拍照
|
||
|
||
流程:
|
||
|
||
```Plain Text
|
||
MCU
|
||
↓
|
||
BLE
|
||
↓
|
||
迈科网关协议
|
||
↓
|
||
网关
|
||
↓
|
||
摄像头执行
|
||
```
|
||
|
||
BLE收到MCU命令:
|
||
|
||
- 开启录像;
|
||
|
||
- 停止录像;
|
||
|
||
- 拍照。
|
||
|
||
按照迈科协议转换发送。
|
||
|
||
---
|
||
|
||
# 10\. 音频播放功能
|
||
|
||
## 功能说明
|
||
|
||
MCU通知BLE播放指定Flash音频。
|
||
|
||
流程:
|
||
|
||
```Plain Text
|
||
MCU发送音频编号
|
||
↓
|
||
BLE查询Flash
|
||
↓
|
||
播放对应音频
|
||
```
|
||
|
||
例如:
|
||
|
||
```Plain Text
|
||
音频ID:
|
||
001 开机声音
|
||
002 报警声音
|
||
003 完成声音
|
||
```
|
||
|
||
---
|
||
|
||
# 11\. OTA升级流程
|
||
|
||
## 11\.1 OTA类型
|
||
|
||
OTA分为:
|
||
|
||
|**类型**|**说明**|
|
||
|---|---|
|
||
|MCU OTA|MCU固件升级|
|
||
|BLE OTA|BLE固件升级|
|
||
|
||
---
|
||
|
||
# 11\.2 MCU OTA流程
|
||
|
||
流程:
|
||
|
||
```Plain Text
|
||
APP发送OTA请求
|
||
↓
|
||
BLE判断类型
|
||
↓
|
||
MCU OTA
|
||
↓
|
||
转发升级
|
||
```
|
||
|
||
BLE处理:
|
||
|
||
删除OTA类型字段:
|
||
|
||
```Plain Text
|
||
APP OTA协议
|
||
↓
|
||
MCU OTA协议
|
||
```
|
||
|
||
---
|
||
|
||
## 升级数据流程
|
||
|
||
```Plain Text
|
||
APP发送数据包
|
||
↓
|
||
BLE
|
||
↓
|
||
MCU
|
||
|
||
|
||
MCU应答
|
||
↓
|
||
BLE转发APP
|
||
↓
|
||
APP继续发送下一包
|
||
```
|
||
|
||
---
|
||
|
||
升级完成:
|
||
|
||
MCU:
|
||
|
||
1. 校验MD5;
|
||
|
||
2. 保存固件;
|
||
|
||
3. 重启;
|
||
|
||
4. 切换固件。
|
||
|
||
成功:
|
||
|
||
```Plain Text
|
||
MCU OTA完成通知
|
||
↓
|
||
BLE + 类型
|
||
↓
|
||
APP
|
||
```
|
||
|
||
BLE增加:
|
||
|
||
```Plain Text
|
||
OTA类型 = MCU
|
||
```
|
||
|
||
---
|
||
|
||
# 11\.3 BLE OTA流程
|
||
|
||
流程:
|
||
|
||
```Plain Text
|
||
APP
|
||
↓
|
||
BLE判断OTA类型
|
||
↓
|
||
BLE自身升级
|
||
```
|
||
|
||
BLE:
|
||
|
||
1. 回复包长度;
|
||
|
||
2. 接收数据;
|
||
|
||
3. 校验;
|
||
|
||
4. 写入Flash;
|
||
|
||
5. 重启。
|
||
|
||
完成:
|
||
|
||
BLE发送:
|
||
|
||
```Plain Text
|
||
OTA完成通知
|
||
OTA类型 = BLE
|
||
```
|
||
|
||
---
|
||
|
||
# 12\. OTA异常处理
|
||
|
||
|**异常**|**处理**|
|
||
|---|---|
|
||
|数据超时|重新请求|
|
||
|MD5失败|升级失败|
|
||
|断电|恢复升级|
|
||
|BLE断链|保存进度|
|
||
|MCU升级失败|上报失败|
|
||
|
||
---
|
||
|
||
# 13\. BLE直连模式
|
||
|
||
场景:
|
||
|
||
```Plain Text
|
||
网关离线
|
||
↓
|
||
网关断开BLE
|
||
↓
|
||
APP扫描设备广播
|
||
↓
|
||
APP直接连接BLE
|
||
↓
|
||
控制设备
|
||
```
|
||
|
||
BLE支持:
|
||
|
||
- 回连广播;
|
||
|
||
- APP直连;
|
||
|
||
- 数据透传。
|
||
|
||
---
|
||
|
||
# 14\. 总体流程总结
|
||
|
||
```Plain Text
|
||
BLE上电
|
||
↓
|
||
获取MCU身份信息
|
||
↓
|
||
生成设备广播信息
|
||
↓
|
||
等待MCU配网指令
|
||
↓
|
||
开启配网广播
|
||
↓
|
||
连接网关
|
||
↓
|
||
获取MCU版本
|
||
↓
|
||
上传服务器
|
||
↓
|
||
状态同步MCU
|
||
↓
|
||
APP数据透传
|
||
↓
|
||
业务控制
|
||
↓
|
||
OTA升级
|
||
↓
|
||
异常监控
|
||
```
|
||
|
||
---
|
||
|
||
|
||
|