# 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升级 ↓ 异常监控 ``` ---