Site : tvaira.free.fr

Bluetooth BLE

Introduction

Bluetooth est une norme de communications permettant l’échange bidirectionnel de données à très courte distance en utilisant des ondes radio UHF sur une bande de fréquence de 2,4 GHz.

BLE (Bluetooth Low Energy, Bluetooth à basse consommation ou Bluetooth à basse énergie) est une technique de transmission sans fil créée par Nokia en 2006 sous la forme d’un standard ouvert basé sur Bluetooth, qu’il complète mais sans le remplacer. Cette technologie est apparue en 2010 avec la sortie de la version 4.0 du Bluetooth Core Specification.

Comparé au Bluetooth, le BLE permet un débit du même ordre de grandeur (1 Mb/s) pour une consommation d’énergie 10 fois moindre. Cela permet d’intégrer cette technologie dans de nouveaux types d’équipements : montres, appareils de surveillance médicale ou capteurs pour sportifs.

Liens :

Depuis la version 4.0, on distingue le Bluetooth classic du smart (BLE) :

Protocoles

Le protocole BLE repose sur un certain nombre de couches :

S’inspirant de la spécification Bluetooth d’origine, le SIG Bluetooth définit plusieurs profils (spécifications de fonctionnement d’un appareil dans une application particulière) pour les appareils à faible consommation d’énergie. Les fabricants sont censés mettre en œuvre les spécifications appropriées pour leur appareil afin de garantir la compatibilité. Un périphérique peut contenir des implémentations de plusieurs profils. La majorité des profils d’application basse consommation actuels est basée sur le profil d’attribut générique (GATT), une spécification générale pour l’envoi et la réception de données courtes appelées attributs sur une liaison à faible énergie.

Les couches Generic Access Profile (GAP), Generic Attribute Protocol (GATT) et Attribute Protocol (ATT) sont essentielles dans l’échange de données :

  • GAP (Generic Access Profile) : elle est responsable de l’établissement du lien et du contrôle de connexion entre deux appareils. Le GAP est ce qui rend votre appareil visible au monde extérieur et détermine la manière dont deux appareils peuvent (ou ne peuvent pas) interagir. Le GAP définit différents rôles pour les appareils dont : les appareils centraux (central device) et les appareils périphériques (peripheral device).

  • GATT (Generic Attribute Profile) : il s’agit d’un ensemble de règles décrivant comment structurer, présenter et transférer des données. La structure définit les éléments de base, tels que les services et les caractéristiques, utilisés dans un profil.

  • ATT (Attribute Protocol) : L’ATT repose sur une relation client/serveur. Le serveur dispose des informations (telles que les valeurs des capteurs). Le client est celui qui veut accèder à ces informations. ATT permet à un serveur d’exposer à un client un ensemble d’attributs. Un attribut est une valeur associée aux trois propriétés suivantes: un type d’attribut défini par un UUID, un descripteur d’attribut et un ensemble d’autorisations.

Remarque : La couche LL (Link Layer) introduit les deux modes maître (master) et esclave (slave).

GAP

La couche GAP (Generic Access Profile) introduit 4 rôles : broadcaster, scanner (ou observer), peripheral et central.

Il y a deux types de communication : le mode dit connecté (peripheral <-> central) et le mode advertising (broadcaster -> scanner).

  • Le rôle broadcaster ne permet que l’émission des données en envoyant des paquets advertising. Ce rôle ne supporte pas le mode connecté.
  • Le rôle scanner ne permet que la réception des données diffusées par des paquets advertising. Ce rôle ne supporte pas le mode connecté.
  • Le rôle peripheral est destiné à des appareils qui supporte une (ou plusieurs) connexions. Un appareil peripheral a besoin d’un contrôleur esclave (slave).
  • Le rôle central supporte plusieurs connexions avec différents appareils Peripheral. Un appareil central est l’initiateur des connexions et nécessite un contrôleur maître (master).

Les appareils BLE sont détectés via une procédure basée sur la diffusion de paquets advertising. Ceci est fait en utilisant 3 canaux distincts, afin de réduire les interférences. Le dispositif advertising envoie un paquet sur au moins un de ces trois canaux, avec une période de répétition appelée advertising interval. Pour réduire le risque de plusieurs collisions consécutives, un délai aléatoire pouvant atteindre 10 millisecondes est ajouté à chaque advertising interval. Le scanner écoute le canal pendant une durée appelée scan window, qui se répète périodiquement à chaque intervalle de scrutation (scan interval). La latence de découverte est donc déterminée par un processus probabiliste et dépend des trois paramètres (advertising interval, scan interval et scan window).

GATT et ATT

GATT (Generic Attribute Profile) est une méthode de présentation de données utilisée par les périphériques BLE.

La communication est basée sur les rôles suivants :

  • Client : Un périphérique qui lance des commandes et des requêtes GATT et accepte des réponses, par exemple un ordinateur ou un smartphone.
  • Serveur : Un périphérique qui reçoit des commandes et des demandes du GATT, et renvoie des réponses, par exemple un capteur de température.

La spécification Bluetooth Core définit un service comme un ensemble de données et de comportements associés permettant d’accomplir une fonction ou une fonctionnalité particulière. Un service peut contenir des caractéristiques obligatoires et des caractéristiques facultatives. Par exemple, le service de thermomètre médical comprend des caractéristiques pour une valeur de mesure de température et un intervalle de temps entre les mesures.

Remarque : Le groupement Bluetooth SIG a prédéfini certains services mais il est aussi possible de créer des services personnalisés.

La spécification Bluetooth Core définit une caractéristique comme une valeur utilisée dans un service, ainsi que des propriétés et des informations de configuration sur le mode d’accès à la valeur et sur le mode d’affichage ou de représentation de la valeur. C’est une valeur de données transférée entre le client et le serveur, par exemple la tension actuelle de la batterie. Les paramètres de sécurité, les unités et autres métadonnées sont également encapsulés dans les caractéristiques.

Un descripteur fournit des informations supplémentaires sur une caractéristique. Par exemple, une caractéristique de valeur de température peut avoir une indication de ses unités (par exemple Celsius) et des valeurs maximales et minimales que le capteur peut mesurer. Les descripteurs sont facultatifs - chaque caractéristique peut avoir un nombre quelconque de descripteurs.

Liens :

Les services, les caractéristiques et les descripteurs sont appelés attributs. Ils sont identifiés par des UUID. On peut choisir un UUID aléatoire ou pseudo-aléatoire pour des utilisations propriétaires, mais une plage d’UUID (de la forme xxxxxxxx-0000-1000-8000-00805F9B34FB) a été réservée pour les attributs standards. Pour plus d’efficacité, ces identificateurs sont représentés par des valeurs de 16 bits ou de 32 bits dans le protocole, plutôt que par les 128 bits requis pour un UUID complet. Par exemple, le service d’informations sur le périphérique (Device Information) a le code abrégé 0x180A, plutôt que 0000180A-0000-1000-… Voir la liste complète. Les UUID de 128 bits, sont ceux utilisés pour créer ses propres services et caractéristiques personnalisés.

Il existe un certain nombre de commandes permettant au client de découvrir des informations sur le serveur :

  • Découvrir les UUID pour tous les services
  • Trouver un service avec un UUID donné
  • Découvrir toutes les caractéristiques d’un service donné
  • Rechercher des caractéristiques correspondant à un UUID donné
  • Lire tous les descripteurs pour une caractéristique particulière

Des commandes sont également fournies pour lire (transfert de données du serveur vers le client) et écrire (du client vers le serveur) les valeurs des caractéristiques.

Enfin, le GATT offre des notifications et des indications. Le client peut demander une notification pour une caractéristique particulière du serveur. Le serveur peut alors envoyer la valeur au client dès qu’il est disponible. Par exemple, un serveur de capteur de température peut avertir son client chaque fois qu’il prend une mesure. Cela évite au client de devoir interroger le serveur, ce qui nécessiterait que le circuit radio du serveur soit constamment opérationnel.

Une indication est similaire à une notification, sauf qu’elle nécessite une réponse du client, confirmant qu’elle a bien reçu le message.

Exemple

Le groupement Bluetooth SIG a défini un service appelé service de fréquence cardiaque (heart rate). Les montres de ce type utilisent généralement au moins deux services :

  • Un service de fréquence cardiaque qui encapsule trois caractéristiques:
    • Caractéristique obligatoire de mesure de la fréquence cardiaque contenant la valeur de la fréquence cardiaque.
    • Une caractéristique facultative d’emplacement du capteur corporel.
    • Une caractéristique conditionnelle du point de contrôle de la fréquence cardiaque.
  • Un service de batterie :
    • Caractéristique obligatoire du niveau de la batterie.

