#node.js #web-bluetooth
#node.js #веб-bluetooth
Вопрос:
Я пытаюсь прочитать как характеристику шкалы веса, так и текущий уровень заряда батареи, который указан в службе батареи.
У меня есть следующее, которое работает для службы весовых весов и характеристики измерения веса, но я изо всех сил пытаюсь понять, как добавить к этому службу батареи (я не очень знаком с promises)
function connectGATT() {
if (bluetoothDeviceDetected.gatt.connected amp;amp; 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
})
}
Ответ №1:
Чтобы получить доступ к службе батареи, вам нужно вызвать, server.getPrimaryService('battery_service')
а затем вызвать getCharacteristic('battery_level')
результирующий объект BluetoothGATTRemoteService. Смотрите полный пример здесь.
Проблема, которую вы определили, заключается в том, что в настоящее время, написанная с использованием Promises, server
переменная больше не доступна в конце этой цепочки обещаний. Для этого есть несколько решений. Один из них заключается в использовании async / await следующим образом,
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');
Или вы можете вывести server
переменную на верхний уровень вашей функции и назначить ее в then()
обратном вызове после вызова connect()
, чтобы вы могли использовать ее из нескольких then()
обратных вызовов.