我正在使用此site中的以下代码通过asp.net MVC Web App的浏览器配对并连接到蓝牙低能耗打印机。
navigator.bluetooth.requestDevice({
filters: [{ services: [0xffe5] }]
})
.then(function(device) {
// Step 2: Connect to it
return device.gatt.connect();
})
.then(function(server) {
// Step 3: Get the Service
return server.getPrimaryService(0xffe5);
})
.then(function(service) {
// Step 4: get the Characteristic
return service.getCharacteristic(0xffe9);
})
.then(function(characteristic) {
// Step 5: Write to the characteristic
var data = new Uint8Array([0xbb, 0x25, 0x05, 0x44]);
return characteristic.writeValue(data);
})
.catch(function(error) {
// And of course: error handling!
console.error('Connection failed!', error);
});
此代码可以正常工作,但是我不知道该怎么做,就是将“配对”,“连接”,“获取服务”和“写服务”与特征的实际编写脱钩。理想情况下,我想配对,连接一次即可获得服务和特性。然后只需不断地写值,这样我就可以打印多件东西,而不必每次都出现配对提示。我见过的每个示例都将它们全部以.then格式捆绑在一起,而不是独立捆绑在一起。
基本上如何解耦:
navigator.bluetooth.requestDevice({
filters: [{ services: [0xffe5] }]
})
.then(function(device) {
// Step 2: Connect to it
return device.gatt.connect();
})
.then(function(server) {
// Step 3: Get the Service
return server.getPrimaryService(0xffe5);
})
.then(function(service) {
// Step 4: get the Characteristic
return service.getCharacteristic(0xffe9);
})
});
从此:
.then(function(characteristic) {
// Step 5: Write to the characteristic
var data = new Uint8Array([0xbb, 0x25, 0x05, 0x44]);
return characteristic.writeValue(data);
})
});
谢谢。这是我第一次使用BTLE,因此很抱歉,这是一个愚蠢的问题,但是我有点挣扎。
答案 0 :(得分:0)
我在Angular应用程序中所做的就是使用async / await模式并将响应对象分配给这样的全局变量:
this.bluetoothDevice = await navigator.bluetooth.requestDevice({acceptAllDevices: true});
然后我使用另一个变量来管理连接:
this.serverConnected = await this.connect(this.bluetoothDevice.gatt);
最后,我在类内部的单独方法中使用这些变量来管理断开连接:
onDisconnectButtonClick() {
if (!this.bluetoothDevice) {
return;
}
console.log('Disconnecting from Bluetooth Device...');
if (this.bluetoothDevice.gatt.connected) {
this.bluetoothDevice.gatt.disconnect();
} else {
console.log('> Bluetooth Device is already disconnected');
this.deviceInfo = 'You have been disconnected.'
}
}
希望对您有帮助!