提问人:Eduardo Galeano 提问时间:9/8/2020 最后编辑:marc_sEduardo Galeano 更新时间:9/16/2020 访问量:271
从 WebBluetooth 读取浮点值 characteristic.readValue()
Reading float value from WebBluetooth characteristic.readValue()
问:
我在 Raspberry pi 上有一个蓝牙模块,它为电路板的 cpu 温度提供服务。我用来制作一个网页,从蓝牙模块读取该信息,例如,温度是浮点值“45.257”,问题是当我尝试读取该值时,我不知道如何从函数的答案中解码它,我的代码是这样的:WebBluetooth
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);
}
我得到的答案是DataView
ArrayBuffer
Int8Array(6) [52, 54, 46, 50, 53, 49]
Int16Array(3) [13876, 12846, 12597]
Uint8Array(6) [52, 54, 46, 50, 53, 49]
所以我不知道如何检索像“45.257”这样的数据。
提前致谢
答:
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() 方法。
评论