在前面已经写了两篇关于Android蓝牙和ios 蓝牙开发的文章,今天带来的是微信小程序蓝牙实现。

  • Android蓝牙
  • ios蓝牙(Swift)

有一段时间没有。没有写关于小程序的文章了。3月28日,微信的api又一次新的更新。期待已久的蓝牙api更新。就开始撸一番。

源码地址

1.简述

  • 蓝牙适配器接口是基础库版本 1.1.0 开始支持。
  • iOS 微信客户端 6.5.6 版本开始支持,Android 客户端暂不支持
  • 蓝牙总共增加了18个api接口。

2.Api分类

  • 搜索类
  • 连接类
  • 通信类

3.API的具体使用

详细见官网:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/bluetooth.html#wxgetconnectedbluethoothdevicesobject

4. 案例实现

4.1 搜索蓝牙设备

/*** 搜索设备界面*/
Page({data: {logs: [],list:[],},onLoad: function () {console.log('onLoad')
var that = this;
// const SDKVersion = wx.getSystemInfoSync().SDKVersion || '1.0.0'
// const [MAJOR, MINOR, PATCH] = SDKVersion.split('.').map(Number)
// console.log(SDKVersion);
// console.log(MAJOR);
// console.log(MINOR);
// console.log(PATCH);// const canIUse = apiName => {//   if (apiName === 'showModal.cancel') {//     return MAJOR >= 1 && MINOR >= 1
//   }
//   return true
// }// wx.showModal({//   success: function(res) {//     if (canIUse('showModal.cancel')) {//       console.log(res.cancel)
//     }
//   }
// })//获取适配器wx.openBluetoothAdapter({success: function(res){// successconsole.log("-----success----------");console.log(res);//开始搜索wx.startBluetoothDevicesDiscovery({services: [],success: function(res){// successconsole.log("-----startBluetoothDevicesDiscovery--success----------");console.log(res);},fail: function(res) {// failconsole.log(res);},complete: function(res) {// completeconsole.log(res);}
})},fail: function(res) {console.log("-----fail----------");// failconsole.log(res);},complete: function(res) {// completeconsole.log("-----complete----------");console.log(res);}})wx.getBluetoothDevices({success: function(res){// success//{devices: Array[11], errMsg: "getBluetoothDevices:ok"}console.log("getBluetoothDevices");console.log(res);that.setData({list:res.devices});console.log(that.data.list);},fail: function(res) {// fail},complete: function(res) {// complete}})},onShow:function(){},//点击事件处理bindViewTap: function(e) {console.log(e.currentTarget.dataset.title);console.log(e.currentTarget.dataset.name);console.log(e.currentTarget.dataset.advertisData);var title =  e.currentTarget.dataset.title;var name = e.currentTarget.dataset.name;wx.redirectTo({url: '../conn/conn?deviceId='+title+'&name='+name,success: function(res){// success},fail: function(res) {// fail},complete: function(res) {// complete}})},
})

4.2连接 获取数据


