【问题标题】:Reading float value from WebBluetooth characteristic.readValue()从 WebBluetooth 特性读取浮点值.readValue()
【发布时间】:2020-09-16 04:24:04
【问题描述】:

我在 Raspberry pi 上有一个蓝牙模块,用于控制电路板的 CPU 温度。我正在使用WebBluetooth 制作一个从蓝牙模块读取该信息的网页,例如温度是一个浮点值“45.257”,问题是当我尝试读取该值时,我不知道如何从readValue() 函数的答案中解码,我的代码如下:

    async function onButtonClick() {
        let device = await navigator.bluetooth.requestDevice({
            acceptAllDevices: true,
        });
        let server = await device.gatt.connect();
        console.log(server);
        let services = await server.getPrimaryServices();
        console.log(services);
        let characteristics = await services[0].getCharacteristics();
        let value = await characteristics[0].readValue();
        console.log(value);
    }

我得到的答案是DataViewArrayBuffers

Int8Array(6) [52, 54, 46, 50, 53, 49]
Int16Array(3) [13876, 12846, 12597]
Uint8Array(6) [52, 54, 46, 50, 53, 49]

所以我不知道如何检索像“45.257”这样的数据。

提前致谢

【问题讨论】:

    标签: javascript web-bluetooth


    【解决方案1】:

    我有一个使用 TextDecoder 类的解决方案:

            const textDecoder = new TextDecoder('ascii');
            const value = textDecoder.decode(value.buffer);
            console.log(value);
    

    【讨论】:

    • 这是一个很好的解决方案,但有一些上下文对于提供问题和解决方案都很重要。也就是说,Raspberry Pi 生成的数据是一个 ASCII 字符串。根据上面的 Uint8Array 数据,这有点容易猜到,因为所有值都在正确的 ASCII 数字范围内。如果数据是作为实际浮点数发送的,那么您可以在 DataView 对象上使用 getFloat32() 或 getFloat64() 方法。
    猜你喜欢
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    相关资源
    最近更新 更多