更新记录
1.0.0(2026-04-24)
下载此版本
phy-ble-ota
PHY BLE OTA 固件升级SDK — 基于 uni-app BLE API 实现,支持 SLB (PHY6222) 和 SBK/SBH 两种蓝牙设备的 OTA 无线固件升级。
功能特点
- 支持 BLE 设备扫描、连接、断开
- 支持 SLB 设备(PHY6222 芯片)OTA 固件升级(.bin 文件)
- 支持 SBK/SBH 设备 OTA 固件升级(.hex / .hex16 文件)
- 自动识别设备类型和服务特性
- 支持多设备批量升级
- 支持 App 模式 → OTA 模式自动切换(SBK设备)
- 支持固件版本校验
- 完整的升级进度回调
- 兼容 Android 和 iOS 平台
适用平台
| 平台 |
支持 |
| App (Android) |
是 |
| App (iOS) |
是 |
| 微信小程序 |
是 |
安装
方式一:DCloud 插件市场(推荐)
- 在 DCloud 插件市场搜索
phy-ble-ota
- 点击"使用插件"导入到你的 uni-app 项目
- 或直接在项目中
npm install(如果已发布到 npm)
方式二:手动安装
将 uni_modules/phy-ble-ota 目录复制到你的 uni-app 项目根目录。
快速开始
1. 导入 SDK
import {
handleSearchDevice,
handleStopScanBleDevices,
handleListenOTACallBack,
selectOTAFile,
selectOTADevice,
otaDeviceList,
} from '@/uni_modules/phy-ble-ota/js_sdk'
2. 初始化并注册回调
onLoad() {
// 注册OTA事件回调
handleListenOTACallBack((errCode, errMsg, deviceID) => {
console.log(`[${deviceID}] ${errCode}: ${errMsg}`)
// 处理进度更新、错误、成功等事件
switch (errCode) {
case 11027: // 进度更新
const progress = errMsg.match(/进度条:(\d+\.?\d*)%/)
if (progress) {
this.upgradeProgress = parseFloat(progress[1])
}
break
case 11032: // 升级完成
console.log('升级成功!')
break
case 10001: // 错误
case 11030:
console.error('升级错误:', errMsg)
break
}
})
}
3. 扫描设备
// 开始扫描
handleSearchDevice(
true, // repeat - 是否重复上报
this.isAndroid, // 是否Android平台
(devices) => { // 发现设备回调
devices.forEach(device => {
if (device.name && device.deviceId) {
console.log('发现设备:', device.name, device.deviceId)
}
})
},
() => { // 扫描启动成功回调
console.log('扫描已启动')
}
)
// 停止扫描
handleStopScanBleDevices(() => {
console.log('扫描已停止')
})
4. 选择固件文件
// 从本地读取文件后传入
uni.readFile({
filePath: '/static/firmware.bin',
success: (res) => {
selectOTAFile(
'firmware.bin', // 文件名(根据后缀自动识别设备类型)
this.isAndroid, // 是否Android
res.data // 文件内容
)
}
})
5. 选择设备并开始升级
// 添加到升级列表
const deviceInfo = {
name: device.localName || device.name,
deviceId: device.deviceId,
mac: device.deviceId,
disconnectTimes: 0,
OTAType: 0,
famewareCheck: false
}
otaDeviceList.push(deviceInfo)
// 开始升级
selectOTADevice(otaDeviceList)
API 参考
蓝牙扫描与连接
| 函数 |
说明 |
handleSearchDevice(repeat, deviceType, devicesCall, startScanCall) |
扫描蓝牙设备。Android需先检查定位权限 |
handleStopScanBleDevices(call) |
停止扫描 |
handleConnectionBleDevice(deviceId) |
连接BLE设备,自动识别SLB/SBK服务 |
handleListenBLEScan(call) |
监听蓝牙适配器状态和扫描状态变化 |
closeBLEConnection(deviceId) |
关闭蓝牙连接 |
disconnectedDevice(deviceId) |
设备断开回调处理(根据文件类型分发到SLB或SBK) |
固件升级
| 函数 |
说明 |
selectOTAFile(fileName, phoneType, data) |
选择升级文件,根据后缀自动路由(.bin → SLB,.hex/.hex16 → SBK) |
selectOTADevice(deviceList) |
选择要升级的设备并自动连接第一个设备 |
handleListenOTACallBack(call) |
注册OTA事件回调 |
handleGetMTUSize() |
获取当前MTU大小(默认20字节) |
SLB 设备专用
| 函数 |
说明 |
SLBSelectedFile(mPath, data) |
处理SLB格式的bin文件,提取版本信息 |
SLBReadyCall(deviceId) |
SLB设备准备好,开始版本校验 |
SLBReceiveData(deviceId, data) |
处理SLB设备返回的数据 |
disconnectedSLBDevice(deviceId) |
SLB设备断开连接处理 |
sendSLBCMD(deviceId, cmd) |
向SLB设备发送命令 |
SBK/SBH 设备专用
| 函数 |
说明 |
SBHSelectedFile(mPath, data, deviceType) |
处理SBK格式的hex/hex16文件,拆分为分区数据 |
SBKAppReadyCall(deviceId) |
SBK App模式准备就绪 |
SBKOTAReadyCall(deviceId) |
SBK OTA模式准备就绪 |
AppModeReceiveData(value, deviceId) |
SBK App模式数据接收处理 |
SBKOTAReceiveData(deviceId, data) |
SBK OTA模式数据接收处理 |
disconnectedSBKDevice(deviceId) |
SBK设备断开连接处理 |
工具函数
| 函数 |
说明 |
message(content, call, showCancel, title) |
弹出提示框 |
ab2hex(buffer) |
ArrayBuffer 转十六进制字符串 |
blueToothWriteValue(hexString) |
十六进制字符串转 ArrayBuffer(用于 BLE 写入) |
hexToByteArray(hexString) |
十六进制字符串转字节数组 |
crc16_CCITT(str) |
CRC16-CCITT 校验 |
ToHexFormat(original, length) |
数字转指定位数十六进制字符串 |
UUID 常量
| 常量 |
值 |
说明 |
SLB_SERVICE_UUID |
0000FEB3-... |
SLB 蓝牙服务 UUID |
SLB_WRITECharacteristic_ID |
0000FED5-... |
SLB 写特征值(带响应) |
SLB_WRITEWithNoRsp_ID |
0000FED7-... |
SLB 写特征值(无响应) |
SLB_NOTIFYCharacteristic_ID |
0000FED8-... |
SLB 通知特征值 |
SBH_OTA_SERVICE_UUID |
5833FF01-... |
SBH OTA 蓝牙服务 UUID |
SBH_OTA_WRITE_Characteristic |
5833FF02-... |
SBH OTA 写特征值 |
SBH_OTA_NOTIFY_Characteristic |
5833FF03-... |
SBH OTA 通知特征值 |
SBH_OTA_WRITE_WithNoResponse |
5833FF04-... |
SBH OTA 写特征值(无响应) |
回调事件码
| 事件码 |
说明 |
类型 |
| 10001 |
蓝牙适配器不可用/初始化失败 |
错误 |
| 10003 |
定位未开启或授权失败 |
错误 |
| 10005 |
升级文件版本信息 |
信息 |
| 10006 |
文件格式不支持 |
错误 |
| 10007 |
BLE 开始扫描 |
信息 |
| 10008 |
BLE 扫描停止/蓝牙关闭 |
信息 |
| 10009 |
开始二次扫描 |
信息 |
| 11001 |
连接蓝牙设备 |
信息 |
| 11002 |
连接成功 |
成功 |
| 11003 |
连接断开/连接失败 |
信息 |
| 11006 |
发现SLB/SBK服务 |
成功 |
| 11007 |
未能找到OTA服务 |
错误 |
| 11008 |
服务UUID被占用 |
错误 |
| 11009 |
获取设备服务失败 |
错误 |
| 11010 |
SBH App模式确认 |
成功 |
| 11011 |
SBK OTA模式确认 |
成功 |
| 11012 |
SLB OTA特性确认 |
成功 |
| 11013 |
特性异常 |
错误 |
| 11014 |
文件与设备不匹配 |
错误 |
| 11017 |
开启特征值监听失败 |
错误 |
| 11019 |
写数据失败 |
错误 |
| 11020/11021/11022 |
准备好开始交互 |
成功 |
| 11025 |
设备固件版本 |
信息 |
| 11026 |
升级成功/重启指令 |
成功 |
| 11027 |
升级进度 |
进度 |
| 11030 |
版本校验失败 |
错误 |
| 11032 |
升级完成后移出列表 |
成功 |
支持的设备
SLB 设备 (PHY6222)
- 固件格式:
.bin
- 蓝牙服务:
FEB3
- 特征值: FED5(写), FED7(写无响应), FED8(通知)
SBK/SBH 设备
- 固件格式:
.hex / .hex16
- 蓝牙服务:
5833FF01
- 特征值: FF02(写), FF03(通知), FF04(写无响应)
- 支持 App → OTA 模式自动切换
项目结构
uni_modules/phy-ble-ota/
├── package.json # 插件清单
├── readme.md # 本文档
└── js_sdk/
├── index.js # 统一入口,重新导出所有公开API
├── blemanager.js # BLE管理器 - 设备扫描/连接/服务发现
├── bleuniapi.js # uni-app BLE API 底层封装
├── sbk_ota.js # SBK/SBH 设备 OTA 协议实现
├── slb_ota.js # SLB 设备 OTA 协议实现
└── util.js # 工具函数(CRC、Hex转换等)
开发指南
导入方式
// 方式1:从入口文件导入(推荐)
import { handleSearchDevice, selectOTAFile } from '@/uni_modules/phy-ble-ota/js_sdk'
// 方式2:按需导入具体模块
import { handleWriteAction } from '@/uni_modules/phy-ble-ota/js_sdk/bleuniapi.js'
完整升级流程
- 初始化 → 注册
handleListenOTACallBack 监听升级事件
- 选择文件 →
selectOTAFile(fileName, isAndroid, fileData)
- 扫描设备 →
handleSearchDevice(true, isAndroid, onDeviceFound, onScanStart)
- 选择设备 → 创建 deviceInfo 对象,添加到
otaDeviceList
- 开始升级 →
selectOTADevice(otaDeviceList) — 自动连接并开始升级
- 监控进度 → 通过回调中的事件码
11027 获取进度百分比
- 升级完成 → 收到事件码
11032 表示升级成功
许可证
MIT
平台兼容性
phy-ble-ota
PHY BLE OTA 固件升级SDK — 基于 uni-app BLE API 实现,支持 SLB (PHY6222) 和 SBK/SBH 两种蓝牙设备的 OTA 无线固件升级。
功能特点
- 支持 BLE 设备扫描、连接、断开
- 支持 SLB 设备(PHY6222 芯片)OTA 固件升级(.bin 文件)
- 支持 SBK/SBH 设备 OTA 固件升级(.hex / .hex16 文件)
- 自动识别设备类型和服务特性
- 支持多设备批量升级
- 支持 App 模式 → OTA 模式自动切换(SBK设备)
- 支持固件版本校验
- 完整的升级进度回调
- 兼容 Android 和 iOS 平台
适用平台
| 平台 |
支持 |
| App (Android) |
是 |
| App (iOS) |
是 |
| 微信小程序 |
是 |
安装
方式一:DCloud 插件市场(推荐)
- 在 DCloud 插件市场搜索
phy-ble-ota
- 点击"使用插件"导入到你的 uni-app 项目
- 或直接在项目中
npm install(如果已发布到 npm)
方式二:手动安装
将 uni_modules/phy-ble-ota 目录复制到你的 uni-app 项目根目录。
快速开始
1. 导入 SDK
import {
handleSearchDevice,
handleStopScanBleDevices,
handleListenOTACallBack,
selectOTAFile,
selectOTADevice,
otaDeviceList,
} from '@/uni_modules/phy-ble-ota/js_sdk'
2. 初始化并注册回调
onLoad() {
// 注册OTA事件回调
handleListenOTACallBack((errCode, errMsg, deviceID) => {
console.log(`[${deviceID}] ${errCode}: ${errMsg}`)
// 处理进度更新、错误、成功等事件
switch (errCode) {
case 11027: // 进度更新
const progress = errMsg.match(/进度条:(\d+\.?\d*)%/)
if (progress) {
this.upgradeProgress = parseFloat(progress[1])
}
break
case 11032: // 升级完成
console.log('升级成功!')
break
case 10001: // 错误
case 11030:
console.error('升级错误:', errMsg)
break
}
})
}
3. 扫描设备
// 开始扫描
handleSearchDevice(
true, // repeat - 是否重复上报
this.isAndroid, // 是否Android平台
(devices) => { // 发现设备回调
devices.forEach(device => {
if (device.name && device.deviceId) {
console.log('发现设备:', device.name, device.deviceId)
}
})
},
() => { // 扫描启动成功回调
console.log('扫描已启动')
}
)
// 停止扫描
handleStopScanBleDevices(() => {
console.log('扫描已停止')
})
4. 选择固件文件
// 从本地读取文件后传入
uni.readFile({
filePath: '/static/firmware.bin',
success: (res) => {
selectOTAFile(
'firmware.bin', // 文件名(根据后缀自动识别设备类型)
this.isAndroid, // 是否Android
res.data // 文件内容
)
}
})
5. 选择设备并开始升级
// 添加到升级列表
const deviceInfo = {
name: device.localName || device.name,
deviceId: device.deviceId,
mac: device.deviceId,
disconnectTimes: 0,
OTAType: 0,
famewareCheck: false
}
otaDeviceList.push(deviceInfo)
// 开始升级
selectOTADevice(otaDeviceList)
API 参考
蓝牙扫描与连接
| 函数 |
说明 |
handleSearchDevice(repeat, deviceType, devicesCall, startScanCall) |
扫描蓝牙设备。Android需先检查定位权限 |
handleStopScanBleDevices(call) |
停止扫描 |
handleConnectionBleDevice(deviceId) |
连接BLE设备,自动识别SLB/SBK服务 |
handleListenBLEScan(call) |
监听蓝牙适配器状态和扫描状态变化 |
closeBLEConnection(deviceId) |
关闭蓝牙连接 |
disconnectedDevice(deviceId) |
设备断开回调处理(根据文件类型分发到SLB或SBK) |
固件升级
| 函数 |
说明 |
selectOTAFile(fileName, phoneType, data) |
选择升级文件,根据后缀自动路由(.bin → SLB,.hex/.hex16 → SBK) |
selectOTADevice(deviceList) |
选择要升级的设备并自动连接第一个设备 |
handleListenOTACallBack(call) |
注册OTA事件回调 |
handleGetMTUSize() |
获取当前MTU大小(默认20字节) |
SLB 设备专用
| 函数 |
说明 |
SLBSelectedFile(mPath, data) |
处理SLB格式的bin文件,提取版本信息 |
SLBReadyCall(deviceId) |
SLB设备准备好,开始版本校验 |
SLBReceiveData(deviceId, data) |
处理SLB设备返回的数据 |
disconnectedSLBDevice(deviceId) |
SLB设备断开连接处理 |
sendSLBCMD(deviceId, cmd) |
向SLB设备发送命令 |
SBK/SBH 设备专用
| 函数 |
说明 |
SBHSelectedFile(mPath, data, deviceType) |
处理SBK格式的hex/hex16文件,拆分为分区数据 |
SBKAppReadyCall(deviceId) |
SBK App模式准备就绪 |
SBKOTAReadyCall(deviceId) |
SBK OTA模式准备就绪 |
AppModeReceiveData(value, deviceId) |
SBK App模式数据接收处理 |
SBKOTAReceiveData(deviceId, data) |
SBK OTA模式数据接收处理 |
disconnectedSBKDevice(deviceId) |
SBK设备断开连接处理 |
工具函数
| 函数 |
说明 |
message(content, call, showCancel, title) |
弹出提示框 |
ab2hex(buffer) |
ArrayBuffer 转十六进制字符串 |
blueToothWriteValue(hexString) |
十六进制字符串转 ArrayBuffer(用于 BLE 写入) |
hexToByteArray(hexString) |
十六进制字符串转字节数组 |
crc16_CCITT(str) |
CRC16-CCITT 校验 |
ToHexFormat(original, length) |
数字转指定位数十六进制字符串 |
UUID 常量
| 常量 |
值 |
说明 |
SLB_SERVICE_UUID |
0000FEB3-... |
SLB 蓝牙服务 UUID |
SLB_WRITECharacteristic_ID |
0000FED5-... |
SLB 写特征值(带响应) |
SLB_WRITEWithNoRsp_ID |
0000FED7-... |
SLB 写特征值(无响应) |
SLB_NOTIFYCharacteristic_ID |
0000FED8-... |
SLB 通知特征值 |
SBH_OTA_SERVICE_UUID |
5833FF01-... |
SBH OTA 蓝牙服务 UUID |
SBH_OTA_WRITE_Characteristic |
5833FF02-... |
SBH OTA 写特征值 |
SBH_OTA_NOTIFY_Characteristic |
5833FF03-... |
SBH OTA 通知特征值 |
SBH_OTA_WRITE_WithNoResponse |
5833FF04-... |
SBH OTA 写特征值(无响应) |
回调事件码
| 事件码 |
说明 |
类型 |
| 10001 |
蓝牙适配器不可用/初始化失败 |
错误 |
| 10003 |
定位未开启或授权失败 |
错误 |
| 10005 |
升级文件版本信息 |
信息 |
| 10006 |
文件格式不支持 |
错误 |
| 10007 |
BLE 开始扫描 |
信息 |
| 10008 |
BLE 扫描停止/蓝牙关闭 |
信息 |
| 10009 |
开始二次扫描 |
信息 |
| 11001 |
连接蓝牙设备 |
信息 |
| 11002 |
连接成功 |
成功 |
| 11003 |
连接断开/连接失败 |
信息 |
| 11006 |
发现SLB/SBK服务 |
成功 |
| 11007 |
未能找到OTA服务 |
错误 |
| 11008 |
服务UUID被占用 |
错误 |
| 11009 |
获取设备服务失败 |
错误 |
| 11010 |
SBH App模式确认 |
成功 |
| 11011 |
SBK OTA模式确认 |
成功 |
| 11012 |
SLB OTA特性确认 |
成功 |
| 11013 |
特性异常 |
错误 |
| 11014 |
文件与设备不匹配 |
错误 |
| 11017 |
开启特征值监听失败 |
错误 |
| 11019 |
写数据失败 |
错误 |
| 11020/11021/11022 |
准备好开始交互 |
成功 |
| 11025 |
设备固件版本 |
信息 |
| 11026 |
升级成功/重启指令 |
成功 |
| 11027 |
升级进度 |
进度 |
| 11030 |
版本校验失败 |
错误 |
| 11032 |
升级完成后移出列表 |
成功 |
支持的设备
SLB 设备 (PHY6222)
- 固件格式:
.bin
- 蓝牙服务:
FEB3
- 特征值: FED5(写), FED7(写无响应), FED8(通知)
SBK/SBH 设备
- 固件格式:
.hex / .hex16
- 蓝牙服务:
5833FF01
- 特征值: FF02(写), FF03(通知), FF04(写无响应)
- 支持 App → OTA 模式自动切换
项目结构
uni_modules/phy-ble-ota/
├── package.json # 插件清单
├── readme.md # 本文档
└── js_sdk/
├── index.js # 统一入口,重新导出所有公开API
├── blemanager.js # BLE管理器 - 设备扫描/连接/服务发现
├── bleuniapi.js # uni-app BLE API 底层封装
├── sbk_ota.js # SBK/SBH 设备 OTA 协议实现
├── slb_ota.js # SLB 设备 OTA 协议实现
└── util.js # 工具函数(CRC、Hex转换等)
开发指南
导入方式
// 方式1:从入口文件导入(推荐)
import { handleSearchDevice, selectOTAFile } from '@/uni_modules/phy-ble-ota/js_sdk'
// 方式2:按需导入具体模块
import { handleWriteAction } from '@/uni_modules/phy-ble-ota/js_sdk/bleuniapi.js'
完整升级流程
- 初始化 → 注册
handleListenOTACallBack 监听升级事件
- 选择文件 →
selectOTAFile(fileName, isAndroid, fileData)
- 扫描设备 →
handleSearchDevice(true, isAndroid, onDeviceFound, onScanStart)
- 选择设备 → 创建 deviceInfo 对象,添加到
otaDeviceList
- 开始升级 →
selectOTADevice(otaDeviceList) — 自动连接并开始升级
- 监控进度 → 通过回调中的事件码
11027 获取进度百分比
- 升级完成 → 收到事件码
11032 表示升级成功
许可证
MIT