<view>
<!-- <button @click="search()">扫描</button> -->
<button @click="init()">加载蓝牙</button>
<button @click="connect()">连接蓝牙</button>
<button @click="getServices()">获取主服务</button>
<button @click="getCharacteristics()">获取特征码</button>
<button @click="notifyEanble()">启用通知</button>
<button @click="notifyDisable()">停用通知</button>
<button @click="listener()">开启监听</button>
<button @click="sendMessage()">发送</button>
</view>
</template>
<script>
export default {
data() {
return {
DeviceID: "20:22:06:26:AA:02",
ServiceID: null,
characteristicWriteID: null,
characteristicNotifyID: null,
};
},
onLoad() {
},
methods: {
sendMessage: function() {
let buffer = this.stringToBytes("{n}")
// console.log(this.characteristicWriteID)
uni.writeBLECharacteristicValue({
deviceId:this.DeviceID,
serviceId:this.ServiceID,
characteristicId:this.characteristicWriteID,
value:buffer,
writeType:"write",
success(res) {
console.log(res)
}
})
},
stringToBytes(str) {
var array = new Uint8Array(str.length);
for (var i = 0, l = str.length; i < l; i++) {
array[i] = str.charCodeAt(i);
}
// console.log(array);
return array.buffer;
},
ab2str: function(buf) {
return String.fromCharCode.apply(null, new Uint8Array(buf));
},
connect: function() {
uni.createBLEConnection({
deviceId:this.DeviceID,
success() {
uni.showToast({
title:"蓝牙连接成功",
duration:2000
})
}
})
},
getServices: function() {
let _that = this
uni.getBLEDeviceServices({
deviceId:this.DeviceID,
success(res) {
res.services.forEach(service => {
console.log(service)
if(service.isPrimary) {
_that.ServiceID = service.uuid
uni.showToast({
title:"获取主服务成功",
duration:2000
})
return
}
})
uni.showToast({
title:"获取主服务失败",
icon:"error",
duration:2000
})
}
})
},
getCharacteristics: function() {
let _that = this
uni.getBLEDeviceCharacteristics({
deviceId:this.DeviceID,
serviceId:this.ServiceID,
success(res) {
res.characteristics.forEach(characteristic => {
console.log(characteristic)
if(characteristic.properties.write) {
_that.characteristicWriteID = characteristic.uuid
}
if(characteristic.properties.notify) {
_that.characteristicNotifyID = characteristic.uuid
}
})
uni.showToast({
title:"获取特征码完成",
duration:2000
})
}
})
},
notifyEanble: function() {
uni.notifyBLECharacteristicValueChange({
deviceId:this.DeviceID,
serviceId:this.ServiceID,
characteristicId:this.characteristicNotifyID,
state:true,
success(res) {
uni.onBLECharacteristicValueChange(function(dataRes) {
console.log(33333)
console.log(_that.ab2str(dataRes.value))
})
uni.showToast({
title:"订阅成功",
duration:2000
})
},
fail: (res) => {
console.log(res)
}
})
},
notifyDisable: function() {
uni.notifyBLECharacteristicValueChange({
state:false,
deviceId:this.DeviceID,
serviceId:this.ServiceID,
characteristicId:this.characteristicNotifyID,
success(res) {
uni.showToast({
title:"订阅成功",
duration:2000
})
}
})
},
listener: function() {
uni.onBLECharacteristicValueChange(function(res) {
console.log(33333)
console.log(_that.ab2str(res.value))
})
},
init: function() {
uni.openBluetoothAdapter({
success() {
uni.showToast({
title:"蓝牙模块初始化成功",
duration:2000
})
}
})
}
}
}
</script>
<style scoped lang="less">
</style>
- 发布:2022-07-05 15:20
- 更新:2024-04-03 15:34
- 阅读:1533
产品分类: uniapp/小程序/微信
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 12.3.1
HBuilderX类型: 正式
HBuilderX版本号: 3.4.18
第三方开发者工具版本号: 1.0.6
基础库版本号: 2.24.0
项目创建方式: HBuilderX
示例代码:
操作步骤:
建立蓝牙连接-》获取services-〉获取特征码-》开启通知并监听notify-〉下发指令
建立蓝牙连接-》获取services-〉获取特征码-》开启通知并监听notify-〉下发指令
预期结果:
当下发指令后,应该出发监听的回调
当下发指令后,应该出发监听的回调
实际结果:
指令下发后,监听消息的回调并未触发
指令下发后,监听消息的回调并未触发
bug描述:
微信小程序操控蓝牙设备:扫描、连接、发送指令都OK,唯独特征码监听无反应,能确定设备给小程序发送数据了,但是onBLECharacteristicValueChange回调就是收不到也不触发
10 个回复
l***@dierjie.org (作者)
求关注
a聆听
在获取蓝牙设备某个服务中所有特征值的成功回调里去调用notifyBLECharacteristicValueChange;
在 notifyBLECharacteristicValueChange 的 complete 里去调用 onBLECharacteristicValueChange;
l***@dierjie.org (作者)
放到complete里也不好使==!
2022-07-07 21:50
l***@dierjie.org (作者)
唉,完全没有头绪了
l***@dierjie.org (作者)
依然还卡在这里==! 求大神帮忙
a聆听
肯定是设备的特征值没有对应上; 你的characteristicNotifyID 不对;你首先要确定那个特征值是"读",那个特征值是"写";characteristicNotifyID 应该是"读" 的UUID;
2022-07-16 15:37
a聆听
有些蓝牙芯片不一定有 properties.notify 自己输出特征值仔细看看吧;
2022-07-16 15:42
2***@qq.com
遇到了一样的问题,ios可以安卓不行
北斗星辰
遇到类似的问题,调用普通接口有效,但是有一个接口需要硬件工程师主动断开蓝牙连接,然后主动再次连接,然后传参就收不到了(uni.onBLECharacteristicValueChange不调用)
9***@qq.com - 小白
遇到了一样的问题,楼主最后怎么解决的? 求告知
9***@qq.com
我在这个里面监听到了
yangjw
uni.notifyBLECharacteristicValueChange({
里面不执行onBLECharacteristicValueChange
1***@163.com - 这是个人介绍...
现在解决了吗楼主