Подтвердить что ты не робот

Bluetooth Low Energy: прослушивание уведомлений/указаний в Linux

Я пытаюсь связаться с модулем BLE через Linux-машину (модуль работает с профилем частоты сердечных сокращений). До сих пор я мог делать все, что мне нужно, кроме прослушивания уведомлений и показаний (например, прослушивания уведомления об измерении частоты сердечных сокращений). Я использую ядро ​​версии 3.5 и bluez-5.3.

Используемые до сих пор команды succcessful:

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

Любая помощь очень ценится.

4b9b3361

Ответ 1

Попробуйте это...

Запустите gatttool -b <MAC Address> --interactive, как и раньше. Вы получите приглашение, а затем введите connect. Вы должны увидеть CON в подсказке, указывающую, что вы подключились к устройству. Затем введите char-read-uuid 2902. Вы должны получить список всех атрибутов CCC (Client Characteristic Configuration) на устройстве. Вы можете попробовать установить их все на 0100, чтобы получать уведомления, 0200 для показа, 0300 для обоих, или 0000 для выключения. Введите help, чтобы увидеть все команды и их аргументы.

EDIT:

Использование аргумента --listen требует, чтобы вы связали его с другими командами, чтобы включить уведомления и/или указания. Итак, вот пример, который работает в Bluez 4.101:

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

Очевидно, вам нужно изменить дескриптор на дескриптор CCC, для которого вы хотите включить уведомления. Тем не менее, мне все еще легче просто использовать интерактивный режим.

Ответ 2

Похоже, что более старая версия Bluez (hcitool и gatttool) не позволяет вам записывать устройства Bluetooth Low Energy. Я закончил установку более новой версии (5.17 на момент написания этой статьи), чтобы включить уведомления и т.д.

Чтобы получить список всех ваших ручек, вы можете запустить следующее:

char-desc

Затем вы можете читать с дескриптора:

char-read-hnd 0x000e

(вышеуказанный дескриптор для моего уровня заряда батареи nrf51822)

Если дескриптор один из списка, который вы получили от char-desc.

Как и Тим сказал выше, вы можете написать обработчик, связанный с уведомлением, для получения указаний или уведомлений. (в моем случае у моего устройства были только уведомления)

char-write-req 0x000f 0100

(вышеуказанный дескриптор предназначен для уведомления об уровне заряда батареи nrf51822)

В моем случае уведомление о батарее не должно посылать ничего, пока уровень заряда батареи не изменится.

Я написал довольно длинное сообщение в блоге о настройке с Bluez. Вы можете найти его здесь: Начните с низкой энергии Bluetooth Не стесняйтесь проверить это!

Ответ 3

Окончательный ответ для чтения сердечного ритма на 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

Ответ 4

чтобы сохранить значение CCC, необходимое для соединения двух устройств. как только они спарены, вам не нужно снова устанавливать CCC. при следующем повторном подключении он найдет настройку, которая будет сохранена в флэш-памяти фонов. попробуйте настроить после спаривания через SMP.