Spisu treści:
- Krok 1: Skanuj urządzenie BLE
- Krok 2: Podłączanie urządzenia
- Krok 3: Pobieranie charakterystyk urządzenia
- Krok 4: Odczytywanie nazwy urządzenia
- Krok 5: Odczytywanie BPM
- Krok 6: Odczytanie lokalizacji czujnika ciała
Wideo: Odczytywanie wartości z urządzenia BLE za pomocą CSR1010 i Dragonboard 410c: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Ten samouczek pokazuje, jak odczytać wartości z urządzenia BLE CSR1010 przy użyciu Dragonboard 410c z Linaro
W tym przykładzie CSR1010 emuluje czujnik tętna.
Krok 1: Skanuj urządzenie BLE
W tym kroku sprawdź, czy Twój klient BT jest gotowy do skanowania urządzeń BLE.
root@linaro-alip:/home/linaro# sudo hcitool lescan
LE Scan …18:EE:69:00:CE:00 (nieznane) 18:EE:69:00:CE:00 (nieznane) EE:52:5B:04:00:02 Czujnik HR CSR
Krok 2: Podłączanie urządzenia
Do podłączenia naszego urządzenia użyjemy gatttool
-b: Adres MAC urządzenia
-t: typ adresu LE. Może być publiczny lub losowy, należy sprawdzić specyfikację urządzenia. W tym przypadku jest publiczne.
-I: tryb interaktywny Gatttool. Otworzy się monit o wysłanie cmds do urządzenia
root@linaro-alip:/home/linaro# sudo gatttool -b EE:52:5B:04:00:02 -t public -I
Po otwarciu monitu możemy wysłać polecenie connect do urządzenia.
[EE:52:5B:04:00:02][LE]> połączPróba połączenia z EE:52:5B:04:00:02
Połączenie powiodło się
[EE:52:5B:04:00:02][LE]>
Krok 3: Pobieranie charakterystyk urządzenia
Po podłączeniu urządzenia możemy odczytać wszystkie dostępne usługi, wysyłając cmd „primary”
Na podstawie UUID usługi możemy odkryć typ usługi w specyfikacji GATT
www.bluetooth.com/specyfikacje/gatt/services
Krok 4: Odczytywanie nazwy urządzenia
Przyjrzyjmy się cechom opisanym w Ogólnym profilu dostępu (uuid=1800). Najpierw musimy uzyskać wartości uchwytów usługi, opisane na pierwszym obrazku, w tym przypadku zaczyna się od 5 do 11. Teraz możemy pobrać wszystkie uchwyty w tym przedziale za pomocą polecenia cmd char-desc
[EE:52:5B:04:00:02][LE]> znak-desc 05 11handle: 0x0005, uuid: 00002800-0000-1000-8000-00805f9b34fb uchwyt: 0x0006, uuid: 00002803-0000-1000-8000- 00805f9b34fb uchwyt: 0x0007, uuid: 00002a00-0000-1000-8000-00805f9b34fb uchwyt: 0x0008, uuid: 00002803-0000-1000-8000-00805f9b34fb uchwyt: 0x0009, uuid: 00002a01-0000-1000-8000-00805, uchwytf9b34fb uuid: 00002803-0000-1000-8000-00805f9b34fb uchwyt: 0x000b, uuid: 00002a04-0000-1000-8000-00805f9b34fb uchwyt: 0x000c, uuid: 00002800-0000-1000-8000-00805f9b34fb uchwyt: 0x000d, uuid: 00002803-0000 -1000-8000-00805f9b34fb uchwyt: 0x000e, uuid: 00002a37-0000-1000-8000-00805f9b34fb uchwyt: 0x000f, uuid: 00002902-0000-1000-8000-00805f9b34fb uchwyt: 0x0010, uuid: 00002803-0000-1000-8000- 00805f9b34fb uchwyt: 0x0011, uuid: 00002a38-0000-1000-8000-00805f9b34fb
Zgodnie ze specyfikacją Generic Access Profile, UUID 2A00 odnosi się do nazwy urządzenia.
Biorąc pod uwagę, że 2a00 to uchwyt 0x0007 w naszym urządzeniu, odczytajmy wartość
[EE:52:5B:04:00:02][LE]> znak-odczyt-hnd 7Wartość/deskryptor cechy: 43 53 52 20 48 52 20 53 65 6e 73 6f 72
Konwertując szesnastkę na ASCII, nazwa urządzenia to: „CSR HR Sensor”
Krok 5: Odczytywanie BPM
[EE:52:5B:04:00:02][LE]> uchwyt atrybutu pierwotnego: 0x0001, uchwyt końcowy grp: 0x0004 uuid: 00001801-0000-1000-8000-00805f9b34fb uchwyt atrybutu: 0x0005, uchwyt końcowy grp: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb attr handle: 0x000c, end grp handle: 0x0013 uuid: 0000180d-0000-1000-8000-00805f9b34fb attr handle: 0x0014 end grp handle: 0x0017 uuid: 0000180f-0000-1000-8000- 00805f9b34fb attr handle: 0x0018, end grp handle: 0x0021 uuid: 00001016-d102-11e1-9b23-00025b00a5a5 attr handle: 0x0022, end grp handle: 0xffff uuid: 0000180a-0000-1000-8000-00805f9b34fb
UUID usługi Tętno to 0x180d, więc interwał obsługi wynosi od 0x000c do 0x0013
[EE:52:5B:04:00:02][LE]> znak-opis 0x00c 0x0013
uchwyt: 0x000c, uuid: 00002800-0000-1000-8000-00805f9b34fb uchwyt: 0x000d, uuid: 00002803-0000-1000-8000-00805f9b34fb uchwyt: 0x000e, uuid: 00002a37-0000-1000-8000-00805f9b34fb uchwyt: 0x000f, uu: 00002902-0000-1000-8000-00805f9b34fb uchwyt: 0x0010, uuid: 00002803-0000-1000-8000-00805f9b34fb uchwyt: 0x0011, uuid: 00002a38-0000-1000-8000-00805f9b34fb uchwyt: 0x0012, uuid: 00002803-0000- 1000-8000-00805f9b34fb uchwyt: 0x0013, uuid: 00002a39-0000-1000-8000-00805f9b34fb
Odczytywanie wszystkich deklaracji charakterystycznych (UUID 0x2803).
[EE:52:5B:04:00:02][LE]> odczyt-hnd znaków 0x000d
Wartość/deskryptor cechy: 10 0e 00 37 2a [EE:52:5B:04:00:02][LE]> char-read-hnd 0x0010 Wartość/deskryptor cechy: 02 11 00 38 2a [EE:52:5B: 04:00:02][LE]> znak-odczyt-hnd 0x0012 Wartość charakterystyczna/deskryptor: 08 13 00 39 2a
Zauważ, że:
- uchwyt 0x000d to CCCD dla usługi 2a37 (Pomiar tętna) z bitem 10 (obsługa NOTIFY)
- uchwyt 0x0010 to CCCD dla usługi 2a38 (Body Sensor Location) z bitem 02 (obsługa READ)
- uchwyt 0x0012 to CCCD dla usługi 2a39 (Heart Rate Control Point) z bitem 08 (wsparcie WRITE)
Teraz wiemy, że pomiar tętna działa tylko z powiadomieniem. Oznacza to, że najpierw musimy zarejestrować zmiany wartości w jego CCCD (UUID 0x2902), co w tym przypadku jest handlem 0xf
[EE:52:5B:04:00:02][LE]> żądane-zapisu-znaków 0x00f 0100
Uchwyt powiadomienia = wartość 0x000e: 16 65 f3 01 Wartość charakterystyczna została zapisana pomyślnie Uchwyt powiadomienia = wartość 0x000e: 16 6d fa 01 Uchwyt powiadomienia = wartość 0x000e: 16 6d fa 01 Uchwyt powiadomienia = wartość 0x000e: 16 6c f9 01 Uchwyt powiadomienia = wartość 0x000e: 16 6a f7 01 Uchwyt powiadomienia = 0x000e wartość: 16 69 f6 01
Zgodnie ze specyfikacją profilu, druga liczba szesnastkowa to informacja BPM.
BPM:
6d = 109
6d = 109
6c = 108
6a = 106
69 = 105
Krok 6: Odczytanie lokalizacji czujnika ciała
Lokalizacja czujnika ciała to UUID 0x2A38. Zgodnie z jej deskryptorem ta cecha wspiera podstawowe czytanie, dzięki czemu możemy bezpośrednio odczytać jej wartość.
[EE:52:5B:04:00:02][LE]> znak-odczyt-hnd 0x11Wartość/deskryptor cechy: 03
Zgodnie ze specyfikacją SIG, 03 oznacza „palec”
Zalecana:
Odczytywanie i wykresy danych z czujnika światła i temperatury za pomocą Raspberry Pi: 5 kroków
Odczytywanie i tworzenie wykresów danych z czujnika światła i temperatury za pomocą Raspberry Pi: W tej instrukcji dowiesz się, jak odczytywać czujnik światła i temperatury z raspberry pi i konwerterem analogowo-cyfrowym ADS1115 oraz tworzyć wykresy za pomocą matplotlib. Zacznijmy od potrzebnych materiałów
Zaprogramuj Arduino za pomocą urządzenia z Androidem przez Bluetooth: 6 kroków (ze zdjęciami)
Zaprogramuj Arduino za pomocą urządzenia z Androidem przez Bluetooth: Witaj świecie, w tej instrukcji chcę pokazać, jak zaprogramować Arduino Uno za pomocą urządzenia z Androidem przez Bluetooth. To bardzo proste i takie tanie. Pozwala nam również programować nasze Arduino w dowolnym miejscu przez bezprzewodowy bluetooth … Więc
Odczytywanie wilgotności za pomocą czujnika Ethernet: 3 kroki
Odczyt wilgotności za pomocą czujnika Ethernet: Celem projektu było umożliwienie odczytu odczytów wilgotności i temperatury przez sieć Ethernet, aby wyniki mogły być wykorzystane do automatyki domowej (asystent domowy itp.). Czujnik T9602 miał najlepszy współczynnik kształtu, z doskonałym wydajność na ar
Odczytywanie danych z czujnika ultradźwiękowego (HC-SR04) na wyświetlaczu LCD 128×128 i wizualizacja za pomocą Matplotlib: 8 kroków
Odczytywanie danych czujnika ultradźwiękowego (HC-SR04) na wyświetlaczu LCD 128×128 i wizualizacja za pomocą Matplotlib: W tej instrukcji będziemy używać MSP432 LaunchPad + BoosterPack do wyświetlania danych czujnika ultradźwiękowego (HC-SR04) na 128×128 LCD i wysyłaj dane szeregowo do komputera i wizualizuj je za pomocą Matplotlib
Odczytywanie i zapisywanie danych do zewnętrznej pamięci EEPROM za pomocą Arduino: 5 kroków
Odczytywanie i zapisywanie danych do zewnętrznej pamięci EEPROM za pomocą Arduino: EEPROM to skrót od Electricly Erasable Programmable Read-Only Memory. EEPROM jest bardzo ważny i użyteczny, ponieważ jest nieulotną formą pamięci. Oznacza to, że nawet gdy płyta jest wyłączona, układ EEPROM nadal zachowuje program, który