使用网络蓝牙从 BLE 设备读取数据?

Reading data from BLE device with web bluetooth?

我是 javascript 的新手,所以我可能有一些非常规的编程方式。 也就是说,我正在做一个项目,我需要在自定义 BLE 设备上读取和写入数据。 我正在使用 gatt 服务器协议进行连接。 我能够与设备建立连接,但现在我正在尝试从寄存器中读取数据。

我查看了来自 google 的网络样本以及网络蓝牙 github,但我无法理解它。下面的代码是我目前试图打破这个。之前的尝试让我陷入了这样一个事实,即我得到的值是一个对象或一个 promise 对象。

function readFromPcb() {
    let p2 = new Promise((resolve, reject) => {
        if (device.connected === false) {
            reject('network Error');
        }
    })
        .then(characteristic => {
            readValue = characteristic.readValue();
            console.log('data is: ' + readValue);
        })
        .catch(error => {
            console.log('error: ' + error + DOMException.name);
        });
}

我对 Web Bluetooth 知之甚少,但我注意到您的最高承诺从未兑现。如果设备未连接,它要么拒绝,要么……什么都不做。如果您希望 then 回调到 运行,您需要在主要承诺中的某个时间点调用 resolve()。也就是说,由于您明确构建了这个承诺,因此它解析的值将只是您自己传递给 resolve() 的任何参数;这听起来不像你想要的。什么函数应该给你 "characteristic"?这可能是 returns 一个承诺,你不需要自己构建一个,你可以将其他 then 回调链接到承诺上 returns 为你。

我做到了!我需要访问网络蓝牙的特征级别。之后,我可以使用我的连接函数的承诺将 .then 链接到我的读取函数。

感谢您的帮助。

function readFromPcb() {
    prom.then(_ => {
        console.log('getting data...');
        gattChar.readValue();
    })
        .catch(error => {
            console.log('error: ' + error + ' ' + DOMException.name);
        });
}