本文主要介绍了微信小程序--ble蓝牙的实现方法。文中附上源码下载,具有很好的参考价值。下面跟着小编一起来看下吧
有一段时间没有。没有写关于小程序的文章了。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( #39;onLoad #39;) var that = this; // const SDKVersion = wx.getSystemInfoSync().SDKVersion || #39;1.0.0 #39; // const [MAJOR, MINOR, PATCH] = SDKVersion.split( #39;. #39;).map(Number) // console.log(SDKVersion); // console.log(MAJOR); // console.log(MINOR); // console.log(PATCH); // const canIUse = apiName = { // if (apiName === #39;showModal.cancel #39;) { // return MAJOR = 1 MINOR = 1 // return true // wx.showModal({ // success: function(res) { // if (canIUse( #39;showModal.cancel #39;)) { // console.log(res.cancel) // }) //获取适配器 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 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: #39;../conn/conn?deviceId= #39;+title+ #39; name= #39;+name, success: function(res){ // success fail: function(res) { // fail complete: function(res) { // complete })
4.2连接 获取数据
/** * 连接设备。获取数据 Page({ data: { motto: #39;Hello World #39;, userInfo: {}, deviceId: #39; #39;, name: #39; #39;, serviceId: #39; #39;, services: [], cd20: #39; #39;, cd01: #39; #39;, cd02: #39; #39;, cd03: #39; #39;, cd04: #39; #39;, characteristics20: null, characteristics01: null, characteristics02: null, characteristics03: null, characteristics04: null, result, onLoad: function (opt) { var that = this; console.log( onLoad console.log( #39;deviceId= #39; + opt.deviceId); console.log( #39;name= #39; + 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) { // success console.log(res); * 连接成功,后开始获取设备的服务列表 wx.getBLEDeviceServices({ // 这里的 deviceId 需要在上面的 getBluetoothDevices中获取 deviceId: that.data.deviceId, success: function (res) { console.log( #39;device services: #39;, res.services) that.setData({ services: res.services }); console.log( #39;device services: #39;, that.data.services[1].uuid); that.setData({ serviceId: that.data.services[1].uuid }); console.log( #39;-------------------------------------- #39;); console.log( #39;device设备的id: #39;, that.data.deviceId); console.log( #39;device设备的服务id: #39;, that.data.serviceId); * 延迟3秒,根据服务获取特征 setTimeout(function () { wx.getBLEDeviceCharacteristics({ // 这里的 deviceId 需要在上面的 getBluetoothDevices deviceId: that.data.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.data.serviceId, success: function (res) { console.log( #39;000000000000 #39; + that.data.serviceId); console.log( #39;device getBLEDeviceCharacteristics: #39;, res.characteristics) for (var i = 0; i 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( #39;cd01= #39; + that.data.cd01 + #39;cd02= #39; + that.data.cd02 + #39;cd03= #39; + that.data.cd03 + #39;cd04= #39; + that.data.cd04 + #39;cd20= #39; + that.data.cd20); * 回调获取 设备发过来的数据 wx.onBLECharacteristicValueChange(function (characteristic) { console.log( #39;characteristic value comed: #39;, 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) { // success console.log( #39;notifyBLECharacteristicValueChanged success #39;, 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) { // success console.log( #39;notifyBLECharacteristicValueChanged success #39;, 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) { // success console.log( #39;notifyBLECharacteristicValueChanged success #39;, 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( #39;notifyBLECharacteristicValueChanged success #39;, res) }, fail: function (res) { console.log(res); , 1500); fail: function (res) { // fail complete: function (res) { // complete * 发送 数据到设备中 bindViewTap: function () { var that = this; var hex = #39;AA5504B10000B5 #39; 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.buffer console.log(buffer1) wx.writeBLECharacteristicValue({ deviceId: that.data.deviceId, serviceId: that.data.serviceId, characteristicId: that.data.cd20, value: buffer1, success: function (res) { // success console.log( success 指令发送成功 console.log(res); fail: function (res) { // fail console.log(res); complete: function (res) { // complete * ArrayBuffer 转换为 Hex buf2hex: function (buffer) { // buffer is an ArrayBuffer return Array.prototype.map.call(new Uint8Array(buffer), x = ( #39;00 #39; + x.toString(16)).slice(-2)).join( #39; #39;); })
5.效果展示
发送校验指令。获取结果
以上就是微信小程序--Ble蓝牙的详细内容,更多请关注php中文网其它相关文章!
微信app下载
微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!