【问题标题】:Reading data from BLE device with web bluetooth?使用网络蓝牙从 BLE 设备读取数据?
【发布时间】:2019-09-18 21:28:16
【问题描述】:

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

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

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);
        });
}

【问题讨论】:

标签: javascript bluetooth-lowenergy bluetooth-gatt


【解决方案1】:

我对网络蓝牙知之甚少,但我注意到您的最高承诺永远不会兑现。如果设备未连接,它要么拒绝,要么......什么都不做。如果您希望then 回调运行,您需要在您的主要承诺中的某个时刻调用resolve()。也就是说,由于您明确构建了这个 Promise,它解析的值将只是您自己传递给 resolve() 的任何参数;这听起来不像你想要的。什么功能应该给你“特征”?那是一个可能返回一个 Promise 并且您不需要自己构建一个,您可以将其他 then 回调链接到它为您返回的 Promise 上。

【讨论】:

  • 我从我的连接函数中获得了我的“特征”,即建立初始连接的那个。你能解释一下我如何使用这个承诺作为这个函数的回调吗?我对 Promise 没有完全理解,所以我尽力而为。
  • 快速浏览 MDN 文档说 GATT 服务器的 connect 函数返回一个承诺。因此,您应该将 .then 回调链接到 connect 函数的末尾,而不是做出自己的 Promise。
【解决方案2】:

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

感谢您的帮助。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2012-06-09
    相关资源
    最近更新 更多