Sommario:

Lettura dei valori da un dispositivo BLE utilizzando CSR1010 e Dragonboard 410c: 6 passaggi
Lettura dei valori da un dispositivo BLE utilizzando CSR1010 e Dragonboard 410c: 6 passaggi

Video: Lettura dei valori da un dispositivo BLE utilizzando CSR1010 e Dragonboard 410c: 6 passaggi

Video: Lettura dei valori da un dispositivo BLE utilizzando CSR1010 e Dragonboard 410c: 6 passaggi
Video: Погони и деревья | Критическая роль | Кампания 2, Эпизод 65 2024, Novembre
Anonim
Lettura dei valori da un dispositivo BLE utilizzando CSR1010 e Dragonboard 410c
Lettura dei valori da un dispositivo BLE utilizzando CSR1010 e Dragonboard 410c

Questo tutorial mostra come leggere i valori dal dispositivo BLE CSR1010 utilizzando Dragonboard 410c con Linaro

In questo esempio, CSR1010 emula un sensore di frequenza cardiaca.

Passaggio 1: scansiona il dispositivo BLE

In questo passaggio, controlla se il tuo client BT è pronto per la scansione dei dispositivi BLE.

root@linaro-alip:/home/linaro# sudo hcitool lescan

LE Scan …18:EE:69:00:CE:00 (sconosciuto) 18:EE:69:00:CE:00 (sconosciuto) EE:52:5B:04:00:02 Sensore FC CSR

Passaggio 2: collegamento del dispositivo

Useremo gatttool per connettere il nostro dispositivo

-b: indirizzo MAC del dispositivo

-t: tipo di indirizzo LE. Può essere pubblico o casuale, è necessario controllare le specifiche del dispositivo. In questo caso è pubblico.

-I: modalità interattiva di gatttool. Si aprirà un prompt per inviare cmd al dispositivo

root@linaro-alip:/home/linaro# sudo gatttool -b EE:52:5B:04:00:02 -t public -I

Una volta che il prompt è aperto, possiamo inviare connect cmd al dispositivo.

[EE:52:5B:04:00:02][LE]> connectTentativo di connessione a EE:52:5B:04:00:02

Connessione riuscita

[EE:52:5B:04:00:02][LE]>

Passaggio 3: recupero delle caratteristiche del dispositivo

Recupero delle caratteristiche del dispositivo
Recupero delle caratteristiche del dispositivo

Una volta connesso il dispositivo, possiamo leggere tutti i servizi disponibili inviando il cmd "primario"

In base all'UUID del servizio, possiamo scoprire il tipo di servizio nella specifica GATT

www.bluetooth.com/specifications/gatt/services

Passaggio 4: lettura del nome del dispositivo

Lettura del nome del dispositivo
Lettura del nome del dispositivo

Esploriamo le caratteristiche lette su Generic Access Profile (uuid=1800). Per prima cosa dobbiamo ottenere i valori degli handle di servizio, descritti nella prima immagine, in questo caso, partendo da 5 fino a 11. Ora possiamo recuperare tutti gli handle in questo intervallo usando il cmd char-desc

[EE:52:5B:04:00:02][LE]> char-desc 05 11handle: 0x0005, uuid: 00002800-0000-1000-8000-00805f9b34fb handle: 0x0006, uuid: 00002803-0000-1000-8000- 00805f9b34fb handle: 0x0007, uuid: 00002a00-0000-1000-8000-00805f9b34fb handle: 0x0008, uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x0009, uuid: 00002a01-0000-1000-8000-00805b handle: 0xb34f uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x000b, uuid: 00002a04-0000-1000-8000-00805f9b34fb handle: 0x000c, uuid: 00002800-0000-1000-8000-00805f9b34fb handle: 0x000d, uuid: 00002803-0000 -1000-8000-00805f9b34fb handle: 0x000e, uuid: 00002a37-0000-1000-8000-00805f9b34fb handle: 0x000f, uuid: 00002902-0000-1000-8000-00805f9b34fb handle: 0x0010, uuid: 00002803-0000-1000-8000- 00805f9b34fb handle: 0x0011, uuid: 00002a38-0000-1000-8000-00805f9b34fb

Secondo la specifica del profilo di accesso generico, l'UUID 2A00 si riferisce al nome del dispositivo.

