Sto lavorando alla configurazione di due sistemi Linux per una demo BLE. Ovviamente un sistema sarà la periferica e uno sarà il dispositivo centrale. Ho diverse domande su entrambe queste configurazioni.Come implementare Bluetooth LE con Bluez in Linux
Ambiente
- 2x Ubuntu 14.04 sistemi
- 2x Pluggable dongle USB-BT4LE (http://plugable.com/products/usb-bt4le)
Impostazione dispositivo periferico
Il primo ordine del giorno è ottenere la configurazione del sistema periferico e pubblicità con un server GATT configurato. A questo punto, non sembra possibile configurare un server GATT dalla riga di comando. Quindi, mentre è un compito semplice portare un dongle USB e pubblicizzarlo, questo non consente la creazione di servizi e caratteristiche personalizzate. L'unico esempio di un server GATT che ho trovato era il file gatt-example.c nel pacchetto Bluez. Così ho scaricato e creato l'ultima fonte bluez-5.23. (http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html). Inoltre configurato utilizzando il flag --enable-maintainer-mode per forzare la compilazione del plugin gatt-example.c in bluetoothd. E ho convalidato post-build dalla directory ~/bluez-5.23/plugins
che esisteva un file bluetoothd-gat-example.o
. Il che mi dice che l'esempio gatt è stato realizzato almeno con successo.
Ho quindi modificato il file di configurazione per abilitare LE e il server degli attributi.
$ sudo vi /etc/bluetooth/main.conf
EnableLE = true // Enable Low Energy support. Default is false.
AttributeServer = true // Enable the GATT attribute server. Default is false.
Poi basta riavviare o riavviare il demone bluetooth ...
Setup Device Central
Come il dispositivo centrale non ha bisogno di alcun plugin speciali costruite come la periferica, ho appena installato bluez utilizzando apt-get
. Questo sembra aver installato v4.101 secondo bluetoothd -v
.
Session Setup
processo la connessione, quindi dovrebbe essere abbastanza semplice. I ha installato la periferica per pubblicizzare e poi connettersi con il dispositivo centrale:
periferica:
$ sudo hciconfig hci0 up // Make sure the interface is up
$ sudo hciconfig hci0 leadv // Set the interface to advertise
Centrale:
$ sudo hcitool -i hci0 lescan // Scan for nearby devices advertising
LE Scan ...
00:02:72:C9:5E:0F (unknown) // Not sure why two of the same MAC are found?
00:02:72:C9:5E:0F (unknown) // but I know this is my device...
$ sudo gatttool -i hci0 -b 00:02:72:C9:5E:0F -m 48 --interactive // Connect interactively
[ ][00:02:72:C9:5E:0F][LE]> connect
[CON][00:02:72:C9:5E:0F][LE]> primary
attr handle: 0x0001, end grp handle: 0x0008 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0010, end grp handle: 0x0010 uuid: 00001801-0000-1000-8000-00805f9b34fb
[CON][00:02:72:C9:5E:0F][LE]> characteristics
handle: 0x0004, char properties: 0x02, char value handle: 0x0006, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0007, char properties: 0x02, char value handle: 0x0008, uuid: 00002a01-0000-1000-8000-00805f9b34fb
E noi non vediamo uno dei servizi o le caratteristiche del gatt- esempio sono disponibili.
Domande
dispositivo --Peripheral
- Come potrei fare per creare il mio server GATT personalizzato? Può essere un'applicazione C stand-alone o deve essere incorporata in bluetoothd come plugin come il gatt-example?La risposta a questa domanda (Creating a Gatt Server?) implica che tu faccia quanto segue: "inizia inizializzando la libreria GATT e moduli aggiuntivi" e poi "registra il tuo database GATT". Ma non c'è un solo esempio su come implementare queste dichiarazioni generiche e il link fornito è semplicemente un URL del sito Web di Bluetooth.
- Le specifiche GATT (https://developer.bluetooth.org/gatt/Pages/default.aspx) forniscono numerosi servizi e caratteristiche "adottati" che sono scaricabili in formato XML. Ma non ci sono istruzioni su come usarli ?!
- Come si esegue una convalida del mio server GATT?
dispositivo --Central
- Perché il mio dispositivo centrale non vedere i servizi e le caratteristiche dal server GATT in esecuzione sul periferica?
Posso fornire qualsiasi informazione aggiuntiva necessaria. Grazie.
Invece di utilizzare BlueZ direttamente si potrebbe desiderare di considerare l'utilizzo di una libreria di livello superiore come [Noble] (https://github.com/sandeepmistry/noble) e [Bleno] (https://github.com/ sandeepmistry/bleno) – jfhc
@jfhc Non ce n'è davvero bisogno, poiché BlueZ implementa due API per la sua funzionalità, una delle quali è di altissimo livello ('DBus') – Zimano