Le concept du GATT est de regrouper les attributs dans une table d’attributs dans un ordre spécifique et logique. Le profil de fréquence cardiaque présenté dans le tableau ci-dessous est un exemple : chaque ligne est un attribut et chaque attribut a un descripteur, un type, un ensemble d’autorisations et une valeur.

Au sommet de chaque groupe, il y a toujours un attribut de déclaration de service. L’UUID standard pour les déclarations de service est 0x2800. La valeur est un autre UUID définissant le type de service concerné : ici la valeur 0x180D qui est l’UUID défini par le groupement Bluetooth SIG pour le service de fréquence cardiaque. Cet exemple est détaillé ici.

La caractéristique de mesure de la fréquence cardiaque a l’UUID 0x2A37.

Les valeurs de la caractéristique “Emplacement du capteur corporel” (Body Sensor Location) sont disponibles : ici

Tests sous Linux

Utilisation d’un dongle USB Bluetooth : Inateck Nano Bluetooth V4.0 (CSR8510).

Prise en charge matériel :

$ dmesg
[347235.128548] usb 3-10.1: new full-speed USB device number 24 using xhci_hcd
[347235.177526] usb 3-10.1: New USB device found, idVendor=0a12, idProduct=0001
[347235.177535] usb 3-10.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[347235.177541] usb 3-10.1: Product: CSR8510 A10
[347235.246735] usbcore: registered new interface driver btusb

$ lsusb 
...
Bus 003 Device 024: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

$ dpkg --status bluez | grep '^Version:'
Version: 5.48-0ubuntu3.1

Les outils de test sous Linux ont déjà été présenté dans ce document : Mise en oeuvre du Bluetooth

$ hciconfig
hci0:   Type: Primary  Bus: USB
    BD Address: 00:1A:7D:DA:71:13  ACL MTU: 310:10  SCO MTU: 64:8
    UP RUNNING PSCAN ISCAN 
    RX bytes:1148408 acl:478 sco:0 events:46787 errors:0
    TX bytes:108846 acl:467 sco:0 commands:10191 errors:0

$ bluetoothctl 
[NEW] Controller 00:1A:7D:DA:71:13 sedatech [default]
Agent registered
[bluetooth]# help
...

$ hcitool --help | grep LE
    lescan  Start LE scan
    leinfo  Get LE remote information
    lewladd Add device to LE White List
    lewlrm  Remove device from LE White List
    lewlsz  Read size of LE White List
    lewlclr Clear LE White List
    lerladd Add device to LE Resolving List
    lerlrm  Remove device from LE Resolving List
    lerlclr Clear LE Resolving List
    lerlsz  Read size of LE Resolving List
    lerlon  Enable LE Address Resolution
    lerloff Disable LE Address Resolution
    lecc    Create a LE Connection
    ledc    Disconnect a LE Connection
    lecup   LE Connection Update

$ sudo gatttool --help-gatt
Usage:
  gatttool [OPTION?]

GATT commands
  --primary                                 Primary Service Discovery
  --characteristics                         Characteristics Discovery
  --char-read                               Characteristics Value/Descriptor Read
  --char-write                              Characteristics Value Write Without Response (Write Command)
  --char-write-req                          Characteristics Value Write (Write Request)
  --char-desc                               Characteristics Descriptor Discovery
  --listen                                  Listen for notifications and indications
  -I, --interactive                         Use interactive mode

Remarque : La pile de protocoles Bluetooth nécessite des droits root (hcitool lescan par exemple). Il est possible d’affecter ces capacités à un programme :

$ sudo apt-get install libcap2-bin

$ sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`

N’ayant pas encore de montre connectée, les tests ont été réalisés avec le Flower Power (Parrot) :

$ sudo hcitool lescan
LE Scan ...
A0:14:3D:0C:8E:91 Flower power 8E91
...

$ sudo hcitool lecc A0:14:3D:0C:8E:91
Connection handle 70

$ hcidump -X
HCI sniffer - Bluetooth packet analyzer ver 2.2
device: hci0 snap_len: 1028 filter: 0xffffffffffffffff
> HCI Event: Command Status (0x0f) plen 4
    LE Create Connection (0x08|0x000d) status 0x00 ncmd 1
> HCI Event: Command Status (0x0f) plen 4
    Read Remote Version Information (0x01|0x001d) status 0x00 ncmd 1
> HCI Event: Read Remote Ver Info Complete (0x0c) plen 8
    status 0x00 handle 70
    LMP Version: 4.0 (0x6) LMP Subversion: 0x130
    Manufacturer: Texas Instruments Inc. (13)

$ hcidump -R
HCI sniffer - Bluetooth packet analyzer ver 2.2
device: hci0 snap_len: 1028 filter: 0xffffffffffffffff
> 0000: 04 0e 04 01 0b 20 00                              ..... .
> 0000: 04 0e 04 01 0c 20 00                              ..... .
> 0000: 04 0e 04 01 0c 20 00                              ..... .

$ sudo hcitool ledc 70

$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 --primary
attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0010, end grp handle: 0x0022 uuid: 0000180a-0000-1000-8000-00805f9b34fb
attr handle: 0x0023, end grp handle: 0x0041 uuid: 39e1fa00-84a8-11e2-afba-0002a5d5c51b
attr handle: 0x0042, end grp handle: 0x0045 uuid: 0000180f-0000-1000-8000-00805f9b34fb
attr handle: 0x0046, end grp handle: 0x005e uuid: 39e1fc00-84a8-11e2-afba-0002a5d5c51b
attr handle: 0x005f, end grp handle: 0x006d uuid: 39e1fb00-84a8-11e2-afba-0002a5d5c51b
attr handle: 0x006e, end grp handle: 0x0071 uuid: 39e1fd00-84a8-11e2-afba-0002a5d5c51b
attr handle: 0x0072, end grp handle: 0x007e uuid: 39e1fe00-84a8-11e2-afba-0002a5d5c51b
attr handle: 0x007f, end grp handle: 0xffff uuid: f000ffc0-0451-4000-b000-000000000000

$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 --characteristics
handle: 0x0002, char properties: 0x0e, char value handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb
handle: 0x0006, char properties: 0x0a, char value handle: 0x0007, uuid: 00002a02-0000-1000-8000-00805f9b34fb
handle: 0x0008, char properties: 0x0a, char value handle: 0x0009, uuid: 00002a03-0000-1000-8000-00805f9b34fb
handle: 0x000a, char properties: 0x02, char value handle: 0x000b, uuid: 00002a04-0000-1000-8000-00805f9b34fb
handle: 0x000d, char properties: 0x20, char value handle: 0x000e, uuid: 00002a05-0000-1000-8000-00805f9b34fb
handle: 0x0011, char properties: 0x02, char value handle: 0x0012, uuid: 00002a23-0000-1000-8000-00805f9b34fb
handle: 0x0013, char properties: 0x02, char value handle: 0x0014, uuid: 00002a24-0000-1000-8000-00805f9b34fb
handle: 0x0015, char properties: 0x02, char value handle: 0x0016, uuid: 00002a25-0000-1000-8000-00805f9b34fb
handle: 0x0017, char properties: 0x02, char value handle: 0x0018, uuid: 00002a26-0000-1000-8000-00805f9b34fb
handle: 0x0019, char properties: 0x02, char value handle: 0x001a, uuid: 00002a27-0000-1000-8000-00805f9b34fb
handle: 0x001b, char properties: 0x02, char value handle: 0x001c, uuid: 00002a28-0000-1000-8000-00805f9b34fb
handle: 0x001d, char properties: 0x02, char value handle: 0x001e, uuid: 00002a29-0000-1000-8000-00805f9b34fb
handle: 0x001f, char properties: 0x02, char value handle: 0x0020, uuid: 00002a2a-0000-1000-8000-00805f9b34fb
handle: 0x0021, char properties: 0x02, char value handle: 0x0022, uuid: 00002a50-0000-1000-8000-00805f9b34fb
handle: 0x0024, char properties: 0x12, char value handle: 0x0025, uuid: 39e1fa01-84a8-11e2-afba-0002a5d5c51b
handle: 0x0028, char properties: 0x12, char value handle: 0x0029, uuid: 39e1fa02-84a8-11e2-afba-0002a5d5c51b
handle: 0x002c, char properties: 0x12, char value handle: 0x002d, uuid: 39e1fa03-84a8-11e2-afba-0002a5d5c51b
handle: 0x0030, char properties: 0x12, char value handle: 0x0031, uuid: 39e1fa04-84a8-11e2-afba-0002a5d5c51b
handle: 0x0034, char properties: 0x12, char value handle: 0x0035, uuid: 39e1fa05-84a8-11e2-afba-0002a5d5c51b
handle: 0x0038, char properties: 0x0a, char value handle: 0x0039, uuid: 39e1fa06-84a8-11e2-afba-0002a5d5c51b
handle: 0x003b, char properties: 0x0a, char value handle: 0x003c, uuid: 39e1fa07-84a8-11e2-afba-0002a5d5c51b
handle: 0x003e, char properties: 0x12, char value handle: 0x003f, uuid: 39e1fa08-84a8-11e2-afba-0002a5d5c51b
handle: 0x0043, char properties: 0x12, char value handle: 0x0044, uuid: 00002a19-0000-1000-8000-00805f9b34fb
handle: 0x0047, char properties: 0x02, char value handle: 0x0048, uuid: 39e1fc01-84a8-11e2-afba-0002a5d5c51b
handle: 0x004b, char properties: 0x02, char value handle: 0x004c, uuid: 39e1fc02-84a8-11e2-afba-0002a5d5c51b
handle: 0x004f, char properties: 0x0a, char value handle: 0x0050, uuid: 39e1fc03-84a8-11e2-afba-0002a5d5c51b
handle: 0x0053, char properties: 0x02, char value handle: 0x0054, uuid: 39e1fc04-84a8-11e2-afba-0002a5d5c51b
handle: 0x0057, char properties: 0x02, char value handle: 0x0058, uuid: 39e1fc05-84a8-11e2-afba-0002a5d5c51b
handle: 0x005b, char properties: 0x02, char value handle: 0x005c, uuid: 39e1fc06-84a8-11e2-afba-0002a5d5c51b
handle: 0x0060, char properties: 0x10, char value handle: 0x0061, uuid: 39e1fb01-84a8-11e2-afba-0002a5d5c51b
handle: 0x0064, char properties: 0x12, char value handle: 0x0065, uuid: 39e1fb02-84a8-11e2-afba-0002a5d5c51b
handle: 0x0068, char properties: 0x0a, char value handle: 0x0069, uuid: 39e1fb03-84a8-11e2-afba-0002a5d5c51b
handle: 0x006b, char properties: 0x0a, char value handle: 0x006c, uuid: 39e1fb04-84a8-11e2-afba-0002a5d5c51b
handle: 0x006f, char properties: 0x02, char value handle: 0x0070, uuid: 39e1fd01-84a8-11e2-afba-0002a5d5c51b
handle: 0x0073, char properties: 0x02, char value handle: 0x0074, uuid: 39e1fe01-84a8-11e2-afba-0002a5d5c51b
handle: 0x0076, char properties: 0x02, char value handle: 0x0077, uuid: 39e1fe02-84a8-11e2-afba-0002a5d5c51b
handle: 0x0079, char properties: 0x0a, char value handle: 0x007a, uuid: 39e1fe03-84a8-11e2-afba-0002a5d5c51b
handle: 0x007c, char properties: 0x02, char value handle: 0x007d, uuid: 39e1fe04-84a8-11e2-afba-0002a5d5c51b
handle: 0x0080, char properties: 0x0e, char value handle: 0x0081, uuid: f000ffc1-0451-4000-b000-000000000000
handle: 0x0083, char properties: 0x0e, char value handle: 0x0084, uuid: f000ffc2-0451-4000-b000-000000000000

$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 -I
[   ][A0:14:3D:0C:8E:91][LE]> connect
[CON][A0:14:3D:0C:8E:91][LE]> char-read-uuid 2A19
handle: 0x0044   value: 64
// 64 -> 100 %

[CON][A0:14:3D:0C:8E:91][LE]> char-read-uuid 2A26
handle: 0x0018   value: 32 30 31 33 2d 31 31 2d 32 37 5f 68 61 77 61 69 69 2d 31
                        2  0  1  3  -  1  1  -  2  7  _  h  a  w  a  i  i  .  1 
                        
[CON][A0:14:3D:0C:8E:91][LE]> disconnect
[   ][A0:14:3D:0C:8E:91][LE]>

// 0xFA02 Soil EC
// char value handle: 0x0029, uuid: 39e1fa02-84a8-11e2-afba-0002a5d5c51b
$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 --char-read --handle=0x0029
Characteristic value/descriptor: 00 00

// 0xFA03 Soil Temp
// char value handle: 0x002d, uuid: 39e1fa03-84a8-11e2-afba-0002a5d5c51b
$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 --char-read --handle=0x002D
Characteristic value/descriptor: dc 02
// 02DC -> 732

// 0xFA04 Air Temp
// char value handle: 0x0031, uuid: 39e1fa04-84a8-11e2-afba-0002a5d5c51b
$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 --char-read --handle=0x0031
Characteristic value/descriptor: d5 02
// 02D5 -> 725

// 0xFA05 Soil VWC
// char value handle: 0x0035, uuid: 39e1fa05-84a8-11e2-afba-0002a5d5c51b
$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 --char-read --handle=0x0035
Characteristic value/descriptor: 9c 00

// 0x2A00 Name UTF8 String 
// char value handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb
$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 --char-read --handle=0x0003
Characteristic value/descriptor: 46 6c 6f 77 65 72 20 70 6f 77 65 72 20 38 45 39 31
                                 F  l  o  w  e  r     p  o  w  e  r     8  E  9  1

// The LED of the FlowerPower device is controlled by the characteristic which UUID is 0xFA07 : 
// -­‐ Writing 1 on the LED state (0xFA07) characteristic value turns the LED on.   
// -­‐ Writing 0 on the LED state (0xFA07) characteristic value turns the LED off.  
// Note : that the LED is automatically turned off when the device is disconnected.
// char value handle: 0x003c, uuid: 39e1fa07-84a8-11e2-afba-0002a5d5c51b
$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 --char-write-req --value=01 --handle=0x003c --listen

$ sudo gatttool -i hci0 -b A0:14:3D:0C:8E:91 --char-read --handle=0x003C

Mise en oeuvre

ESP32

L’ESP32 est un microcontrôleur intégrant notamment le WiFi et le Bluetooth.

Activité : Mise en oeuvre du Bluetooth BLE sur ESP32

Arduino/Genuino 101

L’Arduino/Genuino 101 embarque deux cœurs de 32 bits (un x86 Quark et un 32-bit ARC) sous la forme d’un SoC Curie d’Intel à 32 MHz. Elle possède un accéléromètre/gyroscope à 6 axes et un module radio Bluetooth Low Energy (BLE).

Liens :

Avec la bibliothèque CurieBLE, il est possible d’utiliser les fonctionnalités BLE de l’Arduino/Genuino 101.

Exemples :

Raspberry Pi

Le Raspberry Pi 3 dispose d’une puce Wifi et Bluetooth 4.x intégrée et prend donc en charge la technologie Bluetooth Low Energy (BLE).

Lien : Getting Started

$ sudo hciconfig
hci0:   Type: BR/EDR  Bus: UART
    BD Address: 5C:31:3E:28:50:92  ACL MTU: 1021:6  SCO MTU: 180:4
    UP RUNNING PSCAN 
    RX bytes:636 acl:0 sco:0 events:39 errors:0
    TX bytes:994 acl:0 sco:0 commands:39 errors:0

On peut utiliser la Raspberry Pi 3 soit comme un central device (client GATT) soit comme un peripheral device (serveur GATT). Dans le cas d’un appareil périphérique (peripheral device), on pourra gérer l’advertising de la manière suivante :

// Activer l'advertising :
$ sudo hciconfig hci0 leadv 0

// Désactiver l'advertising :
$ sudo hciconfig hci0 noleadv

Qt5

L’API Qt Bluetooth Low Energy a été introduite dans Qt 5.4. Depuis Qt 5.5, cette partie de l’API est définitive et une garantie de compatibilité est donnée pour les versions futures. Depuis Qt 5.7, une API supplémentaire prenant en charge le rôle de périphérique a été ajoutée, avec le backend implémenté pour Linux/BlueZ, iOS et macOS.

Activités :

 Android

Android 4.3 (API de niveau 18) introduit le support pour le Bluetooth Low Energy (BLE) dans le rôle central et fournit des API que les applications peuvent utiliser pour découvrir des périphériques, rechercher des services et transmettre des informations.

Activité : Mise en oeuvre du Bluetooth BLE sous Android

Retour au sommaire