• 遇到的一些问题
  1. BLE相关的好多函数都是异步的,但是BLE的操作又必须按照顺序流程来,否则就会出现问题,所以这里得嵌套大量的回调函数。
  2. 普通回调函数中this拿不到data数据的问题
    1. 原因:小程序在回调函数中调用this数据报错是因为在程序运行过程中,this对象也会发生改变,导致在普通回调函数之中改变后的this对象没有相关数据,即会报错
    2. 解决方法:1)使用全局变量保存这个this;2)使用箭头函数

  • 下面开始正式开发ble设备搜索功能,为了更加方便的管理ble,对微信的小程序的ble进行的封装,并在ble.js文件中实现对应的接口功能

1. BLE初始化接口,在该接口里面,首先去打开蓝牙适配器,并且去设置蓝牙适配器状态监听回调,防止用户在使用小程序过程中又把蓝牙给关闭了。

var bleInitFlag = false; // ble是否初始化/**
* @功能: ble初始化
* @参数:
*  cb[in]: 初始化结果状态回调, true表示初始化成功
* @返回:
* @备注: 初始化之前请检查一下是否有蓝牙权限
*/
function Init(cb) {if (bleInitFlag) {// 防止重复初始化if (typeof cb == 'function') {cb(true);}return;}// 初始化蓝牙模块wx.openBluetoothAdapter({mode: 'central',success: (res) => {console.log("初始化蓝牙模块成功!");bleInitFlag = true;if (typeof cb == 'function') {cb(true);}},fail: (res) => {console.log("初始化蓝牙模块失败!");bleInitFlag = false;if (typeof cb == 'function') {cb(false);}}});// 蓝牙适配器状态监听wx.onBluetoothAdapterStateChange((res) => {console.log("蓝牙适配器状态改变"+res.available);bleInitFlag = res.available;});
}

2. 释放接口,当不使用蓝牙了,过程序退出了,调用该接口

/**
* @功能: 页面释放的时候调用
* @参数:
*  cb[in]: 关闭蓝牙回调失败成功回调
* @返回:
*/
function DeInit(cb) {// if (!bleInitFlag) {//     return;// }wx.closeBluetoothAdapter({success: (res) => {console.log("关闭蓝牙适配器成功");if (typeof cb == 'function') {cb(true);}},fail: (res) => {console.log("关闭蓝牙适配器失败");if (typeof cb == 'function') {cb(false);}},});// 关闭蓝牙适配器状态监听wx.offBluetoothAdapterStateChange();bleInitFlag = false;
}

3. 开始搜索和停止搜索的接口

/**
* @功能: 开始搜索
* @参数:
*  cb[in]: 搜索到设备的回调函数
* @返回:
*/
function StartDiscovery(cb) {if (!bleInitFlag) {console.log("搜索失败,BLE未初始化");return}// 开始搜索附近的蓝牙外围设备wx.startBluetoothDevicesDiscovery({allowDuplicatesKey: true //允许重复上报设备,主要是为了统计信号强度})// 监听扫描到新设备事件wx.onBluetoothDeviceFound((res) => {if (typeof cb == 'function') {cb(res);}});
}/**
* @功能: 停止搜索
* @参数:
* @返回:
*/
function StopDiscovery() {if (!bleInitFlag) {return;}wx.stopBluetoothDevicesDiscovery();
}

4. 获取蓝牙适配器状态的接口

/**
* @功能: 获取BLE状态
* @参数:
* @返回:true表示可用状态,false表示不可用
*/
function getBleStatus() {return bleInitFlag;
}

5. 在搜索按键事件中调用这些接口实现相关功能

1)检查是否有对应的BLE权限

2)初始化成功后,就去调用搜索

3)把搜索到的设备,解析对应的字段显示在对应的设备列表中

4)ble搜索是比较耗资源和电量的,所以在页面隐藏的时候,就停止搜索

这里做了大量的交互处理,比如:1)没有权限的时候,就重新去请求权限。2)如果初始化蓝牙失败,弹出提示框提示用户检查蓝牙或者权限是否打开。3)由于有时候初始化适配器需要较长的时间,所以点击按钮后,会弹出一个开始搜索的loading提示框,防止按键按了以后误以为没反应。

