2015-05-22 24 views
7

Sto iniziando a creare una semplice rete BLE con un microcontrollore e un raspberry pi (dardle BLE tardis). Come punto di partenza, sto cercando un semplice esempio C o C++ per leggere/scrivere un dispositivo BLE, simile a quello che sono in grado di fare sulla linea di comando. Gli esempi che ho trovato finora sono piuttosto complicati. Come principiante BLE ho bisogno di alcuni esempi molto semplici da costruire prima di andare avanti con un design più complicato. Sto bene con hard-coding il nome del dispositivo BLE come ho nell'esempio gatttool qui sotto.Esempio di lettura/scrittura BLE C/C++ con Bluez

Ecco come attualmente utilizzo le opzioni della riga di comando da Bluez.

Dalla riga di comando sono in grado di utilizzare:

$ sudo hcitool lescan 
LE Scan ... 
BB:A0:50:02:18:07 MyDevice 

successivo sono in grado di connettersi al dispositivo sulla riga di comando con gatttool:

$ sudo gatttol -b BB:A0:50:02:18:07 -I 
[BB:A0:50:02:18:07][LE]> connect 
Attempting to connect to BB:A0:50:02:18:07 
Connection successful 

Infine io sono in grado di leggere e scrivere utilizzando le maniglie appropriate

[BB:A0:50:02:18:07][LE]> char-write-req 000f 0100 
Characteristic value was written successfully 
[BB:A0:50:02:18:07][LE]> char-write-cmd 0011 4C467A 

Alcuni siti che ho utilizzato per la ricerca iniziale e per iniziare:
http://people.csail.mit.edu/albert/bluez-intro/c404.html
https://github.com/carsonmcdonald/bluez-experiments/blob/master/experiments/scantest.c

+0

Puoi anche dare un'occhiata al nuovissimo DBUS GATT api pubblicato dalle ultime versioni di Bluez (dal 5,29 ... credo). Ancora sperimentale, ma ho fatto alcuni test e funziona abbastanza bene. Ovviamente le prestazioni potrebbero essere un po 'inferiori rispetto all'accesso alla libreria bluez direttamente, ma penso che valga la pena provare ... –

risposta

4

Qualcosa di semplice? Quanto è breve un pezzo di spago? Personalmente penso che il codice gatttool sia abbastanza semplice da seguire ed estrarre per i propri scopi (l'ho fatto di recente). Ma se questo non è proprio adatto a te, allora un'altra opzione è libgatt. È essenzialmente lo stesso codice utilizzato da gatttool, ma è stato raggruppato più comodamente in un'API della libreria pubblica. Dai uno sguardo a gatt.h che ha una connessione/lettura/scrittura ecc. Speriamo che dovrebbe essere evidente come usarlo.

+0

Grazie per la risposta. gatttool.c e gatt.c sembrano avere ciò di cui ho bisogno. Puoi chiarire che cosa dovrebbe essere un GAttrib? Ad esempio, eseguendo l'operazione da riga di comando per scrivere, char-write-cmd, ho un indirizzo MAC noto, handle e valore da inviare. Vorrei usare la funzione gatt_write_cmd() da gatt.c e semplicemente passare una serie di valori noti, ma sono bloccato sul puntatore GAttrib e come si riferisce a ciò che ho usato con l'opzione della riga di comando. –

+0

dove gatttool.c e gatt.c? come scaricare ecc? – peterk