欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序 蓝牙的实现实例代码

程序员文章站 2022-06-09 08:49:05
微信小程序 蓝牙的实现实例代码 1.简述 蓝牙适配器接口是基础库版本 1.1.0 开始支持。 ios 微信客户端 6.5.6 版本开始支持,android 客户端暂...

微信小程序 蓝牙的实现实例代码

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){
    // 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: '../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) {
        // success
        console.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 需要在上面的 getbluetoothdevices
                deviceid: 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) {
                      // success
                      console.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) {
                      // success
                      console.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) {
                      // success
                      console.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.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 => ('00' + x.tostring(16)).slice(-2)).join('');
  }
})

5.效果展示

微信小程序 蓝牙的实现实例代码

发送校验指令。获取结果

微信小程序 蓝牙的实现实例代码

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!