首页
学习
关于
友链
Search
1
小程序 蓝牙连接(出现的问题和一些解决方法)
310 阅读
2
颜色空间:RGB、HSV和HSL
131 阅读
3
小程序_连接蓝牙设备根据平台去打开定位权限
127 阅读
4
小程序 加快安卓手机向蓝牙设备发送大数据
92 阅读
5
侧边菜单切换的显示与隐藏,图标的 + 与 -
89 阅读
全部
感想
旅行
生活
学习
登录
Search
标签搜索
css
javascript
jquery
html
小程序
github
图床
假期
发布订阅
typecho
第一次
未来
快乐与忧伤
努力
奋斗
PicGo
倒计时
元旦
svg
vue
逸曦穆泽
累计撰写
35
篇文章
累计收到
2
条评论
首页
栏目
全部
感想
旅行
生活
学习
页面
学习
关于
友链
搜索到
1
篇与
蓝牙
的结果
2022-03-11
小程序 蓝牙连接(出现的问题和一些解决方法)
序:最近做小程序,要用到蓝牙模块的,不知道如何下手,没关系,看文档,看案例!看文档: 微信文档 看案例: 谷歌/百度/知乎等等,只要你觉得合适,都可以去尝试!一、小程序 BLE 开发 API 简介操作蓝牙适配器的共有 4 个:wx.openBluetoothAdapter 初始化蓝牙适配器 1 wx.closeBluetoothAdapter 关闭蓝牙模块 2 wx.getBluetoothAdapterState 获取本机蓝牙适配器状态 3 wx.onBluetoothAdapterStateChange 监听蓝牙适配器状态变化事件 4扫描和获取周围 BLE 设备的有4个(操作方式与普通蓝牙一样):wx.startBluetoothDevicesDiscovery 开始搜寻附近的蓝牙外围设备 5 wx.stopBluetoothDevicesDiscovery 停止搜寻附近的蓝牙外围设备 6 wx.getBluetoothDevices 获取所有已发现的蓝牙设备 7 wx.onBluetoothDeviceFound 监听寻找到新设备的事件 8连接BLE设备的2个:wx.createBLEConnection 连接低功耗蓝牙设备 9 wx.closeBLEConnection 断开与低功耗蓝牙设备的连接 10连接成功后,读写BLE对应特征对象的数据:wx.getConnectedBluetoothDevices 根据 uuid 获取处于已连接状态的设备 11 wx.getBLEDeviceServices 获取蓝牙设备所有 service(服务) 12 wx.getBLEDeviceCharacteristics 获取蓝牙设备所有 characteristic(特征值)13 wx.readBLECharacteristicValue 读取低功耗蓝牙设备的特征值的二进制数据值 14 wx.writeBLECharacteristicValue 向低功耗蓝牙设备特征值中写入二进制数据 15 wx.notifyBLECharacteristicValueChange 启用低功耗蓝牙设备特征值变化时的 notify 功能 16 wx.onBLECharacteristicValueChange 监听低功耗蓝牙设备的特征值变化 17 wx.onBLEConnectionStateChange 监听低功耗蓝牙连接的错误事件 18二、小程序蓝牙连接流程我的连接流程是这样的(代码我就不多贴了,只要你有思路、有想法,你就是黑马):初始化蓝牙设备之前,我做了一些的骚操作(不懂的查一下):1、打开定位/** 获取定位信息 */ getLocation: function () { let that = this; // 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限 wx.getSetting({ success: function (res) { if(res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true){ wx.showModal({ title: '是否授权当前位置', content: '需要获取你的地理位置,请确认授权,否则无法获蓝牙', success: function(mres){ if(mres.confirm){ wx.openSetting({ success (authData) { if(authData.authSetting['scope.userLocation'] == true){ wx.showToast({ title: '授权成功', icon: "success", duration: 1000 }) }else{ wx.showToast({ title: '授权失败', icon: "error", duration: 1000 }) } } }) }else if(mres.cancel){ wx.showToast({ title: '授权失败', icon: "error", duration: 1000 }) } } }) }else{ // 当前位置 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 wx.getLocation({ type: 'wgs84', success: function (res) { console.log('打开地理位置') }, }) } }, }) },2、这个放到一个初始化方法里面,,校验一下微信的蓝牙权限是否打开:init(){ let that = this; // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.bluetooth" 这个 scope wx.getSetting({ success(res) { // (1) 微信授权已关闭,弹窗打开 if (res.authSetting['scope.bluetooth'] != undefined && res.authSetting['scope.bluetooth'] == false) { wx.openSetting({ success (authData) { if(authData.authSetting['scope.bluetooth'] == true){ wx.showToast({ title: '授权成功', icon: "success", duration: 1000 }) that.openBluetoothAdapter(); // 打开蓝牙适配器 }else{ wx.showToast({ title: '授权失败', icon: "success", duration: 1000 }) } } }) } // (2) 'scope.bluetooth'属性不存在,需要授权 if(res.authSetting['scope.bluetooth'] == undefined){ wx.authorize({ scope: 'scope.bluetooth', success(res){ that.openBluetoothAdapter(); // 打开蓝牙适配器 } }) } // (3) 已经授权 if(res.authSetting['scope.bluetooth'] == true){ that.openBluetoothAdapter(); // 打开蓝牙适配器 } } }) }初始化蓝牙设备 1=》 (1_success)成功:开始搜索附近的蓝牙外围设备 5 , (1_fail)失败:获取蓝牙适配器状态 4;=》1_success:发现蓝牙设备 8 (对结果进行过滤,符合条件的设备进行连接) =》 连接到目标设备 9 ,连接成功,监听蓝牙低功耗连接状态的改变事件 18,关闭蓝牙搜索 6 =》 获取蓝牙低功耗设备所有服务 12 =》 获取某个服务下所有的特征值 13 (打印一下特征值有:notify,read,write特征的),监听蓝牙低功耗设备的特征值变化 17 =》 启用低功耗蓝牙设备特征值变化时的 notify 功能 16 ;=》1_fail:available 为true时,开始搜索附近的蓝牙外围设备 5,否则提示检查蓝牙是否打开你会发现,有好几个是一些流程中没用到的,但是,这是不可能发生的,存在必有其道理;(1)比如:你刷新时,你不可能再重新走一遍初始化蓝牙吧,那就要用到 获取蓝牙适配器状态 3 ,判断是 获取所有已发现的蓝牙设备 8 还是 开始搜索附近的蓝牙外围设备 5;(2)比如:要你断开主动断开蓝牙连接,断开与低功耗蓝牙设备的连接 10;(3)比如:短时间内,频繁退出或多次扫描 重新进入已连接蓝牙的小程序,在 onLoad 要用的 根据 uuid 获取处于已连接状态的设备 11(连接后,缓存 services 连接的 uuid 值),不然你已连接了设备,还一直搜不到;(4)比如:关闭蓝牙模块 2,获取所有已发现的蓝牙设备 7,读取低功耗蓝牙设备的特征值的二进制数据值 14,向低功耗蓝牙设备特征值中写入二进制数据 15 ,这个几个不用我多说了吧。三、总结:iOS 的坑是比较少一些的,Android 机的确实有很多不完善的地方,毕竟是百花齐放的嘛
2022年03月11日
310 阅读
0 评论
0 点赞