蓝牙低功耗:在Linux中侦听通知/指示

我试图通过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 

任何帮助是极大的赞赏。

尝试这个…

运行gatttool -b <MAC Address> --interactive像以前一样进行gatttool -b <MAC Address> --interactive 。 你会得到一个提示,然后你键入connect 。 您应该在提示中看到CON ,表示您已连接到设备。 然后inputchar-read-uuid 2902 。 您应该获得设备上所有CCC(客户端特性configuration)属性的列表。 您可以尝试将它们全部设置为0100以获取通知,0200以获取通知,两者皆为0300,或者closures所有设置。 inputhelp可查看所有命令及其参数。

编辑:

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

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

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

看起来像老版本的蓝牙(hcitool&gatttool)不允许你写蓝牙低功耗设备。 为了启用通知等,我最终安装了一个更新的版本(截至撰写本文时为5.17)。

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

 char-desc 

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

 char-read-hnd 0x000e 

(以上的手柄是针对我的nrf51822电池的)

那里的句柄是从char-desc.

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

 char-write-req 0x000f 0100 

(以上处理是为了我的nrf51822电池电量通知)

在我的情况下,电池通知不应该发送任何东西,直到电池水平已经改变。

我写了一篇很长的关于使用Bluez进行安装的博客文章。 你可以在这里find它: 蓝牙低功耗入门随时检查出来!

阅读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 

要保留CCC值,您需要将两个设备配对。 一旦他们配对,你不需要再次设置CCC。 在下一次重新连接时会find该设置,该设置将保存在密钥卡的闪存中。 尝试通过SMP配对后进行configuration。