- 积分
- 895
- 金钱
- 832
- 威望
- 0
- 贡献
- 0
- HASS币
- 0
高级会员
- 积分
- 895
- 金钱
- 832
- HASS币
- 0
|
本帖最后由 heqicheng 于 2021-12-7 19:28 编辑
直接上结论吧:蓝牙血压计的SERVICE_UUID为01000000-0000-0000-0000-000000000080
订阅通知的CHARACTERISTIC_UUID为02000000-0000-0000-0000-000000000080订阅通知的Descriptor uuid为00002902-0000-1000-8000-00805f9b34fb
发送指令的CHARACTERISTIC_UUID为05000000-0000-0000-0000-000000000080
开始测量的指令为ffff0501fa
停止测量的指令为ffff0504f7
测量过程中,接收到的通知byte数组较长,测量完成后,接收到的byte数组为4位,其中第二位为心率,第三位为上压,第四位为下压,心率数据直接可用,实际上压为第三位+30,实际下压为第四位+30,例如:
byte[] bytes = characteristic.getValue();
if (bytes.length != 4) {
showData("正在测量");
return;
}
String msg = "上压:";
int up = Integer.valueOf(bytes[2]) + 30;
msg += String.valueOf(up);
msg += " 下压:";
int down = Integer.valueOf(bytes[3]) + 30;
msg += String.valueOf(down);
msg += " 心率:";
int rate = Integer.valueOf(bytes[1]);
msg += String.valueOf(rate);
有了以上信息,就可以自己写代码实现了,无论是app还是esphome都可以。
顺便吐槽一下,拿这个数据真不容易啊,先用国产手机获取hci log,由于获取不了root权限,修改不了/etc/bluetooth/bt_stack.conf文件,里面默认的日志级别是warning,这样拿到的hci log是不完整的,看不到SERVICE_UUID、CHARACTERISTIC_UUID,指令内容也全是0,后来还是翻箱倒柜找到一台上古神器google nexus 6p才搞定
用nexus 6p获取蓝牙指令的过程:
1、root,用面具就可以
2、装re管理器
3、re管理器打开/etc/bluetooth目录,挂载为可读写
4、修改bt_stack.conf,将TRC_XXX=2全部改为TRC_XXX=5
5、进入开发者模式,打开“启用蓝牙HCI信息收集日志”选项
6、重启一下蓝牙
7、微信小程序“指数康康”操作一下血压计
8、此时hci log就已经有记录了,该日志文件存放目录,不同的android版本不一样,例如我的是android 8.1版本,就在data/misc/bluetooth/logs,而android 10则在/data/log/bt 9、安装wireshark,打开下载的hci log,就能看到指令了,protocol选att,info看send write request的就可以,如下图
|
-
评分
-
查看全部评分
|