您的位置: 游戏资讯 > 游戏问答

小米手环2显示充电但用不了,小米手环2能不能接收手机信息

来源:头条 浏览:0 2022-12-30 11:27:01

本文翻译自hacker博客,原文地址(略)

这个故事来源于我在Facebook上投稿。 这篇帖子讨论了体育健身追踪器缺乏API接口的问题,以及为什么数据专家有助于制造酷的东西。

帖子发出后,我的好朋友Volodymyr Shymanskyy回应帮助我,在github上找Leo Soares项目,找我的健身追踪器小米手环2的代码。 他试图执行它,但由于连接上有一些链接问题,他花了几个小时修复了他。 后来,他提交了commit,并给了我一个链接。

小米手环2显示充电但用不了,小米手环2能不能接收手机信息

那个满足了我的初步需求,已经相当OK了。 其编码可以连接手环,发出通知,拍摄心脏进行测量。 但是,这对我来说还有点不够。 因为我想从传感器中获取实时的原始数据,在我的数据科学实验中使用(我想做健身运动预测器)。

正文才刚刚开始……在那之前,我从来没有使用过蓝牙设备,所以我先试着了解一下这些东西是如何组织和工作的。 事实证明,并不是什么稀罕事。

每个蓝牙设备都将启动一些服务。 每个服务都有一个特征,某些特征具有描述符(如果有多个参数或工作类型,则为读取|通知)。 也有只有读写权限的特性,如当前时间、电池状态、修订信息等。 一些循环工作更为复杂,例如实时心率监测器和批准,需要请求/通知。 基本上,要开始使用它,你需要知道所有这些。

调试蓝牙设备还需要两个APP:wireshark和BLE debugger。 需要访问Android的手机开发者选项(对不起,iOS的家伙还不知道如何实现它)。

首先,需要从手机APP程序上解除小米手环2的配对。

现在,让我们看看手镯有什么服务和特点。 打开BLE debugger开始扫描吧。 你可以看到这样的东西:

保存设备的MAC地址将用于后续操作。

现在,连接上它,看看跑了什么样的服务和特征。

在以上两个简单的操作中,我们已经得到了一些有用的设备信息。

另一种方法是使用控制台工具hcitool和gatttool。

Scan:sudo hcitool lescan

连接并获取服务和描述符:

sdogatttool-by our _ MAC-I-t random

连接

主要

char-desc

在某些情况下,BLE堆栈可能出现故障。 您可以打开或关闭蓝牙,并执行以下命令:

sudo hciconfig hci0 reset

数据探查需要启用蓝牙并在开发设置中记录日志,以便在我们的手机-基带通信中探查数据。 为此,首先需要打开安卓手机的开发者设置。

以下是操作的详细步骤。 在Android 4.1及更早版本中,缺省情况下可以使用“开发者选项”屏幕。 在Android 4.2或更高版本中,必须按如下方式启用此屏幕:

1 .打开手机设置。

2.) (仅限安卓8.0或更高版本) )选择系统。

3 .向下滚动以选择手机。

4 .向下滚动,然后单击7次Build number 7。

5 .返回上一屏幕,查找底部附近的开发人员选项。

打开开发设置,找到并启用“启用蓝牙HCI snoop log”。 这将记录所有蓝牙通信。 然后,需要找到名为btsnoop_hci.log的文件。 (在我的手机上) Android 7.0 (它位于/mtklog/btlog/btsnoop_hci.log上) )。

要获取有关身份验证(配对)如何工作的信息,请执行以下操作:

1 .打开蓝牙和HCI日志。

2 .将您的设备与小米Android程序配对。

3 .关闭蓝牙。

将btsnoop_hci.log下载到你的电脑上。

在Wireshark中打开。

找到处理0x0055的第一个ATT协议请求

可以看到如图所示的界面:

这是验证步骤:

配对设备

主要服务UUID

000 fee1- 00001000800000805 f9b 34fb

认证特征( Char ) UUID

00000090000351221180009 af 100700

通知描述符( Des )处理

0x2902 (所有流程都一样) ) )。

1 .向des发送2字节请求\x01\x00,设定auth通知(得到响应)。