/*** 连接设备。获取数据*/
Page({data: {motto: 'Hello World',userInfo: {},deviceId: '',name: '',serviceId: '',services: [],cd20: '',cd01: '',cd02: '',cd03: '',cd04: '',characteristics20: null,characteristics01: null,characteristics02: null,characteristics03: null,characteristics04: null,result,},onLoad: function (opt) {var that = this;console.log("onLoad");console.log('deviceId=' + opt.deviceId);console.log('name=' + opt.name);that.setData({ deviceId: opt.deviceId });/*** 监听设备的连接状态*/wx.onBLEConnectionStateChanged(function (res) {console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`)})/*** 连接设备*/wx.createBLEConnection({deviceId: that.data.deviceId,success: function (res) {// successconsole.log(res);/*** 连接成功,后开始获取设备的服务列表*/wx.getBLEDeviceServices({// 这里的 deviceId 需要在上面的 getBluetoothDevices中获取deviceId: that.data.deviceId,success: function (res) {console.log('device services:', res.services)that.setData({ services: res.services });console.log('device services:', that.data.services[1].uuid);that.setData({ serviceId: that.data.services[1].uuid });console.log('--------------------------------------');console.log('device设备的id:', that.data.deviceId);console.log('device设备的服务id:', that.data.serviceId);/*** 延迟3秒,根据服务获取特征 */setTimeout(function () {wx.getBLEDeviceCharacteristics({// 这里的 deviceId 需要在上面的 getBluetoothDevicesdeviceId: that.data.deviceId,// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取serviceId: that.data.serviceId,success: function (res) {console.log('000000000000' + that.data.serviceId);console.log('device getBLEDeviceCharacteristics:', res.characteristics)for (var i = 0; i < 5; i++) {if (res.characteristics[i].uuid.indexOf("cd20") != -1) {that.setData({cd20: res.characteristics[i].uuid,characteristics20: res.characteristics[i]});}if (res.characteristics[i].uuid.indexOf("cd01") != -1) {that.setData({cd01: res.characteristics[i].uuid,characteristics01: res.characteristics[i]});}if (res.characteristics[i].uuid.indexOf("cd02") != -1) {that.setData({cd02: res.characteristics[i].uuid,characteristics02: res.characteristics[i]});} if (res.characteristics[i].uuid.indexOf("cd03") != -1) {that.setData({cd03: res.characteristics[i].uuid,characteristics03: res.characteristics[i]});}if (res.characteristics[i].uuid.indexOf("cd04") != -1) {that.setData({cd04: res.characteristics[i].uuid,characteristics04: res.characteristics[i]});}}console.log('cd01= ' + that.data.cd01 + 'cd02= ' + that.data.cd02 + 'cd03= ' + that.data.cd03 + 'cd04= ' + that.data.cd04 + 'cd20= ' + that.data.cd20);/*** 回调获取 设备发过来的数据*/wx.onBLECharacteristicValueChange(function (characteristic) {console.log('characteristic value comed:', characteristic.value)//{value: ArrayBuffer, deviceId: "D8:00:D2:4F:24:17", serviceId: "ba11f08c-5f14-0b0d-1080-007cbe238851-0x600000460240", characteristicId: "0000cd04-0000-1000-8000-00805f9b34fb-0x60800069fb80"}/*** 监听cd04cd04中的结果*/if (characteristic.characteristicId.indexOf("cd01") != -1) {const result = characteristic.value;const hex = that.buf2hex(result);console.log(hex);}if (characteristic.characteristicId.indexOf("cd04") != -1) {const result = characteristic.value;const hex = that.buf2hex(result);console.log(hex);that.setData({ result: hex });}})/*** 顺序开发设备特征notifiy*/wx.notifyBLECharacteristicValueChanged({deviceId: that.data.deviceId,serviceId: that.data.serviceId,characteristicId: that.data.cd01,state: true,success: function (res) {// successconsole.log('notifyBLECharacteristicValueChanged success', res);},fail: function (res) {// fail},complete: function (res) {// complete}})wx.notifyBLECharacteristicValueChanged({deviceId: that.data.deviceId,serviceId: that.data.serviceId,characteristicId: that.data.cd02,state: true,success: function (res) {// successconsole.log('notifyBLECharacteristicValueChanged success', res);},fail: function (res) {// fail},complete: function (res) {// complete}})wx.notifyBLECharacteristicValueChanged({deviceId: that.data.deviceId,serviceId: that.data.serviceId,characteristicId: that.data.cd03,state: true,success: function (res) {// successconsole.log('notifyBLECharacteristicValueChanged success', res);},fail: function (res) {// fail},complete: function (res) {// complete}})wx.notifyBLECharacteristicValueChanged({// 启用 notify 功能// 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取deviceId: that.data.deviceId,serviceId: that.data.serviceId,characteristicId: that.data.cd04,state: true,success: function (res) {console.log('notifyBLECharacteristicValueChanged success', res)}})}, fail: function (res) {console.log(res);}})}, 1500);}})},fail: function (res) {// fail},complete: function (res) {// complete}})},/*** 发送 数据到设备中*/bindViewTap: function () {var that = this;var hex = 'AA5504B10000B5'var typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) {return parseInt(h, 16)}))console.log(typedArray)console.log([0xAA, 0x55, 0x04, 0xB1, 0x00, 0x00, 0xB5])var buffer1 = typedArray.bufferconsole.log(buffer1)wx.writeBLECharacteristicValue({deviceId: that.data.deviceId,serviceId: that.data.serviceId,characteristicId: that.data.cd20,value: buffer1,success: function (res) {// successconsole.log("success  指令发送成功");console.log(res);},fail: function (res) {// failconsole.log(res);},complete: function (res) {// complete}})},/*** ArrayBuffer 转换为  Hex*/buf2hex: function (buffer) { // buffer is an ArrayBufferreturn Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');}
})

5.效果展示

发送校验指令。获取结果

微信小程序--Ble蓝牙相关推荐

  1. 微信小程序-BLE蓝牙实现demo

    终于实现了蓝牙的功能,也找到了合适的硬件,记录一下自己需要注意和总结的地方 具体的搜索.连接.断开.消息传输都已经实现了,作为项目的一个页面完成了 相应的代码地址,具体的蓝牙代码在pages/blue ...

  2. 微信小程序低功耗蓝牙BLE快速开发js

    文章目录 1.前言 2.资料 3.BLE连接流程 BLE连接原理 4.index.js页面加载流程详细说明 完整代码: 1.前言 目的: 1.为了能三分钟快速开发BLE模块,特此做一个笔记,按照笔记的 ...

  3. 微信小程序实现蓝牙BLE(demo版)

    微信小程序实现蓝牙BLE(看文章最后一句话) 这是楼主在学校自己开发的用蓝牙小程序控制机械臂的(独立开发的). https://pan.baidu.com/s/1AmCW_ARhu--eapzd8Af ...

  4. 在HbuilderX中实现微信小程序下蓝牙连接打印机完整实战案例

    1.基础开发环境,所用到的 Api 以及实现的思路. 应用场景: 商家打印小票,小票包含顾客消费的商品明细信息以及末尾附上二维码,二维码供顾客扫码开票. HbuilderX开发工具: HBuilder ...

  5. 微信小程序使用蓝牙连接设备流程

    微信小程序使用蓝牙连接设备流程 小程序使用蓝牙连接设备介绍 使用到的api 流程: 初始化蓝牙模块 wx.openBluetoothAdapter wx.openBluetoothAdapter({ ...

  6. 开源一个基于微信小程序的蓝牙室内定位软件(附下载链接)

    文章目录 1. 运行环境要求 2. 软件功能及程序说明 2.1 软件组成 2.2 主要功能 2.3 文件及函数功能说明 3. 软件设计及操作说明 4. 完整版代码获取 1. 运行环境要求 软件运行环境 ...

  7. 微信小程序/uni-app 蓝牙打印开发教程和常见问题总结【文末附源码】

    微信小程序/uni-app 蓝牙打印开发教程和常见问题总结[文末附源码] 文章目录 微信小程序/uni-app 蓝牙打印开发教程和常见问题总结[文末附源码] 1️⃣ 写在前面 2️⃣ 蓝牙连接流程 3 ...

  8. 微信小程序的蓝牙使用

    微信小程序的蓝牙使用 1.蓝牙分类 蓝牙基础率/增强数据率 (BR/EDR) 常用在对数据传输速率有要求的设备上,如蓝牙音箱等 低功耗 (LE) 蓝牙 常用在低功耗.对续航有要求的设备上,智能穿戴设备 ...

  9. 微信小程序之蓝牙开发虚拟摇杆

    文章用于学习记录 文章目录 前言 一.App Inventor 二.uni-app 三.微信小程序 3.1 示例&应用 3.2 服务值与特征值 3.3 控制指令 3.4 测试 3.5 十六进制 ...

最新文章

  1. asp.net导出数据到Excel
  2. JavaScript字符串转数字的5种方法及其陷阱
  3. 如何使用async和await这对组合设计统一的取Access Token的函数
  4. 详细讲述CV的创作与包装
  5. 框架源码专题:springIOC的加载过程,bean的生命周期,结合spring源码分析
  6. Javascript 获取验证码60秒倒计
  7. 2019有的图纸打印出来看不清楚_CAD图纸打印出来后很多CAD文字消失了怎么办?...
  8. 两天,我把分布式事务搞完了!
  9. 《你不知道的JavaScript》-- 精读(一)
  10. 大规模知识图谱的构建及应用
  11. 洛谷P1156 垃圾陷阱【线性dp】
  12. RJ45接口定义及网线线序
  13. XTU OJ 1395
  14. java exif_Java读取图片EXIF信息的方法
  15. Ubuntu下鼠标无法点击解决方案
  16. 牛刀:中国未来房价基本走势…
  17. ERDAS2015RGB颜色分类法水体提取
  18. weblogic8.1 下载地址
  19. PoW 、PoS , DPoS 算法
  20. Matlab中的傅里叶级数展开函数

热门文章

  1. centos搭建USDT omni钱包节点
  2. php批量excel转word
  3. 测试你是什么样的双眼皮软件,来测试你适合哪种双眼皮?
  4. python趣味编程-2048游戏
  5. C语言程序设计 参考书籍
  6. 施一公:大学的意义(清华大学生命科学学院2015年毕业典礼的讲话)(转载)
  7. 接受电话面试时有哪些要注意的
  8. 华为软件笔试20190925
  9. 论文阅读——RoBERTa A Robustly Optimized BERT Pretraining Approach
  10. 菜单函数stm_aix stm_bpx stm_bm stm_ai stm_bp 的参数说明