如何解决使用WebBluetooth访问多个服务和特征
我正在尝试读取体重秤的特性以及电池服务中当前的电池电量。
我有以下适用于体重秤服务和体重测量特性的产品,但是我正在努力寻找如何向其添加电池服务(我对诺言不太熟悉)
function connectGATT() {
if (bluetoothDeviceDetected.gatt.connected && gattCharacteristic) {
return Promise.resolve()
}
return bluetoothDeviceDetected.gatt.connect()
.then(server => {
console.log('Getting GATT Service...')
return server.getPrimaryService(wsService)
console.log(wsService)
})
.then(service => {
console.log('Getting GATT Characteristic...')
return service.getCharacteristic(wsCharacteristic)
console.log(wsCharacteristic)
})
.then(characteristic => {
gattCharacteristic = characteristic
gattCharacteristic.addEventListener('characteristicvaluechanged',handleNotifications)
document.querySelector('#start').disabled = false
document.querySelector('#stop').disabled = true
})
}
解决方法
要访问电池服务,您需要调用getCharacteristic('battery_level')
,然后在生成的BluetoothGATTRemoteService对象上调用server
。请参阅完整示例here。
您已经确定的挑战是,当前使用Promises编写的console.log('Connecting to GATT Server...');
const server = await device.gatt.connect();
console.log('Getting Battery Service...');
const service = await server.getPrimaryService('battery_service');
console.log('Getting Battery Level Characteristic...');
const characteristic = await service.getCharacteristic('battery_level');
变量在此Promise链的末尾不再可用。有两种解决方案。一种是像这样使用async / await,
server
或者您可以将then()
变量带入函数的顶层,并在调用connect()
之后在then()
回调中进行分配,以便可以从多个{ {1}}回调。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。