【发布时间】:2016-03-20 04:20:15
【问题描述】:
我想做的事:
我想将我的 Raspberry Pi 2 连接到蓝牙智能体重秤 (Medisana BS440) 并接收我的数据。
我所知道的:
只有一个有趣的主服务具有 5 个特征:
- handle: 0x001a
- properties: 0x20 (Indication), char value handle: 0x1b uuid:00008a21-0000-1000-8000-00805f9b34fb
- handle: 0x001d
- properties: 0x20 (Indication), char value handle: 0x1e uuid:00008a22-0000-1000-8000-00805f9b34fb
- handle: 0x0020
- properties: 0x02 (Read-Only), char value handle: 0x21 uuid:00008a20-00..
- handle: 0x0022
- properties: 0x08 (Write-Only), char value handle: 0x23 uuid:00008a81-00..
- handle: 0x0024
- properties: 0x20 (Indication), char value handle: 0x25 uuid:00008a82-00..
我使用我的 Android 手机的 HCI-Snoop-Developer-Funktion 来查看相应的应用程序如何与我的体重秤通信。
- 写入 0200 -> 0x1f(启用指示 0x1d)
- 读取 0x21 -> 0x21(值:37fb)
- 写入 0200 -> 0x1c(启用指示 0x1a)
- 写入 0200 -> 0x26(启用指示 0x24)
- write 02a31e2c0b -> 0x23(我在这里不完全理解,但我知道你是否取 02 之后的字节(a3 1e 2c 0b -> 0b 2c 1e a3 -> 这是当前的 Unix 时间戳,但对于年份?1975?)
在第 4 步之后。有第一个指示(句柄 0x25)给我存储的我的个人数据(我的身高、性别、年龄等)
在第 5 步之后。有一些指示(句柄 0x1b 和句柄 0x1e)应该传输我的测量数据。 (此时不分析十六进制值)
我做了什么:
我在我的 raspi (kernel 4.1.13) 上安装了 bluez.5.32,并使用 gatttool 执行了步骤 1 - 5,并且在步骤 5 之前一切正常。我不't get any Indication-messages from handle 0x1b and 0x1e) 在第 5 步之后没有任何反应。
gatttool -t random -b DE:70:4A:XX:XX:XX -I
char-write-cmd 0x1f 0200
char-read-hnd 0x21 (37fb)
char-write-cmd 0x1c 0200
char-write-cmd 0x26 0200
char-write-cmd 0x23 0000000000
(我什至用 unix-timestamp-for 1975 来做这件事.. 没有成功)
数十亿小时后,我在我的 raspi 上运行 bluetoothctl(存在 dbus 问题),我尝试使用 bluetoothctl。我启用了所有指示并将 0000000000 写入 hnd=0x23。切换到处理 0x1a 并且它起作用了!我收到许多应该是我正在搜索的数据的十六进制值。
那么问题出在哪里? 我想将 gatttool 用于我的目的,或者至少我想了解,为什么它不能用 gatttool 解决
当我使用bluetoothctl时,我只能选择并观看一个属性,并且在收到数据后,我的体重秤会自动断开与我的树莓派的连接。因此,当我选择特征 0x1a 时,我看不到特征 0x01d 的指示消息,反之亦然。
当我使用 gatttool 或使用 bluetoothctl 时,我的 Pi 和我的 Scale 之间是否存在其他连接?或者它们与我的体重秤沟通的方式有什么不同?
【问题讨论】:
标签: bluetooth bluetooth-lowenergy bluez