Rapport de mi-projet : Balise Bluetooth Low Energy Soutenu par : Tuteurs en entreprise : CHALONO Kévin HERAULT Colombe DUCROCQ Tony Tuteur Ecole : VANTROYS Thomas Lecteur : Année : VANTROYS Thomas 2014-2015
... 2 I) Définition des objectifs du projet... 3 a) Présentation du projet... 3 b) Cahier des charges... 4 II) Développement sur la Raspberry Pi... 5 a) Accès au terminal Raspbian... 5 b) Installation des librairies nécessaires... 7 c) Installation de Nodejs et bleno... 8 d) Notion de serveur GATT et ATT... 10 III) Développement de l application mobile... 12 a) Détection d appareils BLE... 12 b) Connection au serveur et découverte des services... 13 c) Lancement automatisé de l application... 16 d) Bench... 17 IV) Objectifs prévisionnels... 18 CONCLUSION... 19 ANNEXE..20 BIBLIOGRAPHIE..23 CHALONO Kévin Page 1
La technologie «Bluetooth Low Energy» a été introduit en 2010. Elle est présentée comme étant fortement plus optimisé que le Bluetooth classique en ayant notamment une plus faible consommation d énergie, un plus faible prix et une faible complexité de fonctionnement. Elle a connu un développement rapide et un succès comparé à d autres technologies sans fil. Ceci s explique par la croissance phénoménale des appareils mobiles (smartphones, tablettes ) et l adoption rapide par l industrie mobile de cette technologie. Notre projet consiste à utiliser la technologie «Bluetooth Low Energy» afin de réaliser une communication entre un appareil mobile et un appareil dans lequel a été implémentée la technologie BLE. Pour ce faire, nous présenterons tout d abord le projet de manière générale et verrons le cahier des charges de manière précise. Nous analyserons ensuite le fonctionnement d un appareil «Bluetooth Low Energy» à l aide du nano-ordinateur RaspberryPi. Enfin nous examinerons le développement de l application mobile permettant de communiquer avec les appareils présentant la technologie BLE. CHALONO Kévin Page 2
I) Définition des objectifs du projet a) Présentation du projet L objectif du projet est de réaliser une application mobile permettant d échanger des données avec un serveur à travers une connexion Bluetooth Low Energy. Le but est ici de tirer parti de la faible consommation d une connexion de type Bluetooth Low Energy comparé à la consommation en énergie du Bluetooth classique. Figure 1 Un RaspberryPi permet de faire la liaison entre les appareils mobiles et le serveur distant comme illustre la figure 1. On s occupera dans un premier temps de la communication entre le RaspberryPi et le(s) mobile(s) apparié(s). CHALONO Kévin Page 3
b) Cahier des charges Implémenter une balise Bluetooth Low Energy («BLE») avec la fonctionnalité «ibeacon» Détecter les appareils BLE environnant un appareil mobile («sniff») Réussir à faire l identification d utilisateur à travers une connexion entre un appareil mobile et un RaspberryPi (RPi) avec la remontée de données Automatiser le lancement de l application sans intervention de l utilisateur Pouvoir connecter plusieurs utilisateurs à la fois sur un même appareil «BLE» Envoyer des données de tailles quelconques en vue d un transfert de fichiers multimédias CHALONO Kévin Page 4
II) Développement sur la Raspberry Pi Figure : Vue RaspberryPi Le système d exploitation installé sur le RaspberryPi est Raspbian, qui est basé sur le système d exploitation Debian (Linux). La technologie sans fil Bluetooth est implémentée sur le RaspberryPi grâce au logiciel BlueZ qui est une stack Bluetooth pour le système d exploitation Linux. Pour établir la liaison entre le RPi et l appareil mobile, on utilise un adaptateur Bluetooth : dongle bluetooth 4.0. Afin de disposer d un véritable appareil BLE possédant des services et des caractéristiques, on installe le logiciel bleno qui est un module Nodejs. Avant de pouvoir utiliser ces différents éléments, il faut installer au préalable des librairies et des logiciels. a) Accès au terminal Raspbian Une fois le système d exploitation installé, on peut se connecter sur le RaspberryPi avec le logiciel Putty. On utilise une connexion de type SSH à travers le port Ethernet disponible sur le RPi. Comme l illustre la figure 2 ci-dessous, on spécifie l adresse de l appareil dans le réseau local : CHALONO Kévin Page 5
Figure 2 CHALONO Kévin Page 6
b) Installation des librairies nécessaires Avant de pouvoir faire fonctionner le RaspberryPi en tant qu appareil BLE, on installe les librairies libusb-dev, libdbus-1-dev, libglib2.0-dev, libudev-devlibical-dev et libreadline-dev : sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev Ensuite, on peut télécharger la dernière version de la stack Bluez avec la commande : sudo wget www.kernel.org/pub/linux/bluetooth/bluez-5.11.tar.xz Une fois l archive téléchargée, on la décompresse et on l installe à l aide des commandes suivantes : sudo unxz bluez-5.11.tar.xz sudo tar xvf bluez-5.11.tar cd bluez-5.11 sudo./configure --disable-systemd sudo make sudo make install À ce stade, on peut déjà activer le dongle et émettre des trames Bluetooth Low Energy, comme l illustre la figure 3 ci-dessous. Figure 3 CHALONO Kévin Page 7
c) Installation de Nodejs et bleno Avant de pouvoir utiliser le module bleno, il faut au préalable installer la plateforme logicielle Nodejs. wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-arm-pi.tar.gz tar -xvzf node-v0.10.28-linux-arm-pi.tar.gz On peut désormais implémenter des services sur le RaspberryPi à travers le programme beaconlauncher.js (voir ANNEXE) et accéder à ces services avec un appareil mobile. Ce programme faisant office de serveur GATT. Figure 4 On remarque que le programme active le mode Advertising, c est-à-dire que le RaspberryPi est visible et un appareil mobile peut se connecter dessus avec une application adaptée. On détaillera la manière dont l utilisateur interagit avec l application pour se connecter au serveur. Pour l instant, on suppose que l utilisateur soumet une demande de connexion au serveur et que celui-ci l accepte. Figure 5 CHALONO Kévin Page 8
Sur la figure 5, le serveur a accepté la demande de connexion du périphérique dont on peut voir l adresse et le RSSI qui correspond au niveau de puissance du signal de connexion. Une fois la connexion établie, on peut envoyer des données vers le RPi. On détaillera dans la partie suivante comment l utilisateur s y prend pour envoyer ses données vers le RPi. On a choisi ici d envoyer 20 fois le caractère a vers le serveur. Figure 6 L écriture se conclut par un Acknowledgement de réception du côté RaspberryPi. CHALONO Kévin Page 9
d) Notion de serveur GATT et ATT ATT (Attribute Protocol) est un protocole de communication dont la trame est composée des champs suivants (voir figure 7) préambule (1 octet ) access adress (4 octets ) Advertising header (1 octet ) payload lenght (1 octet ) Advertiser Adress (6 octets ) Advertiser Adress (6 octets ) payload (31 octets) crc (3 octets) Figure 7 Le serveur GATT (Generic Attribute Profile) est construit sur la base du protocole de communication ATT et établie des opérations et un environnement de travail pour le transport et le stockage des données par le protocole ATT. Le serveur GATT définie deux rôles : Client Serveur Les rôles GATT ne sont pas nécessairement liés à un rôle GAP (Generic Access Profile) et ils peuvent être définies dans des couches plus hautes du profile. GATT et ATT ne sont pas sensibles à la couche transport et peuvent aussi être utilisés pour le Bluetooth classique et le Bluetooth Low Energy. Il est cependant indispensable pour utiliser le Bluetooth LE car c est le serveur GATT qui se charge de découvrir les services. Le serveur GATT sauvegarde les données sur la couche ATT et acceptent les requêtes, commandes et confirmations ATT venant du client GATT. Les périphériques sont vus comme des services et caractéristiques. Les services peuvent contenir une collection de caractéristiques. La figure 8 reprend visuellement les explications ci-dessus CHALONO Kévin Page 10
profile services caractéristiques propriétés valeurs descripteurs Figure 8 Ainsi une caractéristique est une valeur au sein d un service. Elle est définie par des propriétés qui montrent comment on accède à ces dernières valeurs et un descripteur qui décrit la valeur. CHALONO Kévin Page 11
III) Développement de l application mobile L application mobile est une application Android développée sous le logiciel Android Studio. Elle permet de détecter tous les périphériques Bluetooth Low Energy environnant l appareil mobile. Lors de la sélection de l un de ces périphériques, on peut se connecter dessus et découvrir les services et caractéristiques disponibles dessus. Comme les caractéristiques possèdent des propriétés en lecture ou en écriture, on peut par conséquent, au sein de l application, lire ces caractéristiques mais aussi écrire sur ces caractéristiques. Le but étant bien sûr de détecter le RaspberryPi pour ensuite se connecter dessus et enfin envoyer des données vers celui-ci lors de l opération d écriture. Des tests (bench) de rapidité d envoi des données ont été effectués. Une fonctionnalité de lancement automatique de l application avec notification a été implémentée. a) Détection d appareils BLE Pour tester que la détection d appareils «Bluetooth Low Energy» fonctionne correctement, nous avons testé avec des balises beacons de la marque «Gimbal» que l on a commandé gratuitement en ligne, mais aussi en exécutant le programme beaconlauncher.js sur le RPi pour que ce dernier se comporte comme un appareil BLE. Figure 9 : Gimbal beacon CHALONO Kévin Page 12
Voici une vue de ce que l on obtient : Avant Après b) Connexion au serveur et découverte des services Nous pouvons désormais nous connecter sur le RPi. Lors du clic sur «RaspberryPi», nous obtenons la vue suivante : CHALONO Kévin Page 13
On y voit l adresse Bluetooth du dongle connecté sur le RPi et l état de la connexion. Plus bas, on aperçoit, les services «Device Information Service» et «Raspberry Service». Le premier étant un service par défaut de l appareil, le second correspond au service lancé depuis le programme beaconlauncher.js sur le RPi. On peut remarquer quatre caractéristiques avec des propriétés différentes au sein de ce service. Lors du clic sur l une de ces caractéristiques, un bouton Read ou un bouton Write apparaît selon la propriété que possède la caractéristique sélectionnée. Sélection de la caractéristique1 Sélection de la caractéristique3 CHALONO Kévin Page 14
Voici ce que l on obtient après l appui sur ces boutons : Appui sur le bouton «Read» Appui sur le bouton «Write» Lors de l appui sur Read, la valeur affectée à la caractéristique est affichée sur l écran : ici on peut lire «armagan» (on peut également lire sa valeur en hexadécimal). Lors de l appui sur le bouton Write, une fenêtre de dialogue s ouvre où l utilisateur peut renseigner son nom et prénom et les envoyer vers le RPi par l intermédiaire du bouton Envoyer. Voici ce que l on obtient lors de la saisie et de l envoie : CHALONO Kévin Page 15
c) Lancement automatisé de l application Le principe consiste à mettre en arrière-plan l application de façon à ce qu elle écoute par tranche de période (cette période peut être modifiée dans l application) les transmissions de paquets Bluetooth Low Energy des appareils environnant. On souhaite lancer l application seulement lorsqu un appareil BLE qui nous intéresse est à portée. Dans ce cas, nous fixons dans l application l identifiant unique (UUID : Universally Unique Identifier) correspondant à cet appareil et lorsque cet identifiant est capturé lors de l écoute, l appareil mobile vibre, l application est lancée automatiquement et l utilisateur reçoit une notification. Cependant cette fonctionnalité présentant encore des défauts de fonctionnement, une explication de mise en marche de l application et un bouton d accès direct à la vue d analyse d appareils ont été implémentés pour ne pas perturber l utilisation principale de l application. Vue d explication et d accès direct aux fonctionnalités principales Notification lors de la détection de l appareil BLE, ici le RaspberryPi CHALONO Kévin Page 16
d) Bench L application prévoit aussi de faire des tests d écriture sur le serveur elle mesure la vitesse d écriture sur celui-ci. Par défaut la taille des données est formatée à 20 octets. Elle peut être changée mais la taille des données ne peut excéder 31 octets. Pour faire des tests de rapidité il faut envoyer un grand nombre d octets sur le RaspberryPi puis diviser par le temps que met celle-ci à recevoir les données. On obtient alors une moyenne qui se stabilise autour de 7 octets/ms lorsque l on envoie de grand volume de données. Figure 10 Pour envoyer un nombre important de données, il faut découper le flux en plusieurs paquets. La taille de ces paquets étant fixée à 20 par défaut (la taille maximum du champ de donnée dans la trame). CHALONO Kévin Page 17
IV) Objectifs prévisionnels La connexion entre l appareil mobile et l appareil BLE étant établie, il faut désormais envoyer des informations utiles au serveur afin de réaliser des opérations d identification d utilisateurs et offrir à l utilisateur des outils pour agir avec son environnement. De plus, la multi-connexion sur le server GATT ne semble pas possible, il faut trouver un moyen pour contourner ce problème afin de gérer plusieurs utilisateurs à la fois. Il serait également intéressant de faire un bench en lecture pour déterminer le temps de lecture d une donnée de taille importante. Récapitulatif : Gérer la multi-connexion au serveur Gérer l identification d utilisateurs et offrir des outils d interaction pour l utilisateur Réaliser un bench en lecture Trouver un moyen de stocker les données envoyées vers le serveur Pouvoir transmettre du multimédia CHALONO Kévin Page 18
Nous avons réussi à répondre à plusieurs points du cahier des charges notamment l établissement de la connexion entre les appareils avec échange de données tout en démarrant l application mobile automatiquement. Nous espérons pouvoir répondre aux points restants (l identification d utilisateurs, la multiconnexion ) dans le temps imparti au projet. Cette première partie de projet a été l occasion pour nous de découvrir de façon plus précise la technologie «Bluetooth Low Energy». Elle nous aura également permis de découvrir la programmation mobile d applications avec le langage Java Android et ainsi élargir nos compétences en programmation. Nous avons rencontrés des difficultés au niveau de la compréhension de la programmation Android car nous n en avions jamais fait auparavant. La notion de serveur GATT puis son installation sur le RaspberryPi nous a également pris beaucoup de temps. CHALONO Kévin Page 19
ANNEXE ANNEXE1: beaconlauncher.js CHALONO Kévin Page 20
CHALONO Kévin Page 21
CHALONO Kévin Page 22
Bibliographie https://learn.adafruit.com/introduction-to-bluetooth-low-energy/gatt http://www.digikey.com/en/articles/techzone/2011/aug/comparing-low-power-wireless-technologies https://github.com/radiusnetworks/bluetooth-crash-resolver http://altbeacon.org/examples/ http://blog.cmgresearch.com/2014/05/18/raspberry-pi-btle-device/ http://developer.android.com/guide/topics/connectivity/bluetooth.html CHALONO Kévin Page 23