如何在Chrome中通过WebBluetooth解析博世GLM激光测距仪消息
博世GLM 50 C激光测距仪WebBluetooth数据解析方案
解析逻辑
通过分析你提供的三组数据样本,测量距离被编码在消息Uint8Array的第7-10位字节(索引从0开始),并以**小端字节序(Little-Endian)**存储为32位单精度浮点数(Float32),数值单位为米。
验证示例
以你给出的样本为例:
- 第一组数据
[..., 162, 180, 151, 62, ...]→ 小端序转Float32得≈0.296→ 匹配设备显示0,296m - 第二组数据
[..., 181, 166, 13, 64, ...]→ 小端序转Float32得≈2.213→ 匹配设备显示2,213m - 第三组数据
[..., 143, 194, 164, 64, ...]→ 小端序转Float32得≈5.149→ 匹配设备显示5,149m
WebBluetooth解析代码实现
在特征值变化的回调中,使用DataView直接读取小端序浮点数是最简洁的方式:
// 假设你已经获取到目标特征characteristic characteristic.addEventListener('characteristicvaluechanged', (event) => { // 用DataView处理二进制数据 const dataView = new DataView(event.target.value.buffer); // 从字节偏移7的位置读取小端序单精度浮点数 const distanceInMeters = dataView.getFloat32(7, true); // 格式化输出(匹配设备的逗号分隔小数格式) const formattedDistance = distanceInMeters.toFixed(3).replace('.', ',') + 'm'; console.log(`当前测量距离: ${formattedDistance}`); });
补充说明
- 激活同步模式的指令
new Uint8Array([192, 85, 2, 1, 0, 26]).buffer是正确的,无需调整。 - 博世官方移动端库本质上也是采用相同的二进制解析逻辑,只是封装成了SDK接口。
内容的提问来源于stack exchange,提问作者Jakob
相关产品推荐
相关产品推荐

