Article original : How to Protocol Buffer Bluetooth Low Energy Service Part 3
Par Jared Wolff
Cet article provient à l'origine de www.jaredwolff.com
Dans la Partie 1, nous avons appris l'anatomie d'un Protocol Buffer. Dans la Partie 2, nous avons vu comment un service Bluetooth Low Energy est assemblé sur le SDK Nordic NRF52. Ce dernier article rassemble tous les éléments dans un exemple fonctionnel de bout en bout.
Commençons !
P.S. : cet article est long. Si vous voulez quelque chose à télécharger, cliquez ici pour un PDF magnifiquement formaté. (Bonus supplémentaire : le PDF contient les trois parties de cette série !)
Installation

Consultez le fichier Readme.md dans chacun des dépôts d'exemples. (Vous devrez cloner les dépôts, inscrivez-vous ici pour obtenir le code).
J'ai rendu l'installation du firmware très simple. Pour la partie JavaScript, c'est un peu plus complexe mais faisable ! Je vais également inclure les instructions ici :
Configuration du firmware (pour Mac)
- Initialisez le dépôt complet (il y a des sous-modules !) :
git submodule update --init - Installez
protocen utilisant Homebrew :brew install protobuf - Exécutez
make sdk. Cela téléchargera les fichiers du SDK. - Exécutez
make tools_osx. Cela téléchargera votre toolchain ARMGCC (pour Mac). Pour d'autres environnements, voir ci-dessous. - Exécutez
make gen_keyune fois (et une seule fois) ! Cela configura votre clé pour le DFU. - Exécutez
makeet cela construira votre bootloader et votre application principale.
Note : Vous n'avez à faire les étapes 1 à 5 qu'une seule fois.
Configuration de l'application JavaScript (pour Mac)
Prérequis : vous aurez besoin des outils de ligne de commande Xcode. Vous pouvez les obtenir ici.
- Clonez ce dépôt à un endroit sur votre ordinateur
- Assurez-vous d'avoir nvm installé
- Exécutez
nvm install v8.0.0 - Exécutez
nvm install v10.15.3 - Exécutez
nvm use v8.0.0 - Exécutez
yarn(si vous n'avez pas yarnnpm install yarn -g) - Une fois installé, exécutez
nvm use v10.15.3 - Ensuite, exécutez
node index.jspour démarrer l'exemple
L'utilisation de NVM aide à atténuer un problème de compilation avec la bibliothèque Bluetooth. Votre expérience peut varier sur ce point.
Comment cela fonctionne-t-il ?
Dans ce projet, le Protocol Buffer a deux fonctions. La première en tant que "commande" à l'appareil Bluetooth. Deuxièmement, une "réponse" à cette commande de l'appareil.
Notre exemple d'application JavaScript utilise "This is" comme charge utile. Avec la puissance de certaines opérations sur les chaînes de caractères, faisons-en une phrase complète !
La série d'événements ressemble à ceci :
- L'application de test se connecte et envoie ces données en utilisant notre service Bluetooth Low Energy.
- Le firmware décode le message.
- Le firmware modifie les données originales en ajoutant " cool." Résultat : "This is cool"
- Le firmware encode la charge utile et rend les données disponibles pour la lecture.
- L'application lit enfin la caractéristique, décode et affiche le résultat !
Cela semble compliqué, mais il y a des avantages à cela :
- Dans les Protocol Buffers, les structures de données sont bien définies. Cela signifie qu'ils ont de grandes capacités de vérification des erreurs. Si vous utilisez un type de structure de données, vous devrez peut-être coder votre propre validation de données.
- L'encodage et le décodage sont simples et directs. Vous pouvez encoder les mêmes données sur différentes plateformes et toujours obtenir le même résultat décodé.
Vous voulez faire fonctionner l'exemple ? Après tout, voir, c'est croire. Faisons cela.
Cela fonctionne-t-il ?

Une fois que vous avez terminé l'installation (ci-dessus), programmons ce firmware ! Heureusement pour vous, ce n'est que deux étapes rapides !
- Branchez votre carte NRF52 DK
- Exécutez
make flash_all. (Cela compile et flashe tout le code du projet.)
Une fois flashé, le moyen le plus simple de savoir si tout fonctionne est lorsque la LED 1 clignote. Cela signifie qu'elle est en mode publicité et prête pour une connexion.

Assurons-nous qu'elle est bien en mode publicité. Vous pouvez utiliser un outil comme NRF Connect pour iOS ou Android. Ou vous pouvez utiliser LightBlue. (Disponible également pour iOS et Android)
Ouvrez l'une des applications et recherchez les appareils en mode publicité. Vous chercherez Nordic_Buttonless.

Maintenant, connectons-nous et vérifions nos services et caractéristiques connectables :

Comme vous pouvez le voir, il y a deux services. L'un est le service DFU de Nordic. L'autre est notre service Protocol Buffer !
Vous pouvez comparer PROTOBUF_UUID_BASE dans ble_protobuf.h avec l'UUID du service "Inconnu". Les puces de Nordic sont en format Little Endian tandis que les données ici sont en format Big Endian. (c'est-à-dire que vous devrez inverser les octets pour voir qu'ils sont identiques !)
Vous pouvez même cliquer pour voir les caractéristiques dans NRF Connect. Dans le cas de LightBlue, les UUID des caractéristiques sont déjà affichés.
Utilisation de l'application JavaScript
Une fois que nous sommes en mode publicité, il est temps de lancer l'application.

Changez simplement de répertoire pour ble-protobuf-js et exécutez node index.js
Si vous avez tout installé correctement, vous devriez commencer à voir une sortie comme :
exemple démarré scanning périphérique avec ID 06f9b62ec5334454875b9f53d2f3fa74 trouvé avec le nom : Nordic_Buttonles
Il devrait ensuite se connecter immédiatement et envoyer des données à l'appareil. Il devrait recevoir la réponse immédiatement et l'afficher à l'écran.
connecté à Nordic_Buttonles Envoyé : This is Reçu : This is cool.
Bingo !
Vous l'avez fait !
? Félicitations si vous êtes arrivé jusqu'ici dans le tutoriel. Vous devriez maintenant vous sentir suffisamment confiant pour commencer à jouer avec le code logiciel. Peut-être allez-vous créer quelque chose de cool ?
Voici des liens vers quelques ressources que vous pourriez trouver utiles.
- Documentation Protocol Buffer
- NanoPB - (l'implémentation des Protocol Buffers que nous avons utilisée pour ce projet)
- Documentation du SDK Nordic
- Encore une fois, voici les liens vers la Partie 1 et la Partie 2
- Si vous ne l'avez pas déjà fait, obtenez tout le code de ce projet
Conclusion
Les Protocol Buffers sont assez polyvalents et pratiques. Les utiliser avec un service Bluetooth Low Energy est l'une des façons dont vous pouvez en tirer parti. Alors que le monde connecté de l'IoT continue de s'étendre, je n'ai aucun doute que nous verrons plus de cas d'utilisation à l'avenir !
J'espère que cela vous a inspiré à incorporer les Protocol Buffers dans vos propres projets. Assurez-vous de télécharger le code d'exemple et commencez dès maintenant.
Ce tutoriel vous a-t-il été utile ? Faites-moi savoir ce que vous en pensez.