从 WebBluetooth 读取浮点值 characteristic.readValue()

Reading float value from WebBluetooth characteristic.readValue()

提问人:Eduardo Galeano 提问时间:9/8/2020 最后编辑:marc_sEduardo Galeano 更新时间:9/16/2020 访问量:271

问:

我在 Raspberry pi 上有一个蓝牙模块,它为电路板的 cpu 温度提供服务。我用来制作一个网页,从蓝牙模块读取该信息,例如,温度是浮点值“45.257”,问题是当我尝试读取该值时,我不知道如何从函数的答案中解码它,我的代码是这样的:WebBluetoothreadValue()

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

我得到的答案是DataViewArrayBuffer

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

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

提前致谢

JavaScript 网络蓝牙

评论


答:

1赞 Eduardo Galeano 9/9/2020 #1

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

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

评论

0赞 Reilly Grant 9/9/2020
这是一个很好的解决方案,但有一些上下文对于提供问题和解决方案都很重要。也就是说,Raspberry Pi 生成的数据是 ASCII 字符串。根据上面的 Uint8Array 数据,这有点容易猜到,因为所有值都在正确的范围内,可以作为 ASCII 数字。如果数据是作为实际浮点数发送的,则可以改用 DataView 对象上的 getFloat32() 或 getFloat64() 方法。