Bluetooth Low Energy: nasłuchiwanie powiadomień / wskazań w Linuksie

Próbuję komunikować się z modułem BLE przez maszynę Linuksową (moduł uruchamia profil tętna). Do tej pory udało mi się zrobić wszystko, czego potrzebuję, z wyjątkiem słuchania powiadomień i wskazań (np. słuchania powiadomienia o pomiarze tętna). Używam kernela w wersji 3.5 i bluez-5.3.

Użyte do tej pory polecenia:

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

Nieudane polecenia:

gatttool -b <MAC Address> --listen
Każda pomoc jest bardzo mile widziana.
Author: yousif saeed, 2013-03-27

4 answers

Spróbuj tego...

Uciekaj gatttool -b <MAC Address> --interactive tak jak wcześniej. Otrzymasz znak zachęty, a następnie wpisujesz connect. Powinieneś zobaczyć znak CON w monicie informującym o połączeniu z urządzeniem. Następnie wpisz char-read-uuid 2902. Powinieneś otrzymać listę wszystkich atrybutów CCC (Client Characteristic Configuration) na urządzeniu. możesz spróbować ustawić je wszystkie na 0100, aby otrzymywać powiadomienia, 0200 dla wskazań, 0300 dla obu lub 0000 dla wszystkiego wyłączonego. wpisz help aby zobaczyć wszystkie komendy i ich argumenty.

EDIT:

Użycie argumentu --listen wymaga połączenia go z innymi poleceniami, aby włączyć powiadomienia i / lub wskazania. Oto przykład, który działa w Bluez 4.101: {]}

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

Oczywiście musisz zmienić uchwyt na uchwyt CCC, dla którego chcesz włączyć powiadomienia. Jednak nadal uważam, że łatwiej jest po prostu korzystać z trybu interaktywnego.

 43
Author: Tim Tisdall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-16 13:44:49

Wygląda na to, że starsza wersja Bluez (hcitool & gatttool) nie pozwala na pisanie do urządzeń Bluetooth Low Energy. Skończyło się na zainstalowaniu nowszej wersji (5.17 w momencie pisania tego tekstu) w celu włączenia powiadomień itp.

Aby uzyskać listę wszystkich uchwytów, możesz uruchomić następujące:

char-desc

Możesz następnie odczytać z uchwytu:

char-read-hnd 0x000e

(powyższy uchwyt jest dla mojego poziomu baterii nRF51822)

Gdzie uchwyt jest jeden z listy masz z char-desc.

Tak jak Tim powiedział powyżej, możesz napisać do powiadomień związanych uchwyt, aby uzyskać wskazania lub powiadomienia. (w moim przypadku Moje urządzenie miało tylko powiadomienia)

char-write-req 0x000f 0100

(powyższy uchwyt służy do mojego powiadomienia o poziomie baterii nRF51822)

W moim przypadku powiadomienie o baterii nie powinno niczego wysyłać, dopóki poziom baterii się nie zmieni.

[4]}napisałem dość długi wpis na blogu na temat konfiguracji z Bluez. Możesz go znaleźć tutaj: zacznij korzystać z Bluetooth Low Energy zapraszam do sprawdzenia!
 10
Author: jaredwolff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-15 00:01:35

Ostateczna odpowiedź do odczytu tętna na 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
 5
Author: Fred.Taiwan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-16 14:42:22

Aby zachować wartość CCC, musisz sparować oba urządzenia. po sparowaniu nie musisz ponownie ustawiać CCC. przy następnym ponownym podłączeniu znajdzie ustawienie, które zostanie zapisane w flashu breloka. spróbuj skonfigurować po sparowaniu przez SMP.

 2
Author: RobinSingh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-01 06:20:36