发布网友 发布时间:2022-04-21 01:51
共2个回答
懂视网 时间:2022-04-23 12:43
微信小程序整体上是很不错的,蓝牙接口的确“坑”,“网络端”的程序猿做“硬件接口”,本文主要和大家分享微信小程序蓝牙设备代码与错误整理,希望能帮助到大家。一些麻烦事儿
蓝牙设备比较多会把手机卡死,公司能扫描到200+个设备,直接把iphone5S的微信卡死了。
每次硬件操作之间一定加延迟,建议100ms,例如“打开蓝牙”与“开始扫描”间,“连接成功”与“获取服务”等等之类。不使用延迟可能会出现莫名其妙的错误,多见于Android端。
注意JS的异步、并发特性,特别在轮询service下的characteristic。小程序还不支持async,await(代码补全中有这两个关键字,但是编译不过)。
蓝牙的数据读写、advertisData的类型是ArrayBuffer,(引用小程序的注意:vConsole 无法打印出 ArrayBuffer 类型数据)。鞋童们请先把二进制数组、十六进制字符串弄明白吧,代码中有转换的方法(复制自github)。
初始化蓝牙适配器(wx.openBluetoothAdapter(OBJECT))、获取本机蓝牙适配器状态(wx.getBluetoothAdapterState(OBJECT)),这两个函数那个先调用不好说,自己玩吧,见下说明。
一些BUG
1、蓝牙在扫描过程中,获取本机蓝牙适配器状态(wx.getBluetoothAdapterState(OBJECT))。(Android独有,华为荣耀8、VIVO 7plus,6.5.13)
availableBoolean蓝牙适配器是否可用,值为true。
discoveringBoolean是否正在搜索设备,值为false。
https://github.com/FFiot/WX_Bluetooth/issues/1
2、蓝牙在扫描过程中,再次启动扫描wx.startBluetoothDevicesDiscovery(OBJECT):fail,errCode=10008。(Android独有,华为荣耀8、VIVO 7plus,6.5.13)BUG:蓝牙扫描中查询蓝牙状态 · Issue #1 · FFiot/WX_Bluetoothgithub.com蓝牙在扫描过程中,再次启动扫描wx.startBluetoothDevicesDiscovery(OBJECT):fail,errCode=10008。(Android独有,华为荣耀8、VIVO 7plus,6.5.13)
https://github.com/FFiot/WX_Bluetooth/issues/2
errorCode与errMsg混在一起。(IOS独有,IPHONE5s,微信6.5.15)
https://github.com/FFiot/WX_Bluetooth/issues/3
3、蓝牙在扫描service下character时,如果有多个service,只能正常获取第一个service下的character,其余service获取的chara与第一个service相同。(IOS独有,IPHONE5s,微信6.5.15)
移动设备蓝牙开启关闭用两种状态,触发wx.onBluetoothAdapterStateChange回调
1、wx.getBluetoothAdapterState(OBJECT)
关闭状态返回:drrCode:10000,errMsg:"getBluetoothAdapterState:fail"。此时开启蓝牙: wx.onBluetoothAdapterStateChange(CALLBACK)无回调。
开启状态返回:drrCode:10000,errMsg:"getBluetoothAdapterState:fail"。此时关闭蓝牙: wx.onBluetoothAdapterStateChange(CALLBACK)无回调。
2、wx.getBluetoothAdapterState(OBJECT)
关闭状态返回:drrCode:10001,errMsg:"openBluetoothAdapter:fail"。此时开启蓝牙:wx.onBluetoothAdapterStateChange(CALLBACK)有回调。
开启状态返回:errMsg:"openBluetoothAdapter:ok"。此时开启蓝牙:wx.onBluetoothAdapterStateChange(CALLBACK)有回调。
热心网友 时间:2022-04-23 09:51
流程是这样的:先初始化蓝牙适配器,然后获取本机蓝牙适配器的状态,然后开始搜索,当停止搜索以后在开始搜索,就会触发蓝牙是配置状态变化的事件,搜索完成以后获取所有已经发现的蓝牙设备,就可以将devices中的设备Array取出来了。然后就可以得到所有已经连接的设备了,至于链接功能,还没有真机可测,所以没有测试。
我的电脑上蓝牙连接的设备:
以下是案例代码:
// pages/bluetooth/bluetooth.js
Page({
data:{},
onLoad:function(options){
// 页面初始化 options为页面跳转所带来的参数
},
//初始化蓝牙适配器
openBluetooth:function(){
wx.openBluetoothAdapter({
success: function(res){
console.log(res.errMsg)
// success
wx.showToast({
title:"初始化蓝牙适配器成功",
ration:2000
})
},
})
},
//关闭蓝牙模块
closeBluetooth:function(){
wx.openBluetoothAdapter()
wx.closeBluetoothAdapter({
success: function(res){
// success
console.log("success"+res)
}
})
},
//获取本机蓝牙适配器状态
getBluetoothAdapterState:function(){
wx.getBluetoothAdapterState({
success: function(res){
// success
console.log("res:"+res)
console.log("errMsg:"+res.errMsg)
}
})
},
//监听蓝牙适配器状态变化事件
onBluetoothAdapterStateChange:function(){
wx.onBluetoothAdapterStateChange(function(res) {
console.log(`adapterState changed, now is`, res)
})
},
// 开始搜寻附近的蓝牙外围设备
startBluetoothDevicesDiscovery:function(){
wx.startBluetoothDevicesDiscovery({
success: function (res) {
console.log(res)
}
})
},
// 停止搜寻附近的蓝牙外围设备
stopBluetoothDevicesDiscovery:function(){
wx.stopBluetoothDevicesDiscovery({
success: function (res) {
console.log(res)
}
})
},
//获取所有已发现的蓝牙设备
getBluetoothDevices:function(){
wx.getBluetoothDevices({
success: function(res){
// success
console.log(res)
},
})
},
//监听寻找到新设备的事件
onBluetoothDeviceFound:function(){
wx.onBluetoothDeviceFound(function(res) {
// callback
console.log(res)
})
},
//根据 uuid 获取处于已连接状态的设备
getConnectedBluetoothDevices:function(){
wx.getConnectedBluetoothDevices({
success: function (res) {
console.log(res)
}
})
},
//连接低功耗蓝牙设备
createBLEConnection:function(){
wx.createBLEConnection({
deviceId: 'AC:BC:32:C1:47:80',
success: function(res){
// success
console.log(res)
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
},
//断开与低功耗蓝牙设备的连接
closeBLEConnection:function(){
wx.closeBLEConnection({
deviceId: 'AC:BC:32:C1:47:80',
success: function (res) {
console.log(res)
}
})
},
//监听低功耗蓝牙连接的错误事件,包括设备丢失,连接异常断开等等
onBLEConnectionStateChanged:function(){
wx.onBLEConnectionStateChanged(function(res) {
console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`)
})
},
//获取蓝牙设备所有 service(服务)
getBLEDeviceServices:function(){
wx.getBLEDeviceServices({
deviceId: '48:3B:38:88:E3:83',
success: function(res){
// success
console.log('device services:', res.services.serviceId)
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
},
//获取蓝牙设备所有 characteristic(特征值)
getBLEDeviceCharacteristics:function(){
wx.getBLEDeviceCharacteristics({
deviceId: '48:3B:38:88:E3:83',
serviceId: 'serviceId',
success: function(res){
// success
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
}
})