# W13无卡取电设备 - 蓝牙通讯协议

> 版本同步记录：
> - 同步来源：Document/W13无卡取电设备 - 蓝牙通讯协议(1).pdf
> - 同步日期：2026-01-12
> - 说明：依据PDF抽取与差异比对，更新命令与参数细节，使Markdown与PDF一致。

## 1. 通讯方式
使用蓝牙BLE通讯

## 2. 帧结构定义

### 2.1 帧字段说明
| 字节范围 | 功能 | 长度（Bytes） | 取值范围（&H） | 备注 |
|---------|------|-------------|---------|------|
| B0~B1   | Head | 2           | 0xCC 0xC0 | 固定包头 |
| B2~B3   | Len  | 2           | 00~548   | 数据的总长度，包括包头和CRC校验，低地址在前 |
| B4~B5   | CRC  | 2           | 00~FF    | 整包CRC16校验 |
| B6~B7   | Frame | 2          | 00~FF    | 帧号 |
| B8~B9   | FramNum | 2        | 00~FF    | 帧总数 |
| B10     | Frame_Type | 1        | 00~FF    | 帧类型,命令字 |
| B11~B1023 | PARA_0~1012 | Max 1013 | 00~FF | 参数，不同类型有不同的参数字(不定长) |

### 2.2 帧结构示意图

```mermaid
sequenceDiagram
    participant PC as 上位机
    participant Device as 无卡取电设备
    
    PC->>Device: 发送命令帧
    Note over PC,Device: 帧结构：Head + Len + CRC + Frame + FramNum + Frame_Type + Parameters
    Device->>PC: 返回响应帧
    Note over Device,PC: 帧结构：Head + Len + CRC + Frame + FramNum + Frame_Type + Response
```

## 3. 详细命令列表

命令总览表（快速索引）：

| 序号 | 功能 | 方向 | 命令字 | 备注 |
|------|------|------|--------|------|
| 1 | 读版本号 | PC→MCU / MCU→PC | 0x01 | P0=0x00，请求；返回软件/硬件版本 |
| 2 | 设置无卡取电条件信息 | PC→MCU / MCU→PC | 0x08 | 条件参数设置；返回P0=0x01/0x02 |
| 3 | 设置无卡取电端口信息 | PC→MCU / MCU→PC | 0x09 | 端口配置；返回P0=0x01/0x02 |
| 4 | OTA升级开始 | PC→MCU | 0x0B | P0=0x01，进入bootloader等待OTA |
| 5 | 开启蓝牙打印 | PC→MCU / MCU→PC | 0x0C | 打印开关bit0..bit4；返回P0=0x01/0x02 |
| 6 | 雷达状态获得 | PC→MCU / MCU→PC | 0x11 | 开/关读取；返回端口状态位与有人/无人 |
| 7 | 测试按键功能 | PC→MCU / MCU→PC | 0x13 | 点按控制与状态返回 |
| 8 | 事件设置（门磁/卫浴灯） | PC→MCU / MCU→PC | 0x16 | 控制位bit0/bit1，事件时序参数与单位 |

### 3.1 读版本号
| 方向 | 命令字 | 参数 | 备注 |
|------|-------|------|------|
| PC→MCU | 0x01 | P0: 0x00 | 读取版本号命令 |
| MCU→PC | 0x01 | P0: 软件版本号<br>P1: 硬件版本号 | 返回版本信息 |

### 3.2 设置无卡取电条件信息（命令1）
| 方向 | 命令字 | 参数 | 备注 |
|------|-------|------|------|
| PC→MCU | 0x08 | P0: 有无逻辑标记<br>P1: 条件组<br>P2: 条件序号<br>P3~P4: 条件判定时间<br>P5: 条件判定时间单位<br>P6~P9: 端口1~10状态<br>P10: 触发阈值<br>P11~P12: 条件超时时间<br>P13: 条件超时时间单位 | 设置无卡取电条件 |
| MCU→PC | 0x08 | P0: 0x01(参数正确) / 0x02(参数错误) | 返回设置结果 |

### 3.3 设置无卡取电条件信息（命令2）
| 方向 | 命令字 | 参数 | 备注 |
|------|-------|------|------|
| PC→MCU | 0x09 | P0: 端口设备类型<br>P1: 端口设备地址<br>P2~P3: 端口设备回路<br>P4: 有人->无人阈值<br>P5: 虚拟端口号<br>P6: 回路是否启用检测统计<br>P7~P8: 回路检测统计时间<br>P9: 回路检测统计时间单位<br>P10: 无人->有人阈值 | 设置无卡取电条件 |
| MCU→PC | 0x09 | P0: 0x01(参数正确) / 0x02(参数错误) | 返回设置结果 |

### 3.4 OTA升级开始
| 方向 | 命令字 | 参数 | 备注 |
|------|-------|------|------|
| PC→MCU | 0x0B | P0: 0x01(开始升级) | 启动OTA升级，设备进入 bootloader，等待 OTA 升级 APP 连接 |

