uniapp通过蓝牙在设备中拿数据

1、初始化蓝牙模块: 

uni.openBluetoothAdapter({
    success(res1) {
        console.log("蓝牙初始化成功",res1)
    }
})

2、初始化蓝牙后,获取本机蓝牙是否开启

uni.getBluetoothAdapterState({
    success: function(row) {
        console.log('蓝牙状态:', row.available);
        if (row.available) {
            // 蓝牙连接成功,开启蓝牙设备搜索
        } else {
            // 请开启蓝牙
            uni.showToast({
                title: "请开启蓝牙",
                icon: 'none',
                duration: 2000
            });
        }
    },
    fail: function(err) {
        // 请开启蓝牙
        uni.showToast({
            title: "请开启蓝牙",
            icon: 'none',
            duration: 2000
        });
    }
})

3、蓝牙打开后,开始搜索设备

uni.startBluetoothDevicesDiscovery({
    success(res2) {
        uni.showLoading({
            title: "正在搜索设备",
            icon:"none",
            duration: 2000
        });
        console.log('搜索蓝牙外围设备完成', res2)
    }
});

4、监听寻找到新设备的事件

uni.onBluetoothDeviceFound(function (devices) {
    console.log("devices", devices)
    console.log("devices1", devices.devices)
    if (devices.devices[0].name == 'Mintti') {
        uni.hideLoading()
        let deviceId = devices.devices[0].deviceId
    }
})

5、寻找到该设备后停止搜索

uni.stopBluetoothDevicesDiscovery({
    success(res4) {
        console.log('res4',res4)
    }
})

6、连接蓝牙设备

uni.createBLEConnection({
    deviceId: deviceId, // 设备id
    success() {
        console.log('蓝牙连接成功后关闭蓝牙搜索并获取服务id')
        // 获取服务id
    }
})

7、连接成功后,获取服务id

uni.getBLEDeviceServices({
    deviceId: deviceId,
    success(res5) {
        console.log("获取服务Id", res5)
        // serviceId固定,获取蓝牙设备某个服务中的所有特征值【读写属性】,如果有多个服务可以都尝试下
        if (res5.services && res5.services.length > 0) {
            let serviceId = res5.services[0].uuid;
            console.log('serviceId', serviceId);
        }
    }
})					            

8、获取到服务id后,调用蓝牙监听和写入功能

uni.getBLEDeviceCharacteristics({
    deviceId: deviceId, // 蓝牙设备id
    serviceId: serviceId, // 蓝牙服务UUID
    success(res6) {
        console.log('数据监听', res6);
        res6.characteristics.forEach(item => {
            // 003
            if (item.properties.notify === true) {
                // 监听
                let notifyId = item.uuid;
            }
            // 002
            if (item.properties.write === true) {
                // 写入
                let writeId = item.uuid;
			}
        }
    }
})

9、如果是监听设备返回数据,启用低功耗蓝牙设备特征值变化时的notify功能

uni.notifyBLECharacteristicValueChange({
    characteristicId: notify,
    deviceId: deviceId,
    serviceId: serviceId,
    state: true,
    success(res) {
        // 监听低功耗蓝牙设备的特征值变化
        uni.onBLECharacteristicValueChange(result => {
            console.log("监听低功耗蓝牙设备的特征值变化", result);
            if (result.value) {
                let resHex = this.ab2hex(result.value)
                console.log('设备返回数据', resHex)
            }
        })
    }
});

10、如果是向设备发送数据

uni.writeBLECharacteristicValue({
    characteristicId: writeId,
    deviceId: deviceId,
    serviceId: serviceId,
    value: buffer, // 具体数据
    success(res) {
        console.log("writeBLECharacteristicValue success", res);
    },
    fail(err) {
        console.log("报错了", err);
    }
});

11、需要做数据处理的方法

ab2hex(buffer) {
    const hexArr = Array.prototype.map.call(
        new Uint8Array(buffer),
        function (bit) {
            return ('00' + bit.toString(16)).slice(-2)
        }
    )
    return hexArr.join('')
}

你可能感兴趣的:(uni-app,前端)