如何解决连接并从BLE设备接收数据时,出现DOM异常:不允许GATT服务器操作
我正在使用Web蓝牙API使用JavaScript与BLE 4.0拖拉机拖车测试仪模块连接。连接后,进入控制台
请求任何蓝牙设备... 正在连接到GATT服务器... 正在获取服务... 获取特征... 然后 DOM异常:不允许GATT服务器操作 我不知道为什么会弹出此错误。谁能解释为什么?
async function onConnect() {
try {
console.log('Requesting any Bluetooth Device...');
const device = await navigator.bluetooth.requestDevice({
acceptAllDevices: true
});
console.log('Connecting to GATT Server...');
const server = await device.gatt.connect();
console.log('Getting Service...');
const service = await server.getPrimaryService('ef160001-ec80-4b4e-b481-b6c995777b5f');
console.log('Getting characteristics...');
const characteristics = await service.getcharacteristics();
for (const characteristic of characteristics) {
switch (characteristic.uuid) { // characteristic.uuid
case 'ef160003-ec80-4b4e-b481-b6c995777b5f': // receive
await readValue1(characteristic);
break;
case 'ef160002-ec80-4b4e-b481-b6c995777b5f': // write
await readAppearanceValue2(characteristic);
break;
case '00002a04-0000-1000-8000-00805f9b34fb': // Manufacturer Name String
await readValue3(characteristic);
break;
case '00002aa6-0000-1000-8000-00805f9b34fb':
await readValue4(characteristic); // Central Address Resolution
break;
default: console.log('UnkNown Characteristic: ' + characteristic.uuid);
}
}
} catch (error) {
console.log(error)
}
async function readValue1(characteristic) {
const value = await characteristic.readValue();
$('#dataset1').text(new TextDecoder().decode(value));
console.log(new TextDecoder().decode(value));
}
async function readAppearanceValue2(characteristic) {
const value = await characteristic.readValue();
$('#dataset2').text(new TextDecoder().decode(value));
console.log(new TextDecoder().decode(value));
}
async function readValue3(characteristic) {
const value = await characteristic.readValue();
$('#dataset3').text(new TextDecoder().decode(value));
console.log(new TextDecoder().decode(value));
}
async function readValue4(characteristic) {
const value = await characteristic.readValue();
$('#dataset4').text(new TextDecoder().decode(value));
console.log(new TextDecoder().decode(value));
}
}
解决方法
我相信您遇到的与Web蓝牙无关,而是与Bluetooth核心规范(版本5.0第3卷,F部分,3.4.1.1版)中所述的GATT协议错误
我认为这些蓝牙特性无法读取,因此为什么承诺会因此错误而被拒绝,该错误映射到GATT世界中的“不允许读取”。
您可能需要向专用特性写入一些字节,以便GATT服务器允许读取。我建议您阅读软件文档(如果存在),否则戳可能会有所帮助。在这种情况下,请查看chrome://bluetooth-internals
来使用服务/特性。
有关调试Web蓝牙的提示,请参见https://web.dev/bluetooth/#tips。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。