### 3.5 开启蓝牙打印
| 方向 | 命令字 | 参数 | 备注 |
|------|-------|------|------|
| PC→MCU | 0x0C | P0: bit0(系统调试信息打印开关)<br>bit1(设备驱动层打印调试信息打印开关)<br>bit2(蓝牙信息打印开关)<br>bit3(PC通讯打印开关)<br>bit4(临时调试信息打印开关) | 设置打印开关 |
| MCU→PC | 0x0C | P0: 0x01(参数正确) / 0x02(参数错误) | 返回设置结果 |

### 3.6 雷达状态获得
| 方向 | 命令字 | 参数 | 备注 |
|------|-------|------|------|
| PC→MCU | 0x11 | P0: 0x01(开启读取端口状态) / 0x02(关闭读取) | 请求雷达状态；端口状态值：0=释放，1=触发 |
| MCU→PC | 0x11 | P0: 有效端口数量<br>P1: 有无人状态（0x01=有人，0x02=无人）<br>P2: bit0(端口1状态), bit1(端口2状态), bit2(端口3状态), bit3(端口4状态)...（0=释放，1=触发） | 返回雷达状态 |

补充说明：
- 端口状态值：0=释放，1=触发。
- 典型端口位含义：bit0=端口1（门磁），bit1=端口2（洗手间），bit2=端口3（卧室），bit3=端口4（门口），后续端口依次类推。

### 3.7 测试按键功能
| 方向 | 命令字 | 参数 | 备注 |
|------|-------|------|------|
| PC→MCU | 0x13 | P0: 0x01(按键点按控制)<br>P1: bit0(按键1触发), bit1(按键2触发), bit2(按键3触发), bit3(按键4触发), bit4(按键5触发), bit5(按键6触发) | 测试按键功能（对应按键仅支持点按，不具备开关状态） |
| MCU→PC | 0x13 | P0: 0x01(参数正确) / 0x02(参数错误) | 返回设置结果 |

### 3.8 设置门磁开关走廊灯、卫浴雷达开关卫浴灯事件
| 方向 | 命令字 | 参数 | 备注 |
|------|-------|------|------|
| PC→MCU | 0x16 | P0: 控制位（bit0=门磁开关走廊灯事件；bit1=卫浴灯开关事件）<br>门磁开关走廊灯事件：<br>P1: 事件触发延迟时间数值<br>P2: 时间单位（1=秒，2=分，3=时）<br>P3: 事件持续时间数值<br>P4: 时间单位（1=秒，2=分，3=时）<br>P5: 事件释放延迟时间数值<br>P6: 时间单位（1=秒，2=分，3=时）<br>卫浴灯开关事件：<br>P7: 事件触发延迟时间数值<br>P8: 时间单位（1=秒，2=分，3=时）<br>P9: 事件持续时间数值<br>P10: 时间单位（1=秒，2=分，3=时）<br>P11: 事件释放延迟时间数值<br>P12: 时间单位（1=秒，2=分，3=时） | 设置事件参数（用于控制门磁亮走廊灯、卫浴雷达亮卫浴灯等） |
| MCU→PC | 0x16 | P0: 0x01(参数正确) / 0x02(参数错误) | 返回设置结果 |

## 4. 命令交互流程图

### 4.1 读版本号流程
```mermaid
flowchart TD
    A[上位机发送读版本号命令<br>Frame_Type=0x01, P0=0x00] --> B[设备接收命令]
    B --> C{命令解析正确?}
    C -->|是| D[设备准备版本信息]
    C -->|否| E[设备返回错误响应]
    D --> F[设备发送响应帧<br>Frame_Type=0x01, 包含软硬件版本号]
    E --> G[设备发送错误响应帧<br>Frame_Type=0x01, P0=0x02]
    F --> H[上位机接收版本信息]
    G --> I[上位机处理错误]
```

### 4.2 设置无卡取电条件流程
```mermaid
flowchart TD
    A[上位机发送设置条件命令<br>Frame_Type=0x08/0x09] --> B[设备接收命令]
    B --> C{参数验证通过?}
    C -->|是| D[设备保存条件设置]
    C -->|否| E[设备标记参数错误]
    D --> F[设备发送成功响应<br>P0=0x01]
    E --> G[设备发送失败响应<br>P0=0x02]
    F --> H[上位机确认设置成功]
    G --> I[上位机重新发送或处理错误]
```

## 5. 数据传输流程

```mermaid
sequenceDiagram
    participant PC as 上位机
    participant BLE as 蓝牙模块
    participant Device as 设备主控
    
    PC->>BLE: 发送BLE数据
    BLE->>Device: 转发数据帧
    Device->>BLE: 处理并返回响应
    BLE->>PC: 转发响应帧
```

## 6. 异常处理

| 错误类型 | 错误码 | 处理方式 |
|---------|-------|---------|
| 参数错误 | 0x02  | 重新发送正确参数 |
| 命令不支持 | -     | 检查命令字是否正确 |
| 通讯超时 | -     | 重新发送命令 |

---

