<template>
<view>
<button type="primary" @click="startBluetoothDeviceDiscovery">搜索蓝牙</button>
<button type="primary" @click="onBluetoothDeviceFound">发现外围设备</button>
<button type="primary" @click="getBluetoothDevices">获取蓝牙设备信息</button>
<button type="primary" @click="getBLEDeviceServices">获取蓝牙所有服务</button>
<button type="primary" @click="getBLEDeviceCharacteristics">进入特征</button>
<view v-for="(item, index) in list" :key="index">
{{ item.name }}:{{ item.deviceId }}
<button type="primary" @click="createBLEConnection(item.deviceId)">连接</button>
</view>
<button type="primary" @click="writeBLECharacteristicValue">写入蓝牙</button>
<button type="primary" @click="stopBluetoothDevicesDiscovery">停止搜索蓝牙</button>
</view>
</template>
<script>
export default {
data() {
return {
list:[],
deviceId:'',
serviceId:'',
characteristics:[],
characteristicId:'',
}
},
onShow(){
uni.openBluetoothAdapter({
success:(res)=> {
uni.getBluetoothAdapterState({
success:(res1)=>{
console.log(res1,'本机设备的蓝牙已打开')
this.startBluetoothDeviceDiscovery()
},
fail(error) {
uni.showToast({icon:'none',title: '查看手机蓝牙是否打开'});
}
});
},
fail:err=>{
uni.showToast({icon:'none',title: '查看手机蓝牙是否打开'});
}
})
},
methods: {
startBluetoothDeviceDiscovery(){
uni.startBluetoothDevicesDiscovery({
success: (res) => {
console.log('startBluetoothDevicesDiscovery success', res)
this.onBluetoothDeviceFound()
},fail:err=>{
console.log(err,'错误信息')
}
})
},
onBluetoothDeviceFound() {
uni.onBluetoothDeviceFound((res) => {
console.log(JSON.stringify(res.devices))
if(this.list.indexOf(res.devices[0].deviceId)==-1){
this.list.push({
name:res.devices[0].name,
deviceId:res.devices[0].deviceId
})
}
})
},
getBluetoothDevices() {
console.log("获取蓝牙设备");
uni.getBluetoothDevices({
success: res => {
console.log('获取蓝牙设备成功:');
console.log(res.devices);
}
});
},
createBLEConnection(deviceId){
this.deviceId = deviceId,
uni.createBLEConnection({
deviceId:this.deviceId,
success(res) {
console.log(res)
console.log("蓝牙连接成功")
},fail(res) {
console.log("蓝牙连接失败",res)
}
})
},
stopBluetoothDevicesDiscovery(){
uni.stopBluetoothDevicesDiscovery({
success: e => {
this.loading = false
console.log('停止搜索蓝牙设备:' + e.errMsg);
},
fail: e => {
console.log('停止搜索蓝牙设备失败,错误码:' + e.errCode);
}
});
},
getBLEDeviceCharacteristics(){
console.log("进入特征");
setTimeout(()=>{
uni.getBLEDeviceCharacteristics({
deviceId:this.deviceId,
serviceId:this.serviceId,
success:(res)=>{
console.log(res,'特征getBLEDeviceCharacteristics')
this.characteristics = res.characteristics
console.log(this.characteristics)
res.characteristics.forEach((item)=>{
if(item.uuid.indexOf("470A") != -1){
this.characteristicId = item.uuid
this.notifyBLECharacteristicValueChange(item.uuid)
}
})
},
fail:(res)=>{
console.log(res)
}
})
},1000)
},
notifyBLECharacteristicValueChange(characteristicId){
console.log(characteristicId,'characteristicId')
uni.notifyBLECharacteristicValueChange({
state: true,
deviceId:this.deviceId,
serviceId:this.serviceId,
characteristicId:characteristicId,
success:(res)=> {
console.log(res)
console.log('notifyBLECharacteristicValueChange success', res.errMsg)
},
fail:(res)=> {
console.log('notifyBLECharacteristicValueChange fail', res.errMsg)
}
})
},
getBLEDeviceServices(){
setTimeout(()=>{
uni.getBLEDeviceServices({
deviceId:this.deviceId,
success:(res)=>{
console.log('device services:', res)
res.services.forEach((item)=>{
if(item.uuid.indexOf("470A")!=-1){
this.serviceId = item.uuid;
console.log(this.serviceId)
this.getBLEDeviceCharacteristics()
}
})
}
})
},1000)
},
writeBLECharacteristicValue() {
let buffer = new ArrayBuffer(1)
let dataView = new DataView(buffer)
dataView.setUint8(0, 0x20)
uni.writeBLECharacteristicValue({
deviceId: this.deviceId,
serviceId: this.serviceId,
characteristicId: this.characteristicId,
value:buffer,
success(res) {
console.log('writeBLECharacteristicValue success', res.errMsg)
},
fail(res) {
console.log(JSON.stringify(res))
console.log(JSON.stringify(buffer))
}
})
},
}
}
</script>
<style>
</style>
