更新记录

v1.0.10(2024-02-21)

修复getBLEDeviceServices函数的错误

v1.0.9(2024-02-21)

兼容支付宝

v1.0.7(2024-01-23)

支持字节超过20的分片写入蓝牙数据,增加任务队列的写入

查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.6.2 × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

uniapp 微信蓝牙简单操作工具可直接上手使用

npm install uni-bluetooth

github: uni-bluetooth

npm: uni-bluetooth

uni插件市场: y-bluetooth

------- 2024-01-23 更新分片写入方法(请查看下方) -------

基础使用代码:

// 创建实例
const ble = UniBluetooth.BLE({
    deviceId: 要连接的设备localName或mac地址,
    onNotify: () => {},
    onClose: () => {}
})
// 写入数据
ble.writeValue(value)

有BUG可以直接评论区提出

案例

// 向设备写入16进制的字符串 '010041240100640000000000006a46'

const value = '010041240100640000000000006a46'
const ble = UniBluetooth.BLE({
    deviceId: 设备ID,
})
ble.writeValue(value, 'hex') // 'hex'表示value的值是16进制的,另外还有'string' 和 'buffer' 两种类型

------- 2024-01-23 更新分片写入 -------

蓝牙数据超过20字节的写入方法(分片写入)

官网说明:

1、并行调用多次会存在写失败的可能性。 2、APP不会对写入数据包大小做限制,但系统与蓝牙设备会限制蓝牙4.0单次传输的数据大小,超过最大字节数后会发生写入错误,建议每次写入不超过20字节。 3、若单次写入数据过长,iOS 上存在系统不会有任何回调的情况(包括错误回调)。

解决方案:

使用代码:

// 向设备写入16进制的字符串 '010041240100640000000000006a46010041240100640000000000006a46'

const value = '010041240100640000000000006a46'
const ble = UniBluetooth.BLE({
    deviceId: 设备ID,
})
// 第三个参数为true时会自动分片写入蓝牙数据
ble.writeValue(value, 'hex', true) // 'hex'表示value的值是16进制的,另外还有'string' 和 'buffer' 两种类型

排队写入

在分片写入之后,如果第二次写入太快的话,设备可能无法识别是否为同一次写入

// 向设备写入16进制的字符串 '010041240100640000000000006a46010041240100640000000000006a46'

const value = '010041240100640000000000006a46'
const ble = UniBluetooth.BLE({
    deviceId: 设备ID,
})
// 事件1
ble.eventListWriteValue({
    value,
    endDelay: 2000, // 2000ms后执行下一个eventListWriteValue
    loop: true
})
// 下面的方法会在事件1执行完毕后两秒执行
ble.eventListWriteValue({
    value,
})

UniBluetooth.BLE()

属性 类型 默认值 必填 说明
deviceId string 要连接的设备localname或mac地址
services string | RegExp 指定匹配的设备服务,若不指定则自动查询可操作的服务
reloadScan boolean false 是否重新扫描附近设备,false时先从本地以扫描过的设备中匹配设备
onNotify function 监听设备蓝牙消息
onClose function 监听设备蓝牙断开
返回参数
属性 类型 参数 说明
writeValue function (value, valueType) 向设备写入数据
close function 断开连接
connected function 连接设备

UniBluetooth.writeValue()

属性 类型 默认值 必填 说明
value string|buffer 写入蓝牙设备的数据
valueType string 'buffer' hex | string | buffer value如果不是buffer,则自动转换为buffer
loop boolean false 是否循环写入,当字节超过20的时候需要开启

UniBluetooth.eventListWriteValue(Object) 分片写入蓝牙数据

属性 类型 默认值 必填 说明
value string|buffer 写入蓝牙设备的数据
valueType string 'buffer' hex | string | buffer value如果不是buffer,则自动转换为buffer
loop boolean false 是否循环写入,当字节超过20的时候需要开启
startDelay number 0 执行函数前先sleep多少ms
endDelay number 100 执行完函数后sleep多少ms返回结束状态

连接流程解析:

  1. 初始化蓝牙

    UniBluetooth.dealOpenAdapter()
  2. 扫描匹配蓝牙

    UniBluetooth.blueScan()
  3. 连接蓝牙

    UniBluetooth.createConnect()
  4. 获取设备服务

    UniBluetooth.getBLEDeviceServices()
  5. 匹配服务特征

    UniBluetooth.matchServicesCharacteristics()
  6. 写入数据

    UniBluetooth.writeValue()

API

API 类型 参数 说明
BLE function (device) 创建蓝牙实例
dealOpenAdapter function 初始化蓝牙
blueScan function (deviceId: array | string, scanTime?: number) 扫描多个设备,全部扫描完毕返回成功
stopScan function 停止扫描
getBluetoothDevices function (deviceId?:string) 获取在蓝牙模块生效期间所有已发现的蓝牙设备。包括已经和本机处于连接状态的设备
createConnect function (device?: device) 连接扫描出来的设备
closeBLEConnection function (device: device) 关闭设备连接
getBLEDeviceServices function (option: {deviceId: string, matchFn?: function | RegExp, getCharacteristics: boolean}) 获取蓝牙设备所有服务
getBLEDeviceCharacteristics function (deviceId: string, serviceId: string) 获取蓝牙设备某个服务中所有特征值(characteristic)
reconnectDevice function (option:{deviceId: string}) 重新连接设备
writeBLE function (device, reload) 写入数据
toConnectDevice function (device) 连接设备流程
hex2buf function (value) 16进制转buffer
buf2hex function (value) buffer转16进制
str2buf function (value) string转buffer
device参数说明
属性 类型 默认值 必填 说明
deviceId string 要连接的设备localname或mac地址
services string | RegExp 指定匹配的设备服务,若不指定则自动查询可操作的服务

常见错误码

错误码 错误信息 说明
-1 already connect 已连接
0 ok 正常
10000 not init 未初始化蓝牙适配器
10001 not available 当前蓝牙适配器不可用
10002 no device 没有找到指定设备
10003 connection fail 连接失败
10004 no service 没有找到指定服务
10005 no characteristic 没有找到指定特征值
10006 no connection 当前连接已断开
10007 property not support 当前特征值不支持此操作
10008 system error 其余所有系统上报的异常
10009 system not support Android 系统特有,系统版本低于 4.3 不支持 BLE
10010 already connect 已连接
10011 need pin 配对设备需要配对码
10012 operate time out 连接超时
10013 invalid_data 连接 deviceId 为空或者是格式不正确

隐私、权限声明

1. 本插件需要申请的系统权限列表:

蓝牙

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问