IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 微信小程序使用蓝牙连接设备流程 -> 正文阅读

[移动开发]微信小程序使用蓝牙连接设备流程

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

小程序使用蓝牙连接设备介绍
使用到的api

流程:

  1. 初始化蓝牙模块 wx.openBluetoothAdapter
 wx.openBluetoothAdapter({ 
      success: function (res) {
        wx.showToast({
          title: '初始化成功',
          icon: 'success',
          duration: 800
        })
        //搜索设备
        self.findMachine(); 
      },
      fail: function (res) { //手机上的蓝牙没有打开
        wx.showToast({
          title: '请开启蓝牙',
          icon: 'error',
          duration: 1500
        })
      }
    })
  1. 搜索周边蓝牙设备 wx.startBluetoothDevicesDiscovery
findMachine() {
    var that = this
    //此操作比较耗费系统资源,请在搜索到需要的设备后及时调用 wx.stopBluetoothDevicesDiscovery 停止搜索。
    wx.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      interval: 0,
      success: function (res) {
        console.log(res)
        wx.showLoading({
          title: '正在搜索设备',
        })
        //查找设备
        that.getMachine()
      }
    })
  },
  1. 找到要连接的设备(根据名称查找) wx.getBluetoothDevices
  getMachine() {
    var that = this
    wx.getBluetoothDevices({
      success: function (res) {
        console.log(res)
        wx.hideLoading();
        var list = res.devices;
        if (list.length != 0) {
          var name = "设备名称";
          list.forEach(item => {
            if (item.name == name || item.localName == name) {
            //连接设备
              that.connectMachine(item.deviceId);
            }
          });
        }
      },
      fail: function () {
        console.log("搜索蓝牙设备失败")
      }
    })
  },
  1. 连接设备 wx.createBLEConnection
  2. 修改MTU(最大传输单元,看需求) wx.setBLEMTU
connectMachine(deviceId) {
    var that = this;
    wx.createBLEConnection({
      // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
      deviceId: deviceId, //设备id
      success: function (res) {
        wx.showToast({
          title: '连接成功',
          icon: 'success',
          duration: 800
        })
        //连接后关闭对蓝牙进行搜索
        wx.stopBluetoothDevicesDiscovery()

        // 修改蓝牙MTU的值     wx.setBLEMTU仅安卓系统 5.1 以上版本有效,iOS 因系统限制不支持。
        // 可使用wx.getBLEMTU方法查看MTU
        wx.getSystemInfoAsync({
          success: (result) => {
            console.log(result, '123')
            var model = result.model;
            if (model.indexOf('iPhone') == -1) {
              const mtu = 500;
              wx.setBLEMTU({
                deviceId: deviceId,
                mtu,
                success: (res) => {
                  console.log(res)
                  console.log("setBLEMTU success>>", res)
                  if (res.errno == 0) {
                  // 获取设备uuid
                    that.getServiceId(deviceId)
                  }
                },
                fail: (res) => {
                  console.log(res, 123)
                  console.log("setBLEMTU fail>>", res)
                }
              })
            }
            else{
            // 获取设备uuid
              that.getServiceId(deviceId)
            }
          },
        })
      }
    })
  },
  1. 获取设备的uuid wx.getBLEDeviceServices
 getServiceId(deviceId) {
    var that = this
    wx.getBLEDeviceServices({
      deviceId: deviceId,
      success: function (res) {
        console.log(res)
        // 这里实例只是拿取第一个
        var model = res.services[0]
        var uuid = model.uuid;
        // 查看当前连接蓝牙设备的特征值
        that.getCharacteId(deviceId, uuid)
      }
    })
  },
  1. 查询当前连接设备的特征值 wx.getBLEDeviceCharacteristics
  2. 指令写入到蓝牙设备当中 wx.writeBLECharacteristicValue
  3. 开启notify 功能 wx.notifyBLECharacteristicValueChange
  4. 监听功能 wx.onBLECharacteristicValueChange
// 查看当前连接蓝牙设备的特征值
  getCharacteId(deviceId, uuid) {
    var that = this;
    wx.getBLEDeviceCharacteristics({
      deviceId: deviceId,
      serviceId: uuid,
      success: function (res) {
        console.log(res)
        var list = res.characteristics;
        if (list.length != 0) {
          list.forEach(item => {
            var model = item;
            // 判断是否可写  可写才可以传递数据
            if (model.properties.write == true) {
              var value = that.string2buffer('123');
              //指令写入到蓝牙设备
              wx.writeBLECharacteristicValue({
                deviceId: deviceId,
                serviceId: uuid,
                characteristicId: model.uuid,
                value: value,
                success(res) {
                  console.log(res)
                },
                fail(res) {
                  console.log(res)
                }
              })
            }
            // 改特征值可读
            if (model.properties.read) {
              wx.readBLECharacteristicValue({
                deviceId: deviceId,
                serviceId: uuid,
                characteristicId: model.uuid,
                success(res) {
                  console.log(res)
                }
              })
            }
            if (model.properties.notify || model.properties.indicate) {
              // 必须先启用 wx.notifyBLECharacteristicValueChange 才能监听到设备 onBLECharacteristicValueChange 事件
              wx.notifyBLECharacteristicValueChange(
              //启用 wx.notifyBLECharacteristicValueChange
                deviceId: deviceId,
                serviceId: uuid,
                characteristicId: model.uuid,
                state: true,
                success(res) {
                  console.log(res);
                  // 操作之前先监听,保证第一时间获取数据
                  wx.onBLECharacteristicValueChange((result) => {
                    console.log(result)
                    var value = that.ab2hex(result.value);
                    // 使用完成后在合适的时机断开连接和关闭蓝牙适配器
                     wx.closeBLEConnection({
                       deviceId,
                     })
                     wx.closeBluetoothAdapter()
                  })
                },
                fail(res) {
                  console.log(res)
                }
              })
            }
          });
        }
      }
    })
  },

流程用到的类型转换

将字符串转换成ArrayBufer

string2buffer(str) {
    let val = ""
    if (!str) return;
    let length = str.length;
    let index = 0;
    let array = []
    while (index < length) {
      array.push(str.substring(index, index + 2));
      index = index + 2;
    }
    val = array.join(",");
    // 将16进制转化为ArrayBuffer
    return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function (h) {
      return parseInt(h, 16)
    })).buffer
  },

将ArrayBuffer转换成字符串

  ab2hex(buffer) {
    var hexArr = Array.prototype.map.call(
      new Uint8Array(buffer),
      function (bit) {
        return ('00' + bit.toString(16)).slice(-2)
      }
    )
    return hexArr.join('');
  },
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:05:58  更:2022-01-14 02:07:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:56:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码