uniapp蓝牙连接操作详解 您所在的位置:网站首页 安卓耳机怎么连接手机蓝牙 uniapp蓝牙连接操作详解

uniapp蓝牙连接操作详解

2024-07-11 11:44| 来源: 网络整理| 查看: 265

初始化蓝牙 openBluetoothAdapter() { uni.openBluetoothAdapter({ //打开蓝牙适配器接口 success: (res) => { //已打开 }, fail: err => { //未打开 uni.showToast({ icon: 'none', title: '查看手机蓝牙是否打开' }); } }) } 开始搜索蓝牙设备 startBluetoothDeviceDiscovery() { uni.startBluetoothDevicesDiscovery({ success: (res) => { // 发现外围设备 this.onBluetoothDeviceFound() }, fail: err => { console.log(err, '开始搜索蓝牙设备备错误信息') } }) } 发现外围设备 onBluetoothDeviceFound() { uni.onBluetoothDeviceFound((res) => { // res.devices 是所有的设备 }) } 连接设备 // item 是要连接的设备数据 createBLEConnection(item) { let that = this; uni.showLoading({ title: "连接中,请稍等", mask: true, }); uni.createBLEConnection({ deviceId: item.deviceId, success(res) { that.stopBluetoothDevicesDiscovery(); // 停止搜索蓝牙 that.getBLEDeviceServices(item); // 获取蓝牙的服务 }, fail(res) { uni.showToast({ title: item.name + "蓝牙连接失败", icon: "none", }); uni.hideLoading() } }); } 连接成功后停止搜索蓝牙 stopBluetoothDevicesDiscovery() { uni.stopBluetoothDevicesDiscovery({ success: e => { this.loading = false console.log('停止搜索蓝牙设备:' + e.errMsg); }, fail: e => { console.log('停止搜索蓝牙设备失败,错误码:' + e.errCode); } }); } 获取蓝牙的所有服务 getBLEDeviceServices(item) { setTimeout(() => { uni.getBLEDeviceServices({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: item.deviceId, success: (res) => { // 可以和做硬件的沟通 他会直接给你一个 也可以自己从res里取值 // res.services 是所有的服务 item["serviceId"] = '0000AE30-0000-1000-8000-00805F9B34FB'; // //进入特征 this.getBLEDeviceCharacteristics(item); }, }); }, 2000); } 获取蓝牙特征 getBLEDeviceCharacteristics(item) { let that = this setTimeout(() => { uni.getBLEDeviceCharacteristics({ deviceId: item.deviceId, serviceId: item.serviceId, success: (res) => { // res.characteristics 特征值列表 // 读写都需要用到特征值 }, fail: (res) => { console.log(res); }, }); }, 1000); } 启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值。

注意:必须设备的特征值支持 notify 或者 indicate 才可以成功调用。

notifyBLECharacteristicValueChange() { let that = this uni.notifyBLECharacteristicValueChange({ state: true, // 启用 notify 功能 // 下面三个都是上面获取到的,也可以由硬件工作人员直接提供 deviceId: , serviceId: , // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 characteristicId: , success: (res) => { this.listenValueChange() }, fail: (res) => { console.log("启用 notify 功能失败", res); uni.hideLoading(); }, }); }, 监听低功耗蓝牙设备的特征值变化事件

必须先启用 notifyBLECharacteristicValueChange 接口才能接收到设备推送的 notification。

listenValueChange() { uni.onBLECharacteristicValueChange(res => { let resHex = this.ab2hex(res.value); let result = this.hexCharCodeToStr(resHex); // result 硬件返回值 }) }, ab2hex(buffer, split='') { var hexArr = Array.prototype.map.call(new Uint8Array(buffer), function(bit) { return ('00' + bit.toString(16)).slice(-2) }) return hexArr.join(split) }, 写入 write(hexadecimal){ const buf = new ArrayBuffer(hexadecimal.length) const dataView = new DataView(buf) // 有字母的必须转16进制 // 例如 ["FF", "AA", "03", "00", "40", "02", "00", "45", "FE"] // ['06', '01', '01', '01', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00','00'] 这种不转也能识别 for (var i = 0; i uni.writeBLECharacteristicValue({ // 这里的 deviceId 需要在 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取 deviceId: , // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 serviceId: , // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 characteristicId: , // 这里的value是ArrayBuffer类型 value: buf, success(res) { console.log('writeBLECharacteristicValue success', res) }, fail(res) { console.log('失败', res) }, }) }) },


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有