微信小程序 蓝牙实现
来源:互联网 发布:恐怖整蛊软件 编辑:程序博客网 时间:2024/04/26 08:15
微信小程序 蓝牙实现
此前是通过安卓客户端实现对蓝牙设备的扫描、连接和通讯等操作,本篇主要介绍一下使用微信小程序来对蓝牙设备的操作。
1.简述
- 蓝牙适配器接口是基础库版本 1.1.0 开始支持。
- iOS 微信客户端 6.5.6 版本开始支持,Android 6.5.7 版本开始支持。
- 蓝牙总共增加了18个api接口。
- 目前不支持在开发者工具上进行调试,需要使用真机才能正常调用小程序蓝牙接口。
2.Api分类
- 搜索类
- 连接类
- 通信类
3.API的具体使用
详细见官网:
https://mp.weixin.qq.com/debug/wxadoc/dev/api/bluetooth.html#wxgetconnectedbluethoothdevicesobject
4. 案例实现
4.1 搜索蓝牙设备
/** * 搜索设备界面 */Page({ data: { logs: [], loading:false, list:[] }, onLoad: function () { console.log('onLoad') var that = this; wx.openBluetoothAdapter({ success: function(res){ // success console.log("-----success----------"); console.log(res); wx.startBluetoothDevicesDiscovery({ services: [], success: function(res){ // success console.log("-----startBluetoothDevicesDiscovery--success----------"); console.log(res); }, fail: function(res) { // fail console.log(res); }, complete: function(res) { // complete console.log(res); }}) }, fail: function(res) { console.log("-----fail----------"); // fail console.log(res); }, complete: function(res) { // complete console.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, loading: true }); 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: '../service/service?deviceId='+title+'&name='+name, success: function(res){ // success }, fail: function(res) { // fail }, complete: function(res) { // complete } }) },})
4.2 连接蓝牙设备,并获取服务列表
/** * 显示设备服务界面 *//** * 连接设备。获取数据 */var dId;Page({ data: { motto: 'Hello World', loading: false, userInfo: {}, deviceId: '', name: '', serviceId: '', services: [], cd20: '', cd01: '', cd02: '', cd03: '', cd04: '', characteristics20: null, characteristics01: null, characteristics02: null, characteristics03: null, characteristics04: null, list: [] }, onLoad: function (opt) { var that = this; console.log("onLoad"); console.log('deviceId=' + opt.deviceId); console.log('name=' + opt.name); dId = opt.deviceId; 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) { // success console.log(res); /** * 连接成功,后开始获取设备的服务列表 */ wx.getBLEDeviceServices({ // 这里的 deviceId 需要在上面的 getBluetoothDevices中获取 deviceId: that.data.deviceId, success: function (res) { console.log('device services:', res.services) that.setData({ list: res.services, loading: true }); } }) }, fail: function (res) { // fail console.log(res); }, complete: function (res) { // complete console.log(res); } }) }, /** * 获取特征值列表 */ bindViewTap: function (e) { console.log(e.currentTarget.dataset); var name = e.currentTarget.dataset.title; var deviceId = dId; console.log("uuid:" + name + ",deviceId:" + deviceId); wx.redirectTo({ url: '../charact/charact?deviceId=' + deviceId + '&serviceId=' + name, success: function (res) { // success }, fail: function (res) { // fail }, complete: function (res) { // complete } }) }, buf2hex: function (buffer) { // buffer is an ArrayBuffer return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join(''); }})
从图可知道uuid 为0000FEE7的是记录步数的服务,通过此uuid可以获得对应的特征值列表
4.3 获取特征值列表,并根据对应的uuid读取对应的值
/** * 显示设备服务界面 *//** * 连接设备。获取数据 */Page({ data: { motto: 'Hello World', loading: false, userInfo: {}, deviceId: '', name: '', serviceId: '', services: [], cd20: '', cd01: '', cd02: '', cd03: '', cd04: '', characteristics20: null, characteristics01: null, characteristics02: null, characteristics03: null, characteristics04: null, list: [] }, onLoad: function (opt) { var that = this; console.log("onLoad"); console.log('deviceId=' + opt.deviceId); that.setData({ deviceId: opt.deviceId , serviceId:opt.serviceId }); /** * 监听设备的连接状态 */ wx.onBLEConnectionStateChanged(function (res) { console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`) }) wx.getBLEDeviceCharacteristics({ deviceId: that.data.deviceId, serviceId: that.data.serviceId, success:function(res){ that.setData({ list: res.characteristics, loading: true }); /** * 回调获取 设备发过来的数据 */ wx.onBLECharacteristicValueChange(function (characteristic) { console.log(characteristic); const hex = that.buf2hex(characteristic.value); console.log('characteristic value comed:', hex); wx.showModal({ title: '读取的值', content: '结果:' + hex, success: function (ress) { if (ress.confirm) { console.log('用户点击确定'); } } }) }) } }) }, //读取数据 readViewTap: function (e) { var that = this; var name = e.currentTarget.dataset.name; console.log("characteristicId:" + name + ",serviceId:" + that.data.serviceId + ",deviceId:" + that.data.deviceId); // wx.notifyBLECharacteristicValueChanged({ // state: true, // 启用 notify 功能 // deviceId: that.data.deviceId, // serviceId: that.data.serviceId, // characteristicId: name, // success: function (res) { // console.log("启用notify:" + res); // console.log(res); // } // }) //读取记录 wx.readBLECharacteristicValue({ deviceId: that.data.deviceId, serviceId: that.data.serviceId, characteristicId: name, success: function(res) { console.log('readBLECharacteristicValue:', res.errMsg); }, }) }, notifyViewTap: function (e) { var that = this; var name = e.currentTarget.dataset.name; console.log("characteristicId:" + name + ",serviceId:" + that.data.serviceId + ",deviceId:" + that.data.deviceId); wx.notifyBLECharacteristicValueChanged({ state: true, // 启用 notify 功能 deviceId: that.data.deviceId, serviceId: that.data.serviceId, characteristicId: name, success: function (res) { console.log("启用notify:"); console.log(res); // wx.onBLECharacteristicValueChange(function (res) { // console.log("onBLECharacteristicValueChange:" + res); // console.log(res.value); // }) } }) }, /** *读取数据 */ bindViewTap: function (e) { var that=this; var name = e.currentTarget.dataset.title; console.log("characteristicId:" + name + ",serviceId:" + that.data.serviceId + ",deviceId:" + that.data.deviceId); //读取记录 // var hex = '0A3700'; // var typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) { // return parseInt(h, 16) // })) // console.log(typedArray); wx.notifyBLECharacteristicValueChanged({ state: true, // 启用 notify 功能 deviceId: that.data.deviceId, serviceId: that.data.serviceId, characteristicId: name, success: function (res) { console.log("启用notify:" + res); wx.onBLECharacteristicValueChange(function (res) { console.log("onBLECharacteristicValueChange:" + res); console.log(res.value); }) } }) // var buffer1 = typedArray.buffer // console.log("buffer1:"); // console.log(buffer1); var Bytes = new Array(); Bytes[0] = 0x01; Bytes[1] = 0x02; Bytes[2] = 0x03; console.log(Bytes); // wx.readBLECharacteristicValue({ // deviceId: that.data.deviceId, // serviceId: that.data.serviceId, // characteristicId: name, // success: function(res) { // console.log('readBLECharacteristicValue:', res.errMsg); // wx.showModal({ // title: '读取的值', // content: '结果:' + res, // success: function (ress) { // if (ress.confirm) { // console.log('用户点击确定') // } // } // }) // }, // }) // wx.writeBLECharacteristicValue({ // deviceId: that.data.deviceId, // serviceId: that.data.serviceId, // characteristicId: name, // value: buffer1, // success: function (res) { // // success // console.log("success 指令发送成功"); // console.log(res); // }, // fail: function (res) { // // fail // console.log("fail 指令发送fail"); // console.log(res); // }, // complete: function (res) { // // complete // } // }) }, buf2hex: function (buffer) { // buffer is an ArrayBuffer return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join(''); }})
阅读全文
0 0
- 微信小程序 蓝牙实现
- 微信小程序--Ble蓝牙
- 微信小程序蓝牙开发
- 微信小程序蓝牙通讯蓝牙模块demo
- 微信小程序蓝牙通讯蓝牙模块demo
- STC51单片机实现蓝牙无线下载程序
- Android 蓝牙聊天程序的实现
- 微信小程序蓝牙功能开发
- 微信小程序蓝牙API使用指南
- 微信小程序蓝牙功能开发
- 微信小程序低功耗蓝牙
- 蓝牙程序
- 微信小程序蓝牙模块遇到的坑
- 微信小程序---蓝牙连接开发总结
- Android 蓝牙开发实例--蓝牙聊天程序的设计和实现
- Android 蓝牙开发实例--蓝牙聊天程序的设计和实现
- Android 蓝牙开发实例--蓝牙聊天程序的设计和实现
- Android 蓝牙开发实例--蓝牙聊天程序的设计和实现
- sublime使用xdebug调试php
- MySQL-----MySQL主-从双机热备
- 最新海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明
- GitHub
- 矩阵分解 SVD分解
- 微信小程序 蓝牙实现
- 关于代码速度优化,MDK中 static 与优化级别与典型for循环之间的关系
- JAVA虚拟机初步学习之类的加载
- Mybatis动态数据源实现
- Python--正则匹配
- 关闭WIN10系统更新
- 目标检测之一(传统算法和深度学习的源码学习)
- 关于堆的操作
- 更新boot后,WLAN无法使用