08_微信小程序-BLE低功耗蓝牙开发-设备搜索相关推荐

  1. 01_微信小程序-BLE低功耗蓝牙开发-注册和工具安装

    1. 访问微信公众号平台,注册小程序 注意:一个邮箱只能注册一个微信小程序 2. 下载安装开发工具 这里有个重要的东西AppID,注册申请的时候生成的.我们这里只做学习用,所以可以点击后面的测试号,会 ...

  2. 20_微信小程序-BLE低功耗蓝牙开发-发布小程序

    所有功能测试OK了,就剩下最后一步了,那就是把开发好的微信小程序发布出去. 1. 填写小程序信息,登录小程序管理平台,在设置->填写信息,里面填写小程序相关信息(后面我直接把小程序名称改为&qu ...

  3. 微信小程序与低功耗蓝牙通信-接受硬件端发送来的数据(四)

    接受数据只要 wx.notifyBLECharacteristicValueChange监听器打开, wx.onBLECharacteristicValueChange是接受数据的函数. 数据接收到后 ...

  4. 微信小程序与低功耗蓝牙通信-往硬件端发送数据(三)

    准备工作: 软件:微信小程序 硬件: 蓝牙设备:hc-09 单片机:stm32 微信小程序往硬件端发送数据,对应的函数是wx.writeBLECharacteristicValue,他的参数是:(对应 ...

  5. 【微信小程序】使用uni-app——开发首页搜索框导航栏(可同时兼容APP、H5、小程序)

    目录 前言 App.H5效果 小程序效果 一.兼容APP.H5的方式 二.兼容小程序 三.实现同时兼容 前言 首页都会提供一个搜索框给到客户,让客户自己去搜索自己想要的内容,这里就需要导航栏,来实现搜 ...

  6. 微信小程序直连蓝牙实现控制继电器及串口调试功能--全系统开源工程

    微信小程序直连蓝牙硬件设备,设备控制继电器,灯等设备,同时实现蓝牙串口调试助手等功能,设备能够输出微信小程序发出的蓝牙数据,可为工程师在手机上实现设备串口调试功能,当工程师去现场调试设备,没有带电脑, ...

  7. 【微信小程序控制硬件15 】 开源一个微信小程序,支持蓝牙快速配网+WiFi双控制ESP32-C3应用示范;(附带Demo)

    文章目录 一.前言 二. Blufi乐鑫自研的蓝牙配网协议 ESP32 配网流程 流程图 三.相关代码 3.1 蓝牙快速配网 3.2 蓝牙本地控制 2.3 外设驱动 3.1 蓝牙搜索 3.2 蓝牙服务 ...

  8. 微信小程序通过低功耗蓝牙设备进行定位及测距(二)

    定位及测距的原理 微信小程序搜索附近蓝牙设备,通过指定蓝牙名称获取信号轻度rssi,再通过信号强度转化为距离,进而实现定位和测距.(具体实现看代码) 信号响度转距离的公式 代码实现 var point ...

  9. ble 低功耗蓝牙开发学习 嵌入式交流学习

    ble 低功耗蓝牙开发学习 嵌入式交流学习 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 这篇文章教你学会低功耗蓝牙开发,从0到深入,适合自学的学生.初级工程师 前言 随着疫情爆发 ...

最新文章

  1. 2015年企业如何避免索尼式的安全悲剧?
  2. 【JPA操作】CriteriaQuery多条件查询
  3. 深度学习(七)—— GAN
  4. linux标准IO实验,Linux系统编程(第三篇) 标准IO.pdf
  5. 12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?
  6. 成为高级网络管理员必学知识
  7. putty如何登陆oracle,利用putty的SSH tunnel连接Oracle
  8. Nginx服务器开启gzip压缩功能额必要性
  9. 浮动路由与VRRP的概念
  10. 在Centos7上配置docker运行DotNetCore项目
  11. 精伦身份证阅读器php_精伦IDR210台式身份证读卡器
  12. 弥补性能鸿沟,傲腾在企业应用中加速普及
  13. 计算机软件故障排除ppt,常见故障分析.ppt
  14. 2019年2月CNNIC第43次《中国互联网络发展状况统计报告》
  15. oracle run {,Oracle runInstaller 安装不显示 OUI 处理 说明
  16. word论文排版插件_word论文排版自动编号设置
  17. easyUI设置表格中的背景色
  18. MySQL中文存到数据库是,springMVC保存数据到mysql数据库中文乱码问题解决方法
  19. Openwrt 15.05.1增加对MT7620a NAND flash的支持
  20. 用友通T3联不上服务器

热门文章

  1. python实现线性回归之梯度下降法,梯度下降详解
  2. 【NP问题】P问题,NP问题,NPC问题,NPH问题
  3. 汇编学习 安装DOSBOX及debug.exe教程
  4. 待业一年多,我终于找到工作啦,月薪1.5万,双休不加班
  5. 《深度学习之TensorFlow》reading notes(3)—— MNIST手写数字识别之二
  6. 神经网络四:Softmax以及与Sigmoid的关系
  7. gets与puts的使用,Str系列字符串的使用
  8. 微信小程序 - 布局基础
  9. 工程伦理2021年春季学期线上课程习题全部解答
  10. Log4j详细使用教程