蓝牙低能耗:在linux中侦听通知/指示

蓝牙低能耗:在linux中侦听通知/指示,linux,bluetooth,bluetooth-lowenergy,bluez,gatt,Linux,Bluetooth,Bluetooth Lowenergy,Bluez,Gatt,我正在尝试通过Linux机器与BLE模块通信(该模块正在运行心率配置文件)。到目前为止,除了收听通知和指示(例如,收听心率测量通知),我已经能够做我需要的一切。我使用的是内核版本3.5和bluez-5.3 迄今为止使用的成功命令: hcitool lescan hcitool lecc gatttool -b <Mac Address> --primary gatttool -b <MAC Address> --characteristics gatttool -b &l

我正在尝试通过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
hcitool-lescan
hcitool-lecc
gatttool-b——初级
gatttool-b——特性
gatttool-b——字符读取
gatttool-b——字符描述
gatttool-b——交互式
失败的命令:

gatttool -b <MAC Address> --listen
gatttool-b——听
非常感谢您的帮助。

试试这个

像以前一样运行
gatttool-b--interactive
。您将得到提示,然后键入
connect
。您应该会在提示中看到一个
CON
,指示您已连接到设备。然后键入
字符读取uuid 2902
。您应该获得设备上所有CCC(客户端特征配置)属性的列表。键入
help
查看所有命令及其参数

编辑: 使用
--listen
参数需要将其与其他命令耦合以打开通知和/或指示。下面是一个适用于Bluez 4.101的示例:

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

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

要保留CCC值,需要将两个设备配对。配对后,无需再次设置CCC。下次重新连接时,它将找到设置,该设置将保存在遥控钥匙的C闪烁中。通过SMP配对后尝试配置。

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

看起来旧版本的Bluez(hcitool&gatttool)不允许您向蓝牙低能耗设备写入数据。我最后安装了一个更新的版本(截至本文撰写时为5.17),以便启用通知等

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

char-desc
然后可以从句柄读取:

char-read-hnd 0x000e
(以上手柄适用于我的nrf51822电池电量)

其中句柄是从
char-desc.

正如Tim上面所说,您可以写入与通知相关的句柄以获取指示或通知。(在我的情况下,我的设备只有通知)

(以上手柄用于我的nrf51822电池电量通知)

在我的情况下,在电池电量改变之前,电池通知不应该发送任何内容


我写了一篇很长的关于如何使用Bluez进行设置的博客文章。你可以在这里找到:请随意查看

您是否设置了CCC值以获取通知/指示?我找不到任何关于CCC值的信息。我唯一能控制的是psm和mtu。那么如何设置CCC值呢?顺便说一句,标准规定连接之间应保留CCC值,但我使用了一些蓝牙加密狗,最终在连接之间重置了所有内容。是的,目前我在连接之间重置了所有内容。但是,这对我来说不是问题,因为我总是可以重置值以获得通知。谢谢。@TimTisdall,谢谢。我正在尝试类似的近距离离岸价。我已经能够编写CCC并阅读它进行确认,但我仍然没有看到使用gatttool-b-t random-I-listen的通知。你还有其他建议吗?还是我误解了它应该如何工作?@AgDude有些设备需要你设置一些变量才能让通知工作。例如,您可能需要打开CCC中的通知,然后打开要“侦听”的特定传感器。我不知道你的是如何工作的,但也许你必须设置接近报警级别?@AgDude,对我来说,我必须设置CCC值,同时收听。我使用的确切命令是gatttool-b--char write req--handle=0xXXXX--value=XXXX--listenh您到底是如何做到这一点的?@Tim Tisdall似乎可以通过提高连接的安全级别来实现。我尝试了以下行:#gattool-l high-b00:11:22:33:44:55--主,弹出一个通知窗口,要求我接受配对请求。旧版本可以很好地写入BLE设备。然而,它的格式有点挑剔/有问题。有时它只接受“0x01”,但有时它只接受“01”。
char-write-req 0x000f 0100