要从具有蓝牙功能的BLE设备读取数据吗?

时间:2019-09-17 13:58:33

标签: javascript bluetooth-lowenergy bluetooth-gatt

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

我浏览了谷歌的网络示例以及网络蓝牙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);
        });
}

2 个答案:

答案 0 :(得分:1)

我对Web蓝牙了解不多,但是我注意到您的最大诺言从未解决。如果设备未连接,它要么拒绝,要么...什么都不做。如果要运行then回调,则需要在主要承诺中的某个时刻调用resolve()。就是说,由于您显式构造了这个诺言,因此它所解析的值将是您自己传递给resolve()的任何参数;听起来不像你想要的。什么功能应该给您“特色”?那就是可能返回承诺的那个,您不需要自己构造一个,您可以将其他then回调链接到它为您返回的承诺上。

答案 1 :(得分:0)

我成功了!我需要访问网络蓝牙的特征级别。之后,我可以使用connect函数的promise将.then链接到我的read函数。

感谢您的帮助。

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