web-dev-qa-db-fra.com

Créer un serveur Gatt?

J'ai une question plus large ici, donc si quelqu'un pouvait me diriger vers un document ou un article qui pourrait expliquer cela, cela suffirait. Inutile de dire qu'une journée de recherche sur Google ne m'a mené nulle part et que je pourrais utiliser un coup de main.

Je me connecte à un BeagleBoard avec BlueZ 5.9, et mon intention est de:

  1. Créez un serveur Gatt,
  2. Chargez-le avec quelques attributs inscriptibles, et
  3. Annoncez ce serveur pour vous connecter à un appareil Android.

J'ai créé l'application Android qui se connectera et fonctionnera en tant que centrale, ce qui rendra 3 complètement complet. Je ne sais pas comment les commandes - les choses littérales à taper - pour lancer un serveur Gatt/créer des attributs sur le BeagleBoard. Je sais que le matériel écrit en gros, donc il est possible que ma terminologie soit complètement incorrecte - cela dit, toute aide serait appréciée pour compléter 1 et 2, même si ce n'est qu'un la bonne direction. Merci!

21
Alxjrvs

Votre terminologie est principalement correcte.

En règle générale, une base de données GATT a les services x1800 (accès générique) et x1801 (attribut générique) au moins. Le service d'accès générique contient deux caractéristiques obligatoires: Nom du périphérique et Apparence . Le service d'attributs génériques doit être vide.

Par conséquent, la base de données minimale du GATT ressemble à ceci:

Handle  Description
 0000   Service: Generic Access (1800)
 0001   Characteristic: Device Name (2A00, readable)
 0002   Characteristic Value (string)
 0003   Characteristic: Appearance (2A01, readable)
 0004   Characteristic Value (16bit enum)
 0005   Service: Generic Attribute (1801) 

Après ces deux services, vous pouvez ajouter vos propres services. Dans votre cas, vous ne semblez pas cibler un service bien connu, vous allez donc en créer un propre.

Commencez par créer un UUID 128 bits, par exemple à l'aide de l'outil uuidgen sur la ligne de commande de votre Mac

$ uuidgen
DCDF2725-56C8-4235-A4BC-F7951D5C3762

Ce sera votre UUID de service

 0006   Service: Custom defined Service (DCDF2725-56C8-4235-A4BC-F7951D5C3762)

Ensuite, vous avez mentionné que vous vouliez plusieurs caractéristiques inscriptibles. Créons donc un autre UUID pour celui-ci.

$ uuidgen
4C06C6F4-C90D-4C58-8E31-20C8C74FF832

Et ajouter une caractéristique au service

 0007   Characteristic: Custom Characteristic (4C06C...FF832, writeable)
 0008   Characteristic Value (hex, 20 bytes)

Votre valeur caractéristique ne doit pas dépasser 20 octets, et vous devez sélectionner "Demande d'écriture" pour vous assurer que les accusés de réception des écritures sont envoyés à la centrale. Si vous choisissez "Write Command", les écritures peuvent être rejetées par la pile de votre téléphone ou le périphérique.

Après avoir défini cette caractéristique, vous êtes prêt à commencer le codage.

Je ne connais pas le SDK BeagleBoard, mais généralement, vous commencez par initialiser la bibliothèque GATT et les modules supplémentaires (par exemple, pour prendre en charge les écritures, vous devez initialiser une deuxième partie de la bibliothèque).

Après cette initialisation, vous enregistrez votre base de données GATT. Si vous ne disposez pas d'un outil Nice pour générer les données binaires, vous devrez peut-être les écrire vous-même. Cela est expliqué dans le Bluetooth Core Spec V4. . Espérons que vous pourrez trouver une API qui fera la transformation pour vous :-)

Lorsque l'enregistrement est réussi, vous devrez définir les paramètres de publicité et pouvez commencer la publicité (consultez à nouveau la documentation et les exemples de votre SDK).

Ce qui se passe maintenant, c'est qu'à un certain moment, vous obtiendrez un rappel qu'une connexion a été établie, et plus tard, vous obtiendrez une demande d'attribut pour un handle donné. Ensuite, il suffit de traiter la demande en regardant le handle, la valeur fournie et le type d'opération (lecture/écriture). N'oubliez pas de toujours renvoyer une valeur de succès ou un code d'erreur en réponse à la demande, sinon vous bloquerez les communications Bluetooth.

Normalement, ces puces Bluetooth fonctionnent toujours avec des opérations asynchrones. Vous enverrez une demande, puis devrez attendre que la demande soit terminée avant d'envoyer la suivante. N'oubliez pas que lors de la programmation, cela vous fait gagner du temps :-).

Si vous voulez essayer Android d'abord parce qu'il vous est plus familier, vous pouvez essayer le Galaxy S 4 avec Android 4.2. Il a aussi un périphérique LE mode - Je n'ai pas testé sa fiabilité, cependant. La pile de smartphones la plus fiable à l'heure actuelle pour agir comme périphérique LE est actuellement dans iOS 7 - il peut donc être utile de choisir un iPod touch s'il est abordable de jouer avec.

15
Etan

Checkout bleno , c'est une bibliothèque de pile périphérique BLE que j'ai créée récemment pour node.js. Il prend actuellement en charge Linux (testé avec BlueZ 4.101) et OS X 10.9.

Il y a des exemples de comment l'utiliser ici et ici .

5
sandeepmistry

La clé pour personnaliser le service gatt est le programme démon bluetoothd de bluez.

J'ai décrit comment personnaliser un service Gatt dans mon blogueur , veuillez le vérifier.

2
Gaiger Chen