一、蓝牙支持情况
1. 微信小程序对蓝牙的支持情况
目前普遍使用的蓝牙规格:经典蓝牙和蓝牙低功耗。
经典蓝牙(蓝牙基础率/增强数据率):常用在对数据传输带宽有一定要求的大数据量传输场景上,比如需要传输音频数据的蓝牙音箱、蓝牙耳机等;
蓝牙低功耗 (Bluetooth Low Energy, BLE): 从蓝牙 4.0 起支持的协议,特点就是功耗极低、传输速度更快,常用在对续航要求较高且只需小数据量传输的各种智能电子产品中,比如智能穿戴设备、智能家电、传感器等。
IOS | 安卓 | 基础库 (当前开发基础库2.23+) |
||
---|---|---|---|---|
经典蓝牙 | 不支持 | 不支持,规划中 | / | |
蓝牙低功耗 | 主机模式(手机作为客户端,主动连接) | 微信客户端6.5.6及以上 | 微信客户端6.5.7及以上 | 1.1.0及以上 |
从机模式(手机作为服务端,被动连接) | 支持 | 支持 | 2.10.3及以上 | |
蓝牙信标(持续广播,但不建立连接) | 支持 | 支持 | 1.2.0及以上 |
2. IOS和安卓设备对蓝牙低功耗的支持情况
由于项目所使用的设备是低功耗蓝牙,故对此做调研:
IOS |
安卓 |
|
---|---|---|
连接设备数量 | 20个 | 6-8个 |
连接速度 | 正常 | 部分安卓机经常出现连接速度慢、连接超时的现象 |
传输数据量(MTU) | 20字节 | 20字节 |
设备搜索 | 支持 | 6.0及以上版本需要打开定位权限 |
注意点:1)数据量超过 MTU (20 字节)会导致错误,需要根据蓝牙设备协议进行分片传输。其中安卓分片之间的传输需要做延迟 250ms。
2)由于Android 从微信 6.5.7 开始支持,iOS 从微信 6.5.6 开始支持,因此小程序中需要做好版本检测(wx.getSystemInfoSync 获取系统信息)。
二、基本需求
1. 添加页面:开启蓝牙搜索,选择设备并输入识别码(蓝牙连接后发送识别码,匹配成功则与设备正式建立了连接)。
2. 首页:可进行蓝牙连接、切换、断开、消息监听与数据发送(识别码匹配)。
三、蓝牙API的基本使用
整理上述涉及蓝牙API的使用:
1. 添加页面(搜索蓝牙逻辑):
// 添加页
// 检查蓝牙是否开启
checkBluetoothOn(){
let sucCallback = this.startDiscovering
let errCallback = () => {
// 蓝牙未开启逻辑处理
}
// 如果蓝牙开启状态,就去搜索设备
this.getBlueState(errCallback, sucCallback)
},
// 判断手机蓝牙是否打开
getBlueState (errCallback, sucCallback) {
this.$getBlueState(errCallback).then(res=>{
if(res.errno === 0){
sucCallback ? sucCallback() : ''
} else {}
});
},
// 蓝牙搜索逻辑 15s关闭
startDiscovering(){
// 开始搜寻附近设备
this.$discoveryBlue(this.found)
setTimeout(()=>{
this.handleStopDiscovery()
}, 15000)
},
// 找到新设备就触发该方法 处理数据逻辑
found(res) {
var devices = res.devices;
devices.map(async item => {
// 对设备信息处理
})
},
handleStopDiscovery(){
let stopLoading = () => {
this.loading = false
// 其它关闭逻辑
}
this.$stopDiscoveryBlue(stopLoading, stopLoading)
},
2. 首页(连接逻辑):
onShow() {
// 第一次进来如果没有连接 去自动连接
let sucCallback = (this.blueDeviceList?.length && this.isAutoConnect) ?
this.autoConnect : this.isConnnected
let errCallback = () => {
// 未开启逻辑
}
// 如果蓝牙开启状态 就去连接
this.getBlueState(errCallback, sucCallback)
this.isAutoConnect =