2 .命令将16字节的加密密钥发送到Char,并添加2字节\x01\x00 KEY。

3.2向Char发送字节\x02\x00,请求设备的随机密钥带命令。

4 .从设备响应中获得随机密钥(最后16个字节)。

5 .使用我们的16字节密钥加密此随机数(从crypto.cipherimportaes ),并将其发送回char(x03(x00编码数据)。

将认证1.2字节\x02 \x00发送到Char,并向设备请求带命令的随机密钥。

2 .从设备响应中获得随机密钥(最后16个字节)。

3 .使用我们的16字节密钥,加密此随机数(从crypto.cipherimportaes ),并发回给char ( x03 )。

实时数据这在认证过程中会有点复杂。 因为我没有看到在这个过程中犯了错误。 (然后,这个心率监测器在15秒后关闭。

硬件服务( HRDW ) UUID

000 Fe E0-0000-1000-8000-00805 f9b 34fb

心脏监测服务( HMS ) UUID

0000180 d-0000-1000-8000-00805 f9b 34fb

心率测量特性( HRM ) UUID

00002 a37-0000-1000-8000-00805 f9b 34fb

心脏监护仪控制特性( HMC ) UUID

00002 a39-0000-1000-8000-00805 f9b 34fb

传感器特性( SENS ) UUID

0000001-0000-3512-2118-0009 af 100700

通知描述符( DES )句柄

0x2902 (所有流程都一样) )。

1 .关闭当前监听的测量。

2 .通过向HMC发送请求\x15\x02\x00,进行成批测量。

3 .通过向HMC发送请求\x15\x01\x00来进行连续测量。

通过向SENS发送命令来启用陀螺仪和心脏的原始数据

5 .通过向HRM写入DES \x01\ x00启用通知

6 .通过向HMC发送请求\x15\x01\x01开始连续心脏测量

向SENS \x02发送命令(我不知道为什么需要这个命令) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

8 .然后,如果您每12秒收到一次通知,则必须将\x16 ping发送到HCM

分析数据是最无聊的部分。 基本上是因为我们需要找到如何包装来自设备的包装数据。

其中的一部分可以从日志中解析,但也有不能解析的。

这是当前时间设备的响应

找到合适的数据包和编码可能需要一些时间。 在我的例子中,需要在相邻的数据包中找到相似字节的出现次数、重复的数据包。

raw heart:02102 d8c 348 c 448 c 458 C3 d8c 428 c 488 c 16

raw heart:0218468 c 418 C3 d8c 468 C3 f8c 398 c 418 c 16

Realtime heart: 93

raw heart:0220408 c 448 C3 f8c 428 c 498 C3 c8c 3d 8c 16

raw heart:02283 d8c 398 c 488 C3 e8c 468 c 488 c 328 c 16

Realtime heart: 99

raw heart:0230438 c 408 c 378 C3 a8c 318 c 458 c 388c 16

实时标题: 102

raw heart:02404 f8c 408 c 458 c 428 C4 d8c 558 C4 d8c 16

raw heart:02483 e 8c3 b 8c3 f8c 348 c 398 c 318 c 428 c 16

Realtime heart: 98

raw heart:02504 c8c 428 C5 E8 C4 f8c 588 c 498 c 558 c 16

raw heart:0258478 c 458 C3 c8c 4e 8c3 f8c 468 C4 d8c 16

实时标题: 100

raw heart:0260518 C4 D8 C4 f8c 4b8 C4 f8c 528 c 458 c 16

raw heart:0268408 C3 f8c 538 C4 d8c 408 c 548 c 598 c 16

实时标题: 102

raw heart:0278418 c 508 C4 e8c 548 c 588 c 468 c 498 c 16

raw heart:0280368 c 328 c2e 8c3 c8c 338 c 308 C3 f8c 16

实时标题: 101

可见,重复368 c 328 c-2e8c 338 c 338 c-308 c 3f8c,包长度为16字节。 因此,如果用2字节无符号的短数据进行解压缩,就可以获得7个心脏传感器的原始测量结果。 也可以看到第二个字节只是一个迭代。 我想那只是测量间的时间差。 (指响应的时间差。 ) )

