Table des matières:

Construire un tracker de mouvement portable (BLE d'Arduino à une application Android Studio personnalisée): 4 étapes
Construire un tracker de mouvement portable (BLE d'Arduino à une application Android Studio personnalisée): 4 étapes

Vidéo: Construire un tracker de mouvement portable (BLE d'Arduino à une application Android Studio personnalisée): 4 étapes

Vidéo: Construire un tracker de mouvement portable (BLE d'Arduino à une application Android Studio personnalisée): 4 étapes
Vidéo: Nigéria : à 9 ans, il est créateur de 35 jeux vidéo et repéré par Google ! 2024, Juillet
Anonim
Construire un suivi de mouvement portable (BLE d'Arduino à une application Android Studio personnalisée)
Construire un suivi de mouvement portable (BLE d'Arduino à une application Android Studio personnalisée)

Bluetooth Low Energy (BLE) est une forme de communication Bluetooth à faible consommation. Les appareils portables, comme les vêtements intelligents que j'aide à concevoir chez Predictive Wear, doivent limiter la consommation d'énergie dans la mesure du possible pour prolonger la durée de vie de la batterie et utiliser fréquemment le BLE. Le Bluetooth Special Interest Group (SIG) définit plusieurs spécifications qu'un appareil doit implémenter pour interagir avec un appareil Bluetooth, qu'ils appellent "profils". La plupart des profils d'application utilisent le General Attribute Profile (GATT) pour envoyer des données via une liaison BLE. Il existe trois concepts fondamentaux dans BLE: les profils, les services et les attributs.

Bluetooth SIG a standardisé de nombreux profils, services et attributs communs. Cependant, lors de la création de matériel personnalisé, il est souvent nécessaire de créer des services et des attributs personnalisés et il n'y a pas beaucoup de tutoriels disponibles. Pour compliquer les choses, Adafruit ne fournit aucun guide sur la conception d'applications mobiles à coupler avec leurs modules BLE et le code source de leurs applications est difficile à rétroconcevoir.

Ce tutoriel a pour but d'expliquer:

  1. Comment concevoir des services et des caractéristiques GATT personnalisés
  2. Comment programmer l'Adafruit Bluefruit LE SPI Friend pour qu'il agisse en tant que serveur GATT pour ces services et caractéristiques personnalisés
  3. Comment programmer un appareil Android pour qu'il agisse en tant que client GATT pour lire les données du serveur GATT

Ce didacticiel n'est pas destiné à être traduit dans une application prête pour la production - il s'agit simplement d'une introduction à BLE.

Lecture de fond:

  • Documentation Adafruit Bluefruit LE SPI Friend
  • Si vous ne connaissez pas GATT ou BLE

Fournitures

  • 1x - Un appareil Arduino (j'utilise l'UNO pour ce tutoriel)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x - cavaliers mâles à mâles
  • Équipement de soudage de base (pour souder les broches d'en-tête sur le SPI Friend)
  • Un ordinateur (pour programmer l'appareil Arduino et l'appareil Android)

Étape 1: Concevoir des services et des caractéristiques personnalisés

INTRODUCTION

Cet article explique très bien comment concevoir des services et des caractéristiques personnalisés. Je recommande fortement de lire cet article. Je donne ci-dessous un aperçu très simple qui néglige les subtilités au profit de la simplicité.

Les services du GATT sont un ensemble de caractéristiques.

Les caractéristiques du GATT contiennent une propriété, une valeur et zéro ou plusieurs descripteurs.

  • Propriété: comment les données doivent être traitées par le client (application Android), par ex. lire, écrire, écrire sans réponse, notifier et indiquer.
  • Valeur: la valeur réelle de la caractéristique, par ex. 1089
  • Descripteurs: il s'agit d'informations sur la valeur, par ex. l'unité, millisecondes

CONCEPTION

D'accord, maintenant vous savez quels sont les services et les caractéristiques, nous devons trouver comment concevoir certains services et caractéristiques pour obtenir nos données personnalisées et les envoyer de notre serveur GATT (Arduino) au client (application Android). Considérons un appareil Arduino qui collecte des données à partir d'un module accéléromètre-gyroscope (AGM). Nous souhaitons collecter des mesures de gyroscope et d'accélération à partir de trois axes spatiaux et l'heure à laquelle ces mesures ont été prises et transmettre ces données à notre application mobile. Nous voulons également savoir quand nous devons charger l'appareil, nous voulons donc lire le niveau de la batterie et le transmettre à notre application mobile.

1. Pouvons-nous utiliser l'un des services et caractéristiques standard ?

Bluetooth SIG a standardisé de nombreux services et caractéristiques communs. Tout d'abord, vérifiez-les pour voir si vous pouvez coopter l'un des services et caractéristiques standardisés. Les services et caractéristiques standard peuvent utiliser des paquets de données beaucoup plus petits car l'identificateur unique universel (UUID) est de 16 bits tandis que les services et caractéristiques personnalisés doivent utiliser 128 bits pour leurs UUID. Plus d'informations sur les UUID plus tard. De notre recherche, nous avons trouvé un "service de batterie" standardisé qui contient un "niveau de batterie" caractéristique.

2. Séparez toutes les valeurs de données que vous souhaitez envoyer via BLE en caractéristiques et services

Nous pouvons diviser nos points de données personnalisés en sept caractéristiques personnalisées au sein d'un service personnalisé. Nous appellerons ce service le "service AGM". Il contiendra 7 caractéristiques: accélération x, accélération y, accélération z, gyroscope x, gyroscope y, gyroscope z et une référence temporelle.

3. Déterminer les propriétés nécessaires pour chaque caractéristique

Une caractéristique peut avoir plusieurs propriétés.

  1. Lire: le client (application Android) peut lire une valeur à partir du serveur GATT (Arduino)
  2. Ecrire: le Client peut modifier une valeur depuis le Serveur GATT
  3. Indiquer: le client sera averti si une valeur change du serveur GATT et le client doit envoyer une confirmation au serveur GATT
  4. Notifier: le client sera notifié si une valeur change du serveur GATT et le client n'est pas censé envoyer de confirmation au serveur GATT

Pour ce tutoriel, nous allons mettre toutes nos caractéristiques à lire, à l'exception du niveau de batterie qui aura à la fois des propriétés de notification et de lecture.

4. Générez des UUID pour des services et des caractéristiques personnalisés et trouvez des UUID standard

Comme je l'ai brièvement mentionné précédemment, les services et caractéristiques standardisés Bluetooth SIG utilisent un UUID de 16 bits, tandis que les services et caractéristiques personnalisés utilisent des UUID de 128 bits. Par exemple, consultez le numéro attribué au service de batterie sur le Bluetooth SIG. Le numéro attribué 0x180F représente l'UUID 128 bits "0000180F-0000-1000-8000-00805F9B34FB". Les quatre chiffres (16 bits) en gras sont propres au service ou à la caractéristique normalisés particuliers, tandis que les autres caractères sont conservés entre tous les services et caractéristiques normalisés. Étant donné que le client et le serveur du GATT savent que les services et caractéristiques normalisés ne varient que par les chiffres en gras, la taille des paquets de données peut être considérablement réduite. Cependant, les services et caractéristiques personnalisés ne peuvent pas fonctionner sous cette même hypothèse.

Au lieu de cela, les services et caractéristiques personnalisés doivent utiliser des UUID 128 bits non abrégés. Voici un générateur d'UUID en ligne. Tout UUID autre que l'UUID standardisé est acceptable pour un UUID personnalisé. Cependant, une convention de nommage typique consiste à désigner un service personnalisé 0000001-… et les caractéristiques de ce service personnalisé 00000002-…

Voici une feuille de calcul récapitulative des services et caractéristiques que nous mettrons en œuvre avec leurs UUID

Étape 2: Code Arduino

METTRE À JOUR LE BLUEFRUIT LE SPI FRIEND

Tout d'abord, branchez l'Adafruit Bluefruit LE SPI Friend comme ils le spécifient dans leur guide de connexion et allumez l'appareil Arduino. Assurez-vous que vous pouvez trouver l'Adafruit Bluefruit LE SPI Friend sur votre appareil Android lors de la recherche d'appareils Bluetooth. Téléchargez l'application Bluefruit Connect, connectez-vous à l'Adafruit Bluefruit LE SPI Friend et autorisez-le à mettre à jour le firmware de l'appareil. Cette étape est importante. Si vous ne mettez pas à jour le micrologiciel, les commandes que vous émettez à l'appareil via Arduino échoueront probablement et il n'y aura pas d'erreur évidente pour vous permettre de découvrir quel est le problème.

Voici mon repo pour ce projet. Vous pouvez voir le code Arduino complet ici.

APERÇU

Quelques points importants à noter:

  1. Dans la méthode setup(), tous les UUID personnalisés doivent contenir "-" entre tous les deux caractères. Par exemple, "AT+GATTADDCHAR=UUID128=00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66" fonctionnera. "AT+GATTADDCHAR=UUID128=00000005-627E-47E5-A3fCDDABD97AA966" ne fonctionnera pas.
  2. Notez que dans la méthode setup(), "battery.begin(true);" appelle "ble.reset();" automatiquement. Si vous n'utilisez pas le service de batterie comme je l'ai fait, vous devez réinitialiser le module ble (utilisez "ble.reset();") où j'ai la commande "battery.begin(true);".
  3. Dans la méthode setup(), remplacez "if (!ble.begin(false))" par "if (!ble.begin(true))" si vous souhaitez déboguer.

Ce code est assez explicite. J'ai inclus des descriptions de chaque méthode personnalisée. La méthode de configuration prépare le module BLE à agir en tant que serveur GATT. La méthode de boucle passe par un faux balayage du module accéléromètre gyroscope (AGM) et génère un nombre aléatoire de 1 à 100 pour ces valeurs. La batterie est épuisée de 1% pour simuler l'utilisation de la batterie. Vous pouvez facilement remplacer ce code par les valeurs réelles du capteur. Ce code suppose que vous transmettrez un tableau de données AGM, de 6 mesures, plutôt qu'une seule mesure, car l'analyse d'une fenêtre de données AGM est probablement plus utile qu'un seul point de données. Si vous modifiez la taille du tableau, notez que des modifications seront nécessaires dans le code du studio Android. Pour capturer un tableau de données, vous devez passer un compteur avec les données que vous avez l'intention d'envoyer. Ce compteur vous permet de trouver où vous en êtes dans la fenêtre de l'application Android Studio afin que vous puissiez attendre d'écouter les points de données manquants dans la fenêtre. Sans le compteur ou avec un tableau de taille différente, le projet de studio Android manquera des points de données ou restera bloqué dans une boucle en attendant les points de données restants qu'il attend.

Étape 3: Code Studio Android

Voici mon repo pour ce projet. Vous pouvez voir le code complet d'Android Studio ici.

APERÇU

Je continuerai à mettre à jour cela avec un aperçu plus détaillé du fonctionnement du code arduino et android en détail… L'application est entièrement fonctionnelle, alors n'hésitez pas à regarder le code vous-même en attendant.

Étape 4: Demande finale

Demande finale
Demande finale
Demande finale
Demande finale
Demande finale
Demande finale

Toutes nos félicitations! Votre application est téléchargée sur votre téléphone et votre appareil portable est chargé et transmet des données.

LANCEZ L'APPLICATION

Pour commencer, cliquez sur l'icône de lancement de l'application.

AUTORISATIONS D'OCTROI

Vous devrez approuver l'utilisation de certaines autorisations pour que l'application fonctionne correctement.

NUMÉRISATION DES APPAREILS

Ensuite, cliquez sur le bouton "Scan" dans le coin supérieur gauche de l'application.

SÉLECTIONNEZ VOTRE APPAREIL PORTABLE

Ensuite, sélectionnez votre appareil portable dans la liste des appareils BLE disponibles. Son nom est "BLE Arduino Hardware". GET DATA Attendez que l'application récupère les données AGM et détermine où l'utilisateur est immobile ou en mouvement. VOIR VOS RÉSULTATSConsultez les résultats à l'écran ! Cliquez sur le bouton de synchronisation pour obtenir une autre lecture des données.

Conseillé: