E企盈营销工具技术服务商 热线:4006-838-530

微信小程序调用Android手机蓝牙BLE传输数据

E企盈直播平台营销卖货系统

最近做的微信小程序要调用手机自带的4.0蓝牙发送、接收数据4.0蓝牙又叫BLE,整理了下,蓝牙连接要经过如下步骤:初始化蓝牙检查蓝牙是否初始化成功开始搜索附近蓝牙设备显示扫描得到的蓝牙选择连接特定MAC地址的蓝牙设备连接成功后,获取service ID然后获取characteristic IDwrite/read data*每个步骤对应的操作在js代码中有注释我遇到的坑:一定要启用notify功能,否则只能发送,无法接收数据!!!index.json为空,只上传了index.wxml,index.wxss,index.js三个文件,源码如下index.wxml!–pages/mine/mine.wxml–view class=”container”     view class=”section”       !– 第一行 —    view class=”content”      text蓝牙开关/text    /view    view class=”switch”      switch checked=”{{isbluetoothready}}” bindchange=”open_BLE” /    /view  /view  view class=”section”        !– 第二行 —    button type=”default” size=”{{primarySize}}” loading=”{{searchingstatus}}” plain=”{{plain}}” disabled=”{{disabled}}” bindtap=”search_BLE” {{searchingstatus?”搜索中”:”搜索蓝牙”}} /button  /view  block wx:for=”{{list}}”     !– 第三行 —    view class=”section” style=”flex-direction:row”      view        text{{index}}: /text        text设备名称:  {{item.name}}/text        textMAC地址:   {{item.deviceId}}/text      /view      view class=”connection”      button id=”{{item.deviceId}}” size=”mini”              bindtap=”connectTO” {{deviceconnected?”已连接”:”连接”}} /button      /view    /view/block block wx:if=”{{deviceconnected}}”    !– 第四行 —    view      text数据接收/text      text{{receive_data}}/text      !– button size=”mini” bindtap=”receiveMessages”接收/button —    /view    view class=”send”      form bindsubmit=”formSubmit”        text数据发送:/text        input name=”senddata”/        button size=”mini” formType=”submit”发送/button        button size=”mini” formType=”reset”清空/button      /form    /view/block/viewindex.wxssview {  display: inline-block;}.container {  padding: 0;  margin: 0;  align-items: flex-start;}.section {  display: inline-block;  width: 100%;  margin-top: 50rpx;  position: relative;}.connection {  margin-left: 90rpx;}.list {  margin-left: 20rpx;}.content {  margin-left: 100rpx;  padding: auto;  position: absolute;  top: 5rpx;  left: 10rpx;}.switch {  position: relative;  float: right;  margin-right: 100rpx;}button {  background: red;}.list-item {  margin-top: 20rpx;  margin-bottom: 20rpx;   display: flex;  flex-direction: column;  box-sizing: border-box;  border: 1px dashed #000;}.list-item text {   margin-top: 10rpx;}.list-item button {  margin-right: 10rpx;}.deviceconnected{  background-color:sandybrown}.recieve{  width: 100%}.recieve_textarea{  width: 100%;  margin-top: 10dpx;}input{  display: block;  border: 1px dashed;  width: 200px;}index.jsvar app = getApp()var temp = []var string_temp=””var serviceId = “0000ffe0-0000-1000-8000-00805f9b34fb”var characteristicId = “0000ffe1-0000-1000-8000-00805f9b34fb”Page({  data: {    isbluetoothready: false,    defaultSize: ‘default’,    primarySize: ‘default’,    warnSize: ‘default’,    disabled: false,    plain: false,    loading: false,    searchingstatus: false,    receivedata: ‘666’,    onreceiving: false,    id_text: string_temp,    list: [],    receive_data:’none  ‘  },  onLoad: function () {  },  open_BLE: function () {    var that = this    that.setData({      isbluetoothready: !that.data.isbluetoothready,    })    if (that.data.isbluetoothready) {      //开启蓝牙模块并初始化      wx.openBluetoothAdapter({        success: function (res) {        },        fail: function (res) {          wx.showModal({            title: ‘提示’,            content: ‘请检查手机蓝牙是否打开’,          })        }      })      //开启蓝牙模块并初始化      //检查蓝牙模块是否初始化成功      wx.getBluetoothAdapterState({        success: function (res) {          var available = res.available          if (!available) {            wx.showToast({              title: ‘蓝牙初始化失败’,              icon: ‘loading’,              duration: 2000            })          }          else {            wx.showToast({              title: ‘蓝牙初始化成功’,              icon: ‘success’,              duration: 2000            })          }        }      })      //检查蓝牙模块是否初始化成功    }    else{      wx.closeBLEConnection({        deviceId: that.data.connectedDeviceId,        complete: function (res) {          that.setData({            deviceconnected: false,            connectedDeviceId: “”          })          wx.showToast({            title: ‘蓝牙连接断开’,            icon: ‘success’,            duration: 2000          })        }      })      setTimeout(function () {        that.setData({          list: []        })        //释放蓝牙适配器        wx.closeBluetoothAdapter({          success: function (res) {            that.setData({              isbluetoothready: false,              deviceconnected: false,              devices: [],              searchingstatus: false,              receivedata: ”            })            wx.showToast({              title: ‘蓝牙适配器释放’,              icon: ‘success’,              duration: 2000            })          },          fail: function (res) {          }        })        //释放蓝牙适配器      }, 1000)    }  },  search_BLE: function () {    temp = []    var that = this    if (!that.data.searchingstatus) {      var that = this      //开始搜索附近蓝牙设备      wx.startBluetoothDevicesDiscovery({        success: function (res) {          wx.showToast({            title: ‘开始搜索BLE’,            icon: ‘loading’,            duration: 2000          })          that.setData({            searchingstatus: !that.data.searchingstatus          })        }      })      //开始搜索附近蓝牙设备    } else {      //停止搜索附近蓝牙设备      wx.stopBluetoothDevicesDiscovery({        success: function (res) {          wx.showToast({            title: ‘停止搜索BLE’,            icon: ‘success’,            duration: 2000          })          that.setData({            searchingstatus: !that.data.searchingstatus          })        }      })      //停止搜索附近蓝牙设备      setTimeout(function () {        //获取发现的蓝牙设备        wx.getBluetoothDevices({          success: function (res) {            for(var i=0;i100;i++){              if (res.devices[i]) {                string_temp = string_temp + ” + res.devices[i].deviceId              }            }            that.setData({              id_text: string_temp,              list: res.devices            })          }        })        //获取发现的蓝牙设备      }, 1000)    }  },  connectTO: function (e) {    var that = this      wx.showLoading({        title: ‘连接蓝牙设备中…’,      })      wx.createBLEConnection({        deviceId: e.currentTarget.id,        success: function (res) {          wx.hideLoading()          wx.showToast({            title: ‘连接成功’,            icon: ‘success’,            duration: 1000          })          that.setData({            deviceconnected: true,            connectedDeviceId: e.currentTarget.id          })          // 启用 notify 功能          wx.notifyBLECharacteristicValueChanged({            state: true,             deviceId: that.data.connectedDeviceId,            serviceId: serviceId,            characteristicId: characteristicId,            success: function (res) {            }          })          // 启用 notify 功能          // ArrayBuffer转为16进制数          function ab2hex(buffer) {            var hexArr = Array.prototype.map.call(              new Uint8Array(buffer),              function (bit) {                return (’00’ + bit.toString(16)).slice(-2)              }            )            return hexArr.join(”);          }          // 16进制数转ASCLL码          function hexCharCodeToStr(hexCharCodeStr) {            var trimedStr = hexCharCodeStr.trim();            var rawStr = trimedStr.substr(0, 2).toLowerCase() === “0x” ? trimedStr.substr(2) : trimedStr;            var len = rawStr.length;            var curCharCode;            var resultStr = [];            for (var i = 0; i len; i = i + 2) {              curCharCode = parseInt(rawStr.substr(i, 2), 16);              resultStr.push(String.fromCharCode(curCharCode));            }            return resultStr.join(“”);          }          //监听回调,接收数据          wx.onBLECharacteristicValueChange(function (characteristic) {            var hex = ab2hex(characteristic.value)            that.setData({              receive_data: hexCharCodeToStr(hex)            })          })        },        fail: function (res) {          wx.hideLoading()          wx.showToast({            title: ‘连接设备失败’,            icon: ‘success’,            duration: 1000          })          that.setData({            connected: false          })        }      })      wx.stopBluetoothDevicesDiscovery({        success: function (res) {        }      })  },  formSubmit: function (e) {    var senddata = e.detail.value.senddata;    var that = this    let buffer = new ArrayBuffer(senddata.length)    let dataView = new DataView(buffer)    for (var i = 0; i senddata.length; i++) {      dataView.setUint8(i, senddata.charAt(i).charCodeAt())    }    wx.writeBLECharacteristicValue({      deviceId: that.data.connectedDeviceId,      serviceId: serviceId,      characteristicId: characteristicId,      value: buffer,      success: function (res) {        wx.showToast({          title: ‘发送成功’,          icon: ‘success’,          duration: 2000        })      }    })  },  receiveMessages: function () {    var that = this;    wx.readBLECharacteristicValue({      deviceId: that.data.connectedDeviceId,      serviceId: serviceId,      characteristicId: characteristicId,      success: function (res) {      }    })  },})

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 微信小程序调用Android手机蓝牙BLE传输数据
分享到: 更多 (0)
E企盈小程序直播营销卖货系统
E企盈直播平台营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