专栏/小米手环心率直播 miband-heart-rate.exe 的高级使用方法

小米手环心率直播 miband-heart-rate.exe 的高级使用方法

2025年06月28日 05:48--浏览 · --点赞 · --评论
粉丝:168文章:42

本文是对以下两篇文章的补充扩展

1. 配合脚本获取心率数据

当运行 miband-heart-rate.exe 时,程序会在 3030 端口监听 HTTP 请求,此时如果打开 http://127.0.0.1:3030/ 程序就会返回一个 html 页面,用来显示心率。

而如果请求的是 http://127.0.0.1:3030/heartrate 这个端点,则程序会以 application/json 格式返回心率数据。例如:

复习一下JSON的定义(RFC 4627):一个 JSON 值必须是一个 object / array / number / string,或者 false null true 这三个字面量之一。
因此60本身是一个合法的 JSON 值,类型为number。

所以我们可以通过脚本去获取心率数据,而不通过网页,例如:

2. 自定义显示效果

方法1:直接在OBS里配置自定义CSS

例如我想替换字体,先在Google Fonts上找到喜欢的字体,然后在自定义CSS里用导入,并设置 #heart-rate-number 元素的 font-family 即可,例如:

再比如我想把整体调大一点,但是用OBS放大的时候会比较模糊,也可以通过CSS实现缩放整个<body>元素:

法2:可以从Github上下载网页的源代码并修改

在for-obs分支的web/index.html中可以修改各种样式,包括字体、心跳动画等等。如果不想重新编译的话,也可以参考我在<script>最后写的逻辑自己开发一个网页,能访问http://127.0.0.1:3030/heartrate获取到心率就行。

3. 蓝牙协议简介

在小米手环4、5、6、7中提供的运动心率广播,正如其名称所说,心率是通过蓝牙广播(Advertising)发出去的。

但是小米手环10的心率广播,并不是真的在广播时发送的。广播数据中只包含了HRS服务的声明,以及设备的简写名称而已。客户端扫描广播时识别到这个心率设备,还需要建立连接等一系列交互之后,才能接收到心率数据,所以并不是单纯的接收广播。

可以用 WebBluetooth 简单模拟一下这个过程,在Chrome或者Edge浏览器的控制台中输入以下代码:

获得的Heart Rate Measurement 数据也并不直接是心率数据,还需要解析:

  1. 第一个字节是 Flags Field,其中bit0代表心率数据格式,0代表心率数据是u8,1代表心率数据是u16;bit1代表传感器接触检测,0代表传感器与皮肤接触不良,1代表传感器与皮肤接触良好;bit2代表传感器是否支持接触检测,0代表不支持,1代表支持;余下的bit这里不作介绍

  2. 第二到三个字节代表心率数据,具体长度取决于Flags Field的bit0。小端序。


投诉或建议