raw gyro:01de 49 ffd9ff 3c 004 cffd 8f F3 b 004 dffd CFF 4400

raw gyro:01df4cffd6ff 44004 dffd8ff 40004 cffd1ff 4700

raw gyro:02e 1103231323 d 3274328 e 329632 a f32 c 732 cf 32

raw gyro:01e 34 fffd7ff 56004 BFF c7f f 590049 ffccff 4c 00

raw gyro:01e 443 ffccff 43004 effcdff 40005 bffd 4ff 4c 00

raw gyro:01e 558 ffc9ff5f 005 eff bfff 66005 fffb 0f 5900

raw gyro:01e 64 cffacff 60005 cffa7ff 410066 ffc9ff 4600

raw gyro:01e 760 ffdc ff 4b 0051 FFE 4ff 4f 0034 ff deff 5300

raw gyro:02e 903365 c 368136636103654368374139 fe3a

raw gyro:01e B4 BFF C3 ff 50004 fff C1 ff 430047 ffbb ff 4100

raw gyro:01e C3 eff B2 ff 3c 0050 ffbfff 560047 ffccff 7300

raw gyro:01ed4fff E0 ff 78005 CFF ebf F8 e 0056 fff6ff 8300

raw gyro:01ee7efffbffa 1008 BFF 0f 00 BC 00 B1 ff 1900 b 800

raw gyro:01e F9 BFF 0c 00 d 10095 fff 3ff d600 b7ff 0800 df00

raw gyro:02f 12445314600479 e 473348 aa 481 c 499749244 a

raw gyro:01 F3 C3 ff 1600 Fe 00 beff 1800 f 200 a6 ff 0800 e 700

raw gyro:01f4a9fff 8f FD 300 a7fff3ffd 700 a9 fff1ffdf 00

raw gyro:01f5b1fff8ff e800 B4 fff1fff 700 acfffcffef 00

raw gyro:01f 67 ffff7ffc 0006 bfff4FFB 00078 FFE9FFB 600

raw gyro:01f 786 FFE cffc 0006 ffff 0f FBC 0060 fff1ffc 000

raw gyro:02f9ca4cbb 4c 784 c 964 ca 84c 784 c 854 c 444 C1 b4c

raw gyro:01fb7CFF 0f 00 bb 007 eff 2700 AE 0083 ff 30009800

raw gyro:01fc 79 ff 1800 b 00076 ff 0f 00 BC 0068 ff 0900 d 900

raw gyro:01fd 78ff 07000 c01 F6 fff BFF 19011 c 000 b 00 f 600

raw gyro:01fe 4b 001100 d 30054000700 c 3004300 eff feb 00

raw gyro:01 ff1f 00 d 0f 1701 fbffe 8f f1 b01 E3 fffff 1101

raw gyro:0201214 b 014 be C4 ad 04 ABA 4a CB 4a be 4a ba 4a BD 4a

raw gyro:0103 effec fffc 00 E3 fff3fff 300 deff F3 fffc 00

raw gyro:0104 E3 fff 0f ff 400 E6 FFE fff 0301 dbffe9ff0c 01

raw gyro:0105 E3 fff 0f 0301 E6 FFE6fffc 00 dcffecffc 00

raw gyro:0106 dffff 0f ff 700 dbffeefff 600 D6 fff 0f ff 400

raw gyro:0107 dffecffff 00 E1 fff 0f 0301 deff F3 fffc 00

关于陀螺仪,有点难。 但是,我的想法应该和心脏数据一样进行打包,在这种情况下,对应该签名的每个陀螺轴进行三次测量,数据包长度为20字节。 因此,12 x、y和z测量并不涵盖所有数据包,但3保留前两个字节(与前一个数据包相同)。 所以我就这样试着做了。 否则工作正常。

代码,你可以找到我的github仓库( creotiv/MiBand2)下载案例的代码。 这很简单。 老司机请自己搜索。 这里不多做说明。

和平精英体验服官网「V3.02」IOS版

和平精英体验服官网「V3.02」IOS版

  • 分类:资讯阅读
  • 大小:17MB
  • 语言:简体中文
  • 版本:V3.02