Créer un serveur du Gatt?
j'ai une question plus large ici, donc si quelqu'un pouvait me montrer un doc 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 j'aurais besoin d'un coup de main.
je me connecte à une BeagleBoard avec BlueZ 5.9, et mon intention est de:
- Créer une Gatt de serveur,
- chargez-le avec quelques attributs d'écriture, et
- annonce ce serveur pour se connecter à un appareil android.
j'ai créé L'application Android qui va se connecter et fonctionner comme le central, rendant 3 essentiellement complète. Je ne sais pas comment les commandes - les choses littérales à taper - pour lancer un serveur du Gatt / créer des attributs sur le BeagleBoard. Je suis connu pour écrire gros, il est donc possible que j'ai juste ma terminologie complètement incorrecte - cela dit, toute aide serait un apprécié dans l'achèvement 1 et 2, même si c'est juste un pousser dans la bonne direction. Merci!
3 réponses
votre terminologie est principalement correcte.
typiquement, une base de données du GATT a les services 0x1800 (accès Générique) et 0x1801 (attribut Générique) au moins. Le service D'accès Générique comporte deux caractéristiques obligatoires: nom de L'appareil et apparence . Le service D'attributs génériques doit être vide.
par conséquent, le GATT minimal la base de données 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, donc vous allez en créer un propre.
tout d'abord, créez un UUID de 128 bits, par exemple en utilisant 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)
Alors, vous avez mentionné que vous souhaitez plusieurs inscriptible caractéristiques. Donc, créons un autre UUID pour celui-là.
$ 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" Write Request " pour vous assurer que les accusés de réception des Écritures sont envoyés au central. Si vous choisissez "Write Command", les Écritures peuvent être écartées par la pile de votre téléphone ou par le périphérique.
après avoir de cette caractéristique, vous êtes prêt à commencer à coder.
Je ne connais pas le SDK BeagleBoard, mais typiquement, vous commencez par initialiser la bibliothèque du 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 n'avez pas un bel outil pour générer les données binaires, vous pourriez avoir à les écrire vous-mêmes. C'est expliqué dans la spécification Bluetooth Core V4.0 . Espérons que vous pouvez trouver une API qui fait la transformation pour vous: -)
lorsque l'inscription est réussie, vous devrez définir les paramètres de publicité et pouvez commencer la publicité (consultez la documentation de votre SDK et des échantillons pour cela, encore une fois).
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 un attribut demande pour une poignée donnée. Ensuite, vous avez juste à traiter la demande en regardant la poignée, la valeur fournie et le type de l'opération (lire / écrire). 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, et vous devrez attendre jusqu'à ce que la demande soit terminée avant l'envoi de la prochaine. Rappelez-vous que lors de la programmation, vous gagnez du temps: -).
si vous voulez essayer sur Android en premier parce que c'est plus familier pour vous, vous pouvez essayer le Galaxy S 4 avec Android 4.2. Il a également un mode périphérique LE - 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 intéressant de ramasser une touche iPod si elle est abordable pour jouer avec elle.
Checkout bleno , c'est une bibliothèque de pile périphérique que j'ai créée pour le noeud.js récemment. Il supporte actuellement Linux (testé avec BlueZ 4.101) et OS X 10.9.
la clé pour personnaliser le service du gatt est le programme démon bluetoothd de bluez.
j'ai décrit comment personnaliser un service du gatt dans mon blogueur , s'il vous plaît vérifier.