蓝牙低功耗:在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。