Considerando che il 2a00 è l'handle 0x0007 nel nostro dispositivo, leggiamo il valore

[EE:52:5B:04:00:02][LE]> char-read-hnd 7Valore caratteristico/descrittore: 43 53 52 20 48 52 20 53 65 6e 73 6f 72

Convertendo esadecimale in ASCII, il nome del dispositivo è: ''CSR HR Sensor"

Passaggio 5: lettura del BPM

[EE:52:5B:04:00:02][LE]> handle primaryattr: 0x0001, handle di fine grp: 0x0004 uuid: 00001801-0000-1000-8000-00805f9b34fb handle di attr: 0x0005, handle di fine grp: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb handle attr: 0x000c, end grp handle: 0x0013 uuid: 0000180d-0000-1000-8000-00805f9b34fb attr handle: 0x0014, end grp handle: 0x0017 uuid: 0000180f-0000-1000-8000- 00805f9b34fb handle attr: 0x0018, end grp handle: 0x0021 uuid: 00001016-d102-11e1-9b23-00025b00a5a5 attr handle: 0x0022, end grp handle: 0xffff uuid: 0000180a-0000-1000-8000-00805f9b34fb

L'UUID del servizio Frequenza cardiaca è 0x180d, quindi l'intervallo di gestione va da 0x000c a 0x0013

[EE:52:5B:04:00:02][LE]> char-desc 0x00c 0x0013

handle: 0x000c, uuid: 00002800-0000-1000-8000-00805f9b34fb handle: 0x000d, uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x000e, uuid: 00002a37-0000-1000-8000-00805f9b34fb handle: 0x000f, u: 00002902-0000-1000-8000-00805f9b34fb handle: 0x0010, uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x0011, uuid: 00002a38-0000-1000-8000-00805f9b34fb handle: 0x0012, uuid: 00002803-0000- 1000-8000-00805f9b34fb handle: 0x0013, uuid: 00002a39-0000-1000-8000-00805f9b34fb

Lettura di tutte le Dichiarazioni delle Caratteristiche (UUID 0x2803).

[EE:52:5B:04:00:02][LE]> char-read-hnd 0x000d

Valore/descrittore caratteristica: 10 0e 00 37 2a [EE:52:5B:04:00:02][LE]> char-read-hnd 0x0010 Valore/descrittore caratteristica: 02 11 00 38 2a [EE:52:5B: 04:00:02][LE]> char-read-hnd 0x0012 Valore/descrittore caratteristica: 08 13 00 39 2a

Notare che:

- handle 0x000d è il CCCD per il servizio 2a37 (misurazione frequenza cardiaca) con bit 10 (supporta NOTIFY)

- handle 0x0010 è il CCCD per il servizio 2a38 (Body Sensor Location) con bit 02 (supporto READ)

- handle 0x0012 è il CCCD per il servizio 2a39 (Heart Rate Control Point) con bit 08 (supporta WRITE)

Ora sappiamo che la misurazione della frequenza cardiaca funziona solo con la notifica. Significa che prima dobbiamo registrarci per i cambiamenti di valore nel suo CCCD (UUID 0x2902), che in questo caso è handle 0xf

[EE:52:5B:04:00:02][LE]> char-write-req 0x00f 0100

Handle di notifica = valore 0x000e: 16 65 f3 01 Il valore della caratteristica è stato scritto con successo Handle di notifica = valore 0x000e: 16 6d fa 01 Handle di notifica = valore 0x000e: 16 6d fa 01 Handle di notifica = valore 0x000e: 16 6c f9 01 Handle di notifica = valore 0x000e: 16 6a f7 01 Handle di notifica = valore 0x000e: 16 69 f6 01

Secondo la specifica del profilo, il secondo numero esadecimale è l'informazione BPM.

BPM:

6d = 109

6d = 109

6c = 108

6a = 106

69 = 105

Passaggio 6: lettura della posizione del sensore corporeo

Lettura della posizione del sensore corporeo
Lettura della posizione del sensore corporeo

La posizione del sensore corporeo è l'UUID 0x2A38. Secondo il suo descrittore, questa caratteristica supporta la lettura di base, quindi possiamo leggerne direttamente il valore.

[EE:52:5B:04:00:02][LE]> char-read-hnd 0x11Valore/descrittore caratteristico: 03

Secondo la specifica SIG, 03 significa "dito"

Consigliato: