Comment mettre en œuvre Bluetooth LE avec Bluez dans Linux

Je suis en train de travailler sur la mise en place de deux systèmes Linux pour un c? BLE de démonstration. Évidemment, un système sera le périphérique et l'on va être au centre des dispositifs. J'ai plusieurs questions autour de ces deux configurations.

Environnement

Périphérique D'Installation

La première commande de l'entreprise est d'obtenir le périphérique de configuration du système et de la publicité avec une GATT de serveur configuré. À ce moment, il ne semble pas possible de configurer une GATT de serveur à partir de la ligne de commande. Ainsi, s'il est une tâche simple apportant une clé USB et de publicité, ce que ne permet pas la création de services personnalisés et des caractéristiques. Le seul exemple d'une GATT de serveur que j'ai pu trouver a été le gatt-exemple.c fichier dans le Bluez paquet. J'ai donc téléchargé et construit les dernières bluez-5.23 source. (http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html). En outre configuré à l'aide de l'option --enable-mainteneur en mode indicateur de force de construire le gatt-exemple.c plugin dans bluetoothd. Et je l'ai validé après la construction de la ~/bluez-5.23/plugins répertoire qu'il y avait un bluetoothd-gat-example.o fichier. Qui me dit que le gatt-exemple a au moins réussi à construire.

J'ai ensuite modifié le fichier de configuration, afin de permettre au et l'attribut server.

$ 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.

Puis redémarrez ou redémarrer le bluetooth démon...

Centrale D'Installation De L'Appareil

Que le dispositif central n'a pas besoin de tout spécial plugins construit comme le périphérique, je viens d'installer bluez à l'aide de apt-get. Cela semble avoir installé la v4.101 selon bluetoothd -v.

La Configuration De La Session

Le processus de connexion, puis devrait être assez simple. - Je configurer le périphérique pour la publicité, puis de se connecter avec l'appareil central:

Périphérique:

$ 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

Et nous ne voyons pas l'un des services ou des caractéristiques du gatt-exemple sont disponibles.

Questions

--Périphérique

  1. Comment pourrais-je aller sur la création de mon propre GATT de serveur? Peut-il être un stand-alone application C ou faut-il être intégré dans les bluetoothd comme un plugin comme le gatt-exemple? La réponse à cette question (La création d'une Gatt de Serveur?) implique que vous procédez de la manière suivante: "commence par l'initialisation du GATT de bibliothèque et des modules complémentaires" puis "enregistrer votre GATT de base de données". Mais il n'y a pas un seul exemple de la façon de mettre en œuvre ces affirmations génériques et le lien fourni est tout simplement une URL pour le Bluetooth site web.
  2. Le GATT de spécifications (https://developer.bluetooth.org/gatt/Pages/default.aspx) fournissent de nombreux "adopté" des services et des caractéristiques qui sont téléchargeables au format XML. Mais il n'y a pas d'instructions pour savoir comment les utiliser?!
  3. Comment faire valider mon GATT de serveur est en cours d'exécution?

--Dispositif Central

  1. Pourquoi mon appareil central de ne pas voir les services et les caractéristiques du GATT de serveur en cours d'exécution sur le périphérique?

Je peux fournir toute information supplémentaire nécessaire. Merci.

Plutôt que d'utiliser BlueZ directement vous pouvez envisager d'utiliser un niveau plus élevé de la bibliothèque comme Noble et Bleno
Il n'y a vraiment pas besoin, comme BlueZ met en œuvre deux API pour ses fonctionnalités, dont l'un est de très haut niveau (DBus)

OriginalL'auteur linsek | 2014-09-11