Bluetooth Low Energy: прослушивание уведомлений / показаний в linux
Я пытаюсь связаться с модулем BLE через компьютер с Linux (модуль работает с профилем сердечного ритма). До сих пор я мог делать все, что мне нужно, кроме прослушивания уведомлений и показаний (например, прослушивание уведомлений об измерении сердечного ритма). Я использую ядро версии 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
Любая помощь с благодарностью.
5 ответов
Попробуй это...
Бежать gatttool -b <MAC Address> --interactive
как ты делал раньше Вы получите приглашение, а затем введите connect
, Вы должны увидеть CON
в подсказке, указывающей, что вы подключились к устройству. Затем введите char-read-uuid 2902
, Вы должны получить список всех атрибутов CCC (Client Characteristic Configuration) на устройстве. Вы можете попробовать установить их все на 0100, чтобы получать уведомления, 0200 для показаний, 0300 для обоих или 0000 для всего выключенного. Тип help
чтобы увидеть все команды и их аргументы.
РЕДАКТИРОВАТЬ:
Использование --listen
Аргумент требует, чтобы вы связали его с другими командами для включения уведомлений и / или указаний. Итак, вот пример, который работает в Bluez 4.101:
gatttool -b <MAC Address> --char-write-req --handle=0x0031 --value=0100 --listen
Очевидно, вам нужно изменить дескриптор на дескриптор CCC, для которого вы хотите включить уведомления. Тем не менее, мне все еще проще использовать интерактивный режим.
Похоже, что старая версия Bluez (hcitool & gatttool) не позволяет записывать на устройства с низким энергопотреблением Bluetooth. В итоге я установил более новую версию (5.17 на момент написания этой статьи), чтобы включить уведомления и т. Д.
Чтобы получить список всех ваших дескрипторов, вы можете запустить следующее:
char-desc
Затем вы можете прочитать из ручки:
char-read-hnd 0x000e
(вышеупомянутая ручка для моего уровня заряда батареи nrf51822)
Где дескриптор один из списка, из которого вы получили char-desc.
Как и сказал Тим выше, вы можете написать в дескриптор, связанный с уведомлением, чтобы получить указания или уведомления. (в моем случае на моем устройстве были только уведомления)
char-write-req 0x000f 0100
(описанная выше ручка предназначена для моего уведомления об уровне заряда батареи nrf51822)
В моем случае уведомление батареи не должно отправлять ничего, пока уровень батареи не изменился.
Я написал довольно длинный пост в блоге о настройке Bluez. Вы можете найти его здесь: Начните с Bluetooth Low Energy Не стесняйтесь проверить это!
Окончательный ответ для чтения ЧСС на 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. при следующем переподключении он найдет настройку, которая будет сохранена во флэш-памяти брелка. попробуй настроить после сопряжения через SMP.
gatttool -b B8:F0:09:CC:63:A6 --listen --handle 0x52 --char-write-req --value 0x1
это работает, даже уведомление скрыто!