Web 蓝牙 GATT 特性通知设置太慢 - 如何缩短设置时间?
WebBluetooth GATT Characteric Notification Setup too slow - How to improve Setup time?
我尝试使用 WebBluetooth 连接到 BLE 设备(LEGO Powered UP 设备)。我已经在同一个笔记本上使用 .NET/WinRT 完成了此操作(效果很好),现在我尝试编写一个适配器以在 Blazor 中使用它。 LEGO PoweredUp 设备使用带通知和 WriteValue 的 BLE GATT 特性实现 communication protocol。
设备一连接,它就会立即发送一系列通知(作为对之前连接的一种响应)来公开我需要的信息。我能够使用 WinRT 在 .NET 中足够快地设置通知接收器。但是,使用 Chrome 的 WebBluetooth,我只收到 - 取决于 timing/iteration - 在最后 3 条和第 9 条消息之间(预计有 9 条消息)。我想这只是一个常规的竞争条件。
我的问题:这是预期的吗?我可以做些什么来反对它吗?
低于最小可行测试(当连接到 LEGO Technic Control+ 集线器时应该 return 9 条消息)。
function writeToLog(x) {
console.log(x.target.value.buffer);
}
async function connectToLwpDevice() {
const serviceUuid = "00001623-1212-EFDE-1623-785FEABCD123".toLowerCase();
const characteristicUuid = "00001624-1212-EFDE-1623-785FEABCD123".toLowerCase();
const device = await navigator.bluetooth.requestDevice({ filters: [{ services: [serviceUuid] }] });
const connectedDevice = await device.gatt.connect();
const service = await connectedDevice.getPrimaryService(serviceUuid);
const characteristic = await service.getCharacteristic(characteristicUuid);
characteristic.addEventListener('characteristicvaluechanged', writeToLog);
await characteristic.startNotifications();
}
我认为目前对此无能为力。我已针对 Web 蓝牙规范提交 an issue 以跟踪我认为为了能够接收这些通知所必需的更改。
我尝试使用 WebBluetooth 连接到 BLE 设备(LEGO Powered UP 设备)。我已经在同一个笔记本上使用 .NET/WinRT 完成了此操作(效果很好),现在我尝试编写一个适配器以在 Blazor 中使用它。 LEGO PoweredUp 设备使用带通知和 WriteValue 的 BLE GATT 特性实现 communication protocol。
设备一连接,它就会立即发送一系列通知(作为对之前连接的一种响应)来公开我需要的信息。我能够使用 WinRT 在 .NET 中足够快地设置通知接收器。但是,使用 Chrome 的 WebBluetooth,我只收到 - 取决于 timing/iteration - 在最后 3 条和第 9 条消息之间(预计有 9 条消息)。我想这只是一个常规的竞争条件。
我的问题:这是预期的吗?我可以做些什么来反对它吗?
低于最小可行测试(当连接到 LEGO Technic Control+ 集线器时应该 return 9 条消息)。
function writeToLog(x) {
console.log(x.target.value.buffer);
}
async function connectToLwpDevice() {
const serviceUuid = "00001623-1212-EFDE-1623-785FEABCD123".toLowerCase();
const characteristicUuid = "00001624-1212-EFDE-1623-785FEABCD123".toLowerCase();
const device = await navigator.bluetooth.requestDevice({ filters: [{ services: [serviceUuid] }] });
const connectedDevice = await device.gatt.connect();
const service = await connectedDevice.getPrimaryService(serviceUuid);
const characteristic = await service.getCharacteristic(characteristicUuid);
characteristic.addEventListener('characteristicvaluechanged', writeToLog);
await characteristic.startNotifications();
}
我认为目前对此无能为力。我已针对 Web 蓝牙规范提交 an issue 以跟踪我认为为了能够接收这些通知所必需的更改。