小程序支持蓝牙连接,来讲讲小程序蓝牙连接过程

demo

1、初始化蓝牙设备

  • 其他蓝牙相关 API 必须在 wx.openBluetoothAdapter 调用之后使用。否则 API 会返回错误(errCode=10000)。
  • 关闭蓝牙模块。调用该方法将断开所有已建立的连接并释放系统资源。建议在使用蓝牙流程后,与 wx.openBluetoothAdapter 成对调用。
  • 官方建议与关闭蓝牙模块一起使用
wx.openBluetoothAdapter({success (res) {console.log(res)}
})

2、打开蓝牙模块之后就可以监听蓝牙

wx.onBluetoothAdapterStateChange(function (res) {console.log('adapterState changed, now is', res)
})

通过该接口监听蓝牙设备状态。蓝牙适配器是否可用,蓝牙适配器是否处于搜索状态将会在该接口通知

3、获得蓝牙适配器状态

wx.getBluetoothAdapterState({success (res) {console.log(res)}
})

判断蓝牙是否可用

4、开始搜索蓝牙

成功后打开寻找到新设备的事件的回调函数;

新设备回调将会在该回调函数被调用

wx.startBluetoothDevicesDiscovery({services: ['FEE7'],success (res) {console.log(res)//成功后
wx.onBluetoothDeviceFound(function(devices) {console.log('new device list has founded')console.dir(devices)console.log(ab2hex(devices[0].advertisData))
})}
})

5、在回调中匹配参数确定要查找的设备,先关闭搜索。再连接该设备

停止查找

wx.stopBluetoothDevicesDiscovery({success (res) {console.log(res)}
})

连接设备

wx.createBLEConnection({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId,success (res) {console.log(res)}
}) 

6、连接成功获取蓝牙设备所有服务(service)。通过isPrimary字段判断

wx.getBLEDeviceServices({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId,success (res) {console.log('device services:', res.services)}
})

7、获取蓝牙设备该服务中所有特征值(characteristic)。

wx.getBLEDeviceCharacteristics({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId,// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取serviceId,success (res) {console.log('device getBLEDeviceCharacteristics:', res.characteristics)}
})

8、启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值。

wx.notifyBLECharacteristicValueChange({state: true, // 启用 notify 功能// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接  deviceId,// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取serviceId,// 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取characteristicId,success (res) {console.log('notifyBLECharacteristicValueChange success', res.errMsg)}
})

9、监听低功耗蓝牙设备的特征值变化事件。必须先启用 notifyBLECharacteristicValueChange 接口才能接收到设备推送的 notification。(设备推送的消息将会再该事件被回调)

// ArrayBuffer转16进度字符串示例
function ab2hex(buffer) {let hexArr = Array.prototype.map.call(new Uint8Array(buffer),function(bit) {return ('00' + bit.toString(16)).slice(-2)})return hexArr.join('');
}
wx.onBLECharacteristicValueChange(function(res) {console.log(`characteristic ${res.characteristicId} has changed, now is ${res.value}`)console.log(ab2hex(res.value))
})

10-1、向特征值写入数据(向蓝牙写入设备)必须设备的特征值支持 write 才可以成功调用。

注意,安卓只支持20个字节,超过需要多次写入,ios支持40字节。

// 向蓝牙设备发送一个0x00的16进制数据
let buffer = new ArrayBuffer(1)
let dataView = new DataView(buffer)
dataView.setUint8(0, 0)wx.writeBLECharacteristicValue({// 这里的 deviceId 需要在 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取deviceId,// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取serviceId,// 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取characteristicId,// 这里的value是ArrayBuffer类型value: buffer,success (res) {console.log('writeBLECharacteristicValue success', res.errMsg)}
})

10-2、读取低功耗蓝牙设备的特征值的二进制数据值。注意:必须设备的特征值支持 read 才可以成功调用。

// 必须在这里的回调才能获取
wx.onBLECharacteristicValueChange(function(characteristic) {console.log('characteristic value comed:', characteristic)
})wx.readBLECharacteristicValue({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId,// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取serviceId,// 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取characteristicId,success (res) {console.log('readBLECharacteristicValue:', res.errCode)}
})

11、写入完事件将会在第9点被推送。进行接下来的业务逻辑。

12、接下来就是关闭连接

wx.closeBLEConnection({deviceId,success (res) {console.log(res)}
})

13、关闭蓝牙模块。调用该方法将断开所有已建立的连接并释放系统资源。

wx.closeBluetoothAdapter({success (res) {console.log(res)}
})

其余接口

14、根据 uuid 获取处于已连接状态的设备。注意,已连接设备的获取是在蓝牙适配器初始化之后的。并不是手机所有的连接设备。(巨坑)

wx.getConnectedBluetoothDevices({success (res) {console.log(res)}
})

调试工具蓝牙源码免费提供

小程序调试工具

微信搜索【在线二维码】小程序

小程序蓝牙模块教程--小程序走过的坑(12)(最新版)相关推荐

  1. 微信小程序蓝牙模块BLE开发说明基础知识

    微信小程序蓝牙模块说明 一.简介 微信小程序作为轻量级应用的载体,确实方便了很多的应用场景.传统的产品如果要和手机互联互通,那么必须要开发两套APP,即IOS和安卓.十分的麻烦和成本巨高.但是微信小程 ...

  2. 微信小程序蓝牙模块遇到的坑

    今天第一次写博客,关于微信小程序蓝牙这一块,因为公司项目需要搞一个蓝牙的小程序,而小程序蓝牙模块也是刚出不久,遇到的坑很难解决,经过自己的摸索以及同事的帮忙,终于可以实现获取到蓝牙的数据了.官网:ht ...

  3. 微信小程序蓝牙模块通信

    微信小程序与蓝牙之间的通信 因为项目要求,本次实现与蓝牙的通信是直接根据蓝牙设备的deviceId直接进行连接,后续会继续改进.实现的功能有连接蓝牙,获取蓝牙的服务,特征值,关闭蓝牙搜索,开启noti ...

  4. 微信小程序蓝牙ibeacon_微信小程序iBeacon测距及稳定程序的实现解析

    前言 iBeacon是苹果公司推出的一项低耗能蓝牙技术,由蓝牙设备发射包含指定信息的信号,再由移动设备接收信号,从而实现近场通信.微信小程序2017年开始支持iBeacon,摇一摇附近就是基于iBea ...

  5. 微信小程序开发入门教程-小程序账号注册及开通

    17年小程序开始公测,经过5年的发展,无论从组件.开发工具.api.生态.社区,都已经发展的非常成熟了.如果17年年初你看小程序,觉得无需安装即用即走还是一个理念的话.站在今天看过去,往往是先提出一个 ...

  6. 微信小程序连接蓝牙ble教程(目录)

    微信小程序连接蓝牙教程(目录) 1.新建小程序项目 2.初始化蓝牙适配器(wx.openBluetoothAdapter) 3.获取蓝牙适配器状态(getBluetoothAdapterState) ...

  7. 微信小程序连接蓝牙模块发送数据的详解以及封装版

    连接蓝牙 前言 详解 小程序链接蓝牙流程图 需要的数据 api openBluetoothAdapter:打开蓝牙适配器 getBluetoothAdapterState:查看蓝牙适配器状态 star ...

  8. 蓝牙模块教程|一文看懂BLE蓝牙模块应用开发,快速入门指南

    BLE(Bluetooh Low Energy)蓝牙低能耗技术是短距离.低成本.可互操作性的无线技术,它利用许多智能手段最大限度地降低功耗. BLE蓝牙模块是为了降低使用者的开发门槛,模组厂商会将射频 ...

  9. 为新手准备的安卓连接经典蓝牙模块教程

    绪论: 本人业余爱好者一个,无android基础,在开发android蓝牙的时候遇到了很多问题,其中最难受的还是基础不够好而看不懂别人在写什么.所以针对新手,我想写一个新手也完完全全能看懂的教程(连a ...

最新文章

  1. 【错误总结】LaTex Warning: citation undefined
  2. 【 FPGA 】UltraFast设计方法学:理解实现策略
  3. 会话跟踪技术Cookieless
  4. 计算机网络工程实验分析与体会_《软件工程》面向对象分析实验
  5. C/C++ 数据类型
  6. 4000字,25张精美交互图表,开启Plotly Express之旅!
  7. 东华大学计算机学院讲座单,计信学院成功举办2018级专业导师面对面系列讲座活动...
  8. ACM001 Quicksum
  9. Ubuntu安装Python的相对简单方法
  10. 以汉字开头,以某个词结尾的一段文字的正则
  11. 【生信技能树】GEO数据库挖掘 P7 6差异分析
  12. 设计模式的原则和分类 思想模型
  13. bzoj2442[USACO2011 Open]Mowing the Lawn修建草坪
  14. 【先锋】永洪科技何春涛:不忘初心,砥砺前行
  15. 【加量不加价,提供只读脚本】小麦苗健康检查脚本说明(Oracle巡检脚本)
  16. 分组统计 - 不同时间颗粒度下,按照秒、分、时、日、周、月、季度、年 GROUP BY 分组统计 - (MySQL)
  17. strcpy、strcpy_s、strncpy、strncpy_s 字符串拷贝用法
  18. 使用document解析xml文件
  19. 名创优品在香港上市:市值170亿港元 10元店也有大生意
  20. Android 2018年九月面试经历总结

热门文章

  1. LVDS信号采集,Pal制模拟视频输出
  2. android教育游戏设计方案,一个简单Android游戏的设计 详细设计
  3. 常用存储设备优缺点辨析
  4. Linux 磁盘清理方法步骤
  5. jQuery添加/插入方法
  6. 快速使用EasyExcel读取Excel
  7. RPA:帮助企业完成财务数字化转型
  8. FontCreator 造字 自动命名
  9. 什么是领域模型---详解
  10. WiMAX的切换实现