---
title: AI 像素屏文生图方案 - 蓝牙大数据传输
summary: AI 像素屏文生图方案的蓝牙大数据传输模块，通过 BLE 将图片/像素画/动画分块传输到设备。涵盖功能介绍（分块传输、ACK 确认、超时重试、进度回调）、交互流程时序图及详细数据发送流程（检查 BLE 在线→发送 DP→监听 ACK→前 4 包快速发送→第 5 包起逐包确认→失败重试最多 5 次→完成）。
---

## 蓝牙大数据传输

{/* <Image
  src='/images/solution/aiTextToImage/send1.jpg'
  style={{
    borderRadius: '10px',
    boxShadow: '0 0 5px rgba(0,0,0,0.3)',
    maxWidth: '1000px',
    marginTop: '20px',
  }}
/> */}

### 功能介绍

蓝牙大数据传输模块用于实现 **将面板端的图像、像素图、动画素材等大体积数据，通过蓝牙分包方式稳定下发到设备**。模块支持上千字节的数据发送，并实现：

- 分包发送

- ACK 包确认机制

- 超时重传

- 发送进度回调

适用于带有像素屏、灯效屏、动画显示功能的 BLE 设备。

### 功能说明

- 支持将面板侧的 base64 图像 转为 十六进制数据，再进行 BLE 分包传输。

- 按照协议将数据切片为固定大小（默认 1006 字节）。

- 通过 device.publishBLETransparentData 将每个分包透传给设备端。

- 支持设备返回确认包（ACK），客户端依次确认已接收分包。

- 支持失败分包重试（最高 5 次）。

- 支持透传过程进度实时上报。


### 交互流程

```mermaid
sequenceDiagram
    participant P as 面板端
    participant BLE as BLE透传模块
    participant Dev as 设备端


    P->>BLE: 传入 base64 图像数据
    BLE->>BLE: 转为 Hex
    BLE->>BLE: 分片 createPackets()
    P->>Dev: 发送 DP 下发开始指令
    Dev-->>P: DP 状态确认（成功）


    loop 分包发送
    BLE->>Dev: publishBLETransparentData(分包)
    Dev-->>BLE: 返回 ACK（当前包号）
    end


    alt 存在未确认包
    BLE->>Dev: 失败包重试（最多 5 次）
    Dev-->>BLE: ACK
    end


    BLE-->>P: 全部分包发送完成
    P-->>用户: 显示发送成功
```

### 数据发送流程

完整发送由 `sendPackets()` 完成：

#### （1）检查设备在线状态

``` ts
const isBleOnline = [...] // 判断 BLE 是否可用
```

#### （2）发送启动 DP
例如启动播放、提示设备进入接收状态：

```ts
sendDp(); // 发送 DP 指令
```

监听 dp 状态返回：

```ts
onDpDataChange(callback);
```
#### （3）监听设备 BLE 上报的 ACK
```ts
onBLETransparentDataReport(bleCallback);
```

解析 ACK：

```ts
parseConfirmation(res) {
  const index = parseInt(res.data.slice(12, 16), 16);
  return index;
}
```

#### （4）发送前 4 包（快速发送）

不等待确认，直接连发：
```ts
for (index < 4) publishFn(packets[index]);
```

#### （5）从第 5 包开始顺序发送并等待设备 ACK

```ts
await waitForConfirmation(index);
publishFn(packets[index]);
```

#### （6）补发失败包（最多 5 轮）
```ts
while (retries < 5) retryFailedPackets();
```
#### （7）发送完成

如果所有包都收到确认 → 返回成功

如果部分包仍未确认 → 返回失败