在网页端直接读取心率带数据已经不再是难题,浏览器内置的Web Bluetooth API让前端可以扫描并连接低功耗蓝牙设备。心率带通常遵循蓝牙SIG定义的心率服务规范,通过广播和特征值把每分钟心跳数传给手机或电脑。借助jQuery对异步流程和DOM操作做一层封装,开发者能用更简洁的代码完成设备发现、连接保持以及数据渲染,从而降低蓝牙开发门槛。

蓝牙BLE与心率带通信基础
蓝牙低功耗(BLE)是一种专为小数据量、低功耗场景设计的无线通信技术。心率带作为典型BLE外设,会在广播包中声明自己支持心率服务,其标准服务UUID为0x180D。在该服务下,心率测量特征值UUID为0x2A37,设备会按照一定间隔向订阅者推送包含心率数值的二进制报文。
网页端要拿到这些数据,需调用navigator.bluetooth.requestDevice过滤出心率服务设备,再建立GATT连接并获取特征值对象,最后启用notify让设备主动上报。原生步骤涉及多个Promise回调,如果页面还要同时更新多个DOM节点,代码容易变得杂乱。理解这套链路,是后面用jQuery封装的前提。
用jQuery封装连接与数据逻辑
我们可以把设备请求、连接、特征值监听写成一个jQuery插件或工具对象,暴露如$.bleHeart.connect()与$.bleHeart.onRate()之类的方法。内部用Deferred对象统一管理异步状态,外部只需传成功与失败回调,就能在页面里控制按钮状态和提示文字。
封装时建议把二进制解析单独成函数:心率测量标志位决定数值是uint8还是uint16,还要跳过可能存在的能量消耗字段。用jQuery的trigger机制派发自定义事件,比如heartbeat:update,页面各模块通过on方法订阅,实现数据与视图解耦。这样即便后续加入图表库,也无需改动蓝牙层代码。
核心封装示例代码结构
下面给出逻辑骨架,实际项目可补全错误处理。先定义设备缓存与特征值引用,再在connect里完成requestDevice到startNotifications的链条,最后用addEventListener接收蓝牙推送并解析后trigger事件。
- 定义$.bleHeart对象保存device、server、characteristic
- connect方法内使用navigator.bluetooth.requestDevice过滤services: ['heart_rate']
- 解析函数根据首字节flag判断心率长度并提取数值
- 用$(document).trigger('heartbeat:update', [bpm])广播给页面
实时心率监测页面展示
拿到封装后的事件,就能在页面放一个大号数字区和简易折线图。数字区用jQuery的text方法刷新,折线图可用canvas或现成库,每收到一次heartbeat:update就推入数据点并重绘。这种结构让用户打开网页点连接,十秒内即可看到自己静止与运动时的心率变化。
为提升体验,应在断开时自动尝试重连,并监听蓝牙adapter状态。若用户离开页面,用beforeunload断开GATT避免占用设备。下表列出常见心率带返回数据格式差异,方便解析时做兼容。
| 标志位值 | 心率字段长度 | 附加字段 |
|---|---|---|
| 0x00 | 1字节 | 无 |
| 0x01 | 2字节 | 无 |
| 0x08 | 1字节 | 能量消耗1字节 |
连接不稳定与权限处理
Web Bluetooth要求页面在HTTPS下运行,且必须由用户手势触发requestDevice,不能自动后台连。很多新手在加载时直接调用导致报错,应把连接按钮绑定click事件,并在失败回调里提示用户检查系统蓝牙开关。
心率带有时会因距离远掉线,封装层可监听characteristic的oncharacteristicvaluechanged停止或device的gattserverdisconnected,然后延时重连。配合jQuery的按钮禁用状态,能避免重复连接请求堆积。掌握这些细节,网页端心率监测就能达到可用的稳定度。