43

我正在尝试通过 Linux 机器与 BLE 模块通信(该模块正在运行心率配置文件)。到目前为止,除了收听通知和指示(例如收听心率测量通知)之外,我已经能够做所有我需要的事情。我正在使用内核版本 3.5 和 bluez-5.3。

到目前为止使用的成功命令:

hcitool lescan
hcitool lecc
gatttool -b <Mac Address> --primary
gatttool -b <MAC Address> --characteristics
gatttool -b <MAC Address> --char-read
gatttool -b <MAC Address> --char-desc
gatttool -b <MAC Address> --interactive

失败的命令:

gatttool -b <MAC Address> --listen

任何帮助是极大的赞赏。

4

4 回答 4

50

尝试这个...

gatttool -b <MAC Address> --interactive像以前一样奔跑。你会得到一个提示,然后你输入connect. 您应该CON会在提示中看到一个,表明您已连接到设备。然后键入char-read-uuid 2902。您应该获得设备上所有 CCC(客户端特征配置)属性的列表。 您可以尝试将它们全部设置为 0100 以获取通知,0200 用于指示,0300 用于两者,或 0000 用于所有关闭。 键入help以查看所有命令及其参数。

编辑:

--listen参数的使用要求您将其与其他命令结合使用以打开通知和/或指示。所以这是一个适用于 Bluez 4.101 的示例:

gatttool -b <MAC Address> --char-write-req --handle=0x0031 --value=0100 --listen

显然,您需要将句柄更改为要为其打开通知的 CCC 的句柄。但是,我仍然发现只使用交互模式更容易。

于 2013-03-30T19:49:58.333 回答
11

看起来旧版本的 Bluez(hcitool 和 gatttool)不允许您写入低功耗蓝牙设备。我最终安装了一个较新的版本(撰写本文时为 5.17)以启用通知等。

要获取所有句柄的列表,您可以运行以下命令:

char-desc

然后您可以从句柄中读取:

char-read-hnd 0x000e

(上面的手柄是我的nrf51822电池电量)

句柄是您从中获得的列表中的一个char-desc.

就像上面 Tim 说的,你可以写通知相关的句柄来获取指示或通知。(在我的情况下,我的设备只有通知)

char-write-req 0x000f 0100

(上面的句柄是我的nrf51822电池电量通知)

在我的情况下,电池通知不应该发送任何东西,直到电池电量发生变化。

我写了一篇很长的博客文章,介绍如何使用 Bluez 进行设置。您可以在此处找到它:开始使用低功耗蓝牙随时查看!

于 2014-04-15T00:01:35.697 回答
6

在 Mio Alpha 上读取心率的最终答案:

gatttool -b xx:xx:xx:xx:xx:xx -t random --char-write-req -a 0x0025 -n 0100 --listen

Characteristic value was written successfully
Notification handle = 0x0024 value: 10 4b 33 03 
Notification handle = 0x0024 value: 10 4b 33 03 
Notification handle = 0x0024 value: 10 4b 33 03 
Notification handle = 0x0024 value: 10 4a 3e 03 
Notification handle = 0x0024 value: 10 4c 28 03 28 03 
Notification handle = 0x0024 value: 10 4c 28 03 
Notification handle = 0x0024 value: 10 4b 33 03 
Notification handle = 0x0024 value: 10 4a 3e 03 3e 03
于 2014-01-16T14:42:22.117 回答
2

要保留 CCC 值,您需要将两个设备配对。配对后,您无需再次设置 CCC。下次重新连接时,它会找到设置,该设置将保存在密钥卡的c FLASH中。通过 SMP 配对后尝试配置。

于 2013-06-01T06:20:36.947 回答