Utilisation du Bluetooth Low Energy
Remonter à Utilisation du Bluetooth
Puisque "Bluetooth Core Specification" définit depuis la version 4.0 différents types de protocoles "Bluetooth", tels que Bluetooth Low Energy, le protocole Bluetooth original est désormais connu sous le terme "Classic Bluetooth".
Bluetooth Low Energy ou Smart Bluetooth fournit un nouvel environnement pour les périphériques qui transfèrent un petit volume de données et qui consomment moins d'énergie.
Pour implémenter la prise en charge du BluetoothLE pour les services standard dans vos applications :
- Placez un composant TBluetoothLE dans votre projet
- Découvrez des périphériques Bluetooth LE
- Découvrez et obtenez les services pour le périphérique
- Découvrez et obtenez les caractéristiques du service
- Lisez, écrivez ou abonnez-vous à une caractéristique
- Obtenez les informations à partir des données brutes
Sommaire
- 1 Prise en charge des plates-formes
- 2 Profils GATT (GENERIC ATTRIBUTE PROFILE)
- 3 Placement d'un composant TBluetoothLE
- 4 Découverte des périphériques
- 5 Services et caractéristiques
- 6 Serveur BluetoothLE
- 7 Profils non standard
- 8 Ajout de la prise en charge de l'exécution en arrière-plan sur iOS
- 9 Voir aussi
Prise en charge des plates-formes
Plate-forme | Bluetooth Low Energy | |
---|---|---|
Client | Serveur | |
Windows(*) |
8+ |
10+ (**) |
OS X |
10.7+ |
10.9+ |
iOS |
5+ |
6+ |
Android |
4.3+ |
5+ |
(*) Remarque : Windows Server ne prend pas Bluetooth en charge (voir General Bluetooth Support in Windows (EN)).
(**) Remarque : WinRT Bluetooth API prend en charge les données publicitaires de BLE au moyen du champ des données spécifiques au fabricant, mais elle n'implémente pas complètement les fonctionnalités du serveur GATT.
Profils GATT (GENERIC ATTRIBUTE PROFILE)
Les profils sont des définitions de haut niveau qui définissent comment utiliser des services standard dans vos applications. Par exemple, le profil Heart Rate (Fréquence cardiaque) est utilisé pour les applications d'entraînement physique ou de santé. Le périphérique serveur équipé d'un capteur de fréquence cardiaque expose le service Heart Rate standard pour que le client BluetoothLE découvre le service et commence à collecter des données, par exemple les bpm (battements par minute).
Le profil GATT est la combinaison de service + caractéristiques.
Pour plus d'informations sur les profils GATT, consultez la page officielle des spécifications GATT pour profils standard (EN).
Placement d'un composant TBluetoothLE
Utilisez le nouveau composant TBluetoothLE pour implémenter la fonctionnalité RTL BluetoothLE pour les applications serveur et client.
TBluetoothLE inclut l'unité System.Bluetooth dans votre application et appelle en interne TBluetoothLEManager.Current pour obtenir une instance de TBluetoothLEManager. TBluetoothLEManager
est la classe principale des communications Bluetooth Low Energy.
- Remarque :
TBluetoothLEManager.Current
renvoie toujours la même instance deTBluetoothLEManager
. Vous n'avez pas besoin de plusieurs instances deTBluetoothLEManager
.
Découverte des périphériques
BluetoothLE ne fonctionne pas comme Classic Bluetooth, vous n'avez pas besoin d'appairer les périphériques. Les clients BluetoothLE doivent découvrir les serveurs BluetoothLE.
Remarques :
- Les applications s'exécutant sur une plate-forme Windows inférieure à Windows 10 doivent appairer les périphériques avant la découverte des serveurs BluetoothLE. Pour de plus amples informations, voir Windows Bluetooth FAQ (EN).
- Les plates-formes de l'API WinRT pour Windows 10+ vous permettent d'analyser les périphériques sans avoir besoin de les appairer.
Utilisez la méthode DiscoverDevices pour découvrir des serveurs BluetoothLE.
procedure DoScan;
const
HeartRateService: TBluetoothUUID = '{0000180D-0000-1000-8000-00805F9B34FB}';
begin
BluetoothLE1.DiscoverDevices(2500) // The parameter is the timeout in milliseconds.
BluetoothLE1.DiscoverDevices(2500, [HRService]) // It only exposes devices with the Heart Rate service to the BluetoothLE client.
end;
Une fois la procédure terminée, l'événement OnEndDiscoverDevices est déclenché. Quand vous avez découvert le périphérique, vous pouvez commencer à obtenir les services et les caractéristiques du profil standard comme indiqué ci-dessous.
Utilisation des filtres d'analyse
La RTL fournit une implémentation de filtres d'analyse BLE qui bénéficie des nouvelles puces BLE basse consommation.
Vous pouvez rechercher des périphériques BLE spécifiques par le biais de filtres d'analyse indépendants personnalisés :
- Créez votre filtre sous forme de TBluetoothLEScanFilter.
- Spécifiez les champs par lesquels vous voulez trier vos périphériques.
- Facultativement, pour les périphériques utilisant des données spécifiques au fabricant (ManufacturerSpecificData) telles que les AltBeacons et iBeacons, vous pouvez utiliser la classe d'assistance TBeaconManufacturerDataHelper afin de définir un filtrage sur ces données. Transmettez ensuite le contenu de TBeaconManufacturerDataHelper au filtre.
- Enfin, ajoutez le filtre à la liste de filtres et commencez à découvrir des périphériques avec la nouvelle implémentation de StartDiscovery.
procedure DoScanWithFilter;
const
HeartRateService: TGUID = '{0000180D-0000-1000-8000-00805F9B34FB}';
var
ABLEAdvertisedDataFilter: TBluetoothLEScanFilter;
ABLEAdvertisedDataFilterList: TBluetoothLEScanFilterList;
begin
ABLEAdvertisedDataFilter:= TBluetoothLEScanFilter.Create;
ABLEAdvertisedDataFilterList:= TBluetoothLEScanFilterList.Create;
ABLEAdvertisedDataFilter.ServiceUUID:= HeartRateService;
ABLEAdvertisedDataFilterList.Add(ABLEAdvertisedDataFilter);
BluetoothLE1.CurrentManager.StartDiscovery(2500,ABLEAdvertisedDataFilterList);
end;
Services et caractéristiques
Découverte et obtention des services
Les services sont des collections de caractéristiques et de relations avec d'autres services qui encapsulent le comportement d'une partie d'un périphérique.
Un profil GATT inclut un ou plusieurs services standard qui sont identifiés par un numéro. Par exemple, le numéro officiel suivant a été attribué au service Heart Rate (Fréquence cardiaque) : "0x180D".
Vous trouverez des informations concernant les services standard sur la page officielle des services BluetoothLE standard (EN).
Pour obtenir un service, vous devez utiliser l'UUID complet, c'est-à-dire le numéro attribué au service standard + le code Bluetooth de base, par exemple le code complet du service Heart Rate est 0000180D-0000-1000-8000-00805F9B34FB
.
Utilisez la méthode DiscoverServices pour découvrir les services d'un périphérique particulier. Une fois les services découverts, l'événement OnServicesDiscovered est déclenché.
Quand vous avez découvert les services, vous devez les obtenir. Utilisez la méthode GetServices pour obtenir la liste des services d'un périphérique ou la méthode GetService pour obtenir un service particulier pour un périphérique.
Découverte et obtention des caractéristiques
Un service peut contenir une ou plusieurs caractéristiques qui fournissent des informations pour le service particulier. Chaque caractéristique est identifiée par un numéro officiel. Par exemple, le service Heart Rate possède une caractéristique permettant de mesurer la fréquence cardiaque, Heart Rate Measurement avec l'UUID 00002A37-0000-1000-8000-00805F9B34FB
, et une autre caractéristique permettant d'identifier l'emplacement du capteur corporel, Body Sensor Location avec l'UUID 00002A38-0000-1000-8000-00805F9B34FB
.
Utilisez la méthode GetCharacteristics pour obtenir la liste des caractéristiques d'un service particulier ou la méthode GetCharacteristic pour obtenir les informations d'une caractéristique particulière.
Lecture, écriture ou abonnement à une caractéristique
Quand vous avez obtenu la caractéristique en utilisant GetCharacteristic, vous pouvez lire ou écrire (le cas échéant) les informations contenues. Le gestionnaire d'événement OnCharacteristicRead est déclenché après la lecture de la caractéristique.
Pour obtenir la valeur en cours d'une caractéristique, utilisez la méthode ReadCharacteristic. Utilisez WriteCharacteristic pour écrire si cette option est disponible sur le serveur.
Vous pouvez également vous abonner à une caractéristique pour obtenir les informations chaque fois qu'elle change. Par exemple, pour commencer à surveiller le capteur de fréquence cardiaque, vous pouvez lire la valeur en cours avec la méthode GetCharacteristic, puis utiliser la méthode SubscribeToCharacteristic pour obtenir les informations quand elle change. Pour arrêter la surveillance, utilisez la méthode UnSubscribeToCharacteristic.
Traitement des données reçues
Le périphérique client reçoit un tableau de données du serveur. Pour traduire les données en informations lisibles, suivez la spécification sur le profil GATT. Par exemple, vous pouvez trouver les détails concernant les packages de données sur la page officielle de la caractéristique Heart Rate Measurement : Structure des packages de données de la caractéristique Heart Rate Measurement (EN).
Par exemple, pour la caractéristique Heart Rate Measurement, le premier octet contient des indicateurs avec des informations concernant les données transportées sur le package Bluetooth LE. Le bit 0
du champ Flags définit le format de la valeur Heart Rate : UINT8 ou UINT16. Selon le format, vous devez extraire le second octet du package de données ou les deuxième et troisième packages pour obtenir les bpm (battements par minute).
Serveur BluetoothLE
Pour créer un serveur qui expose ou publie des services standard :
- Placez un composant TBluetoothLE dans votre projet.
- Utilisez la méthode GetGattServer pour publier des services Bluetooth Low Energy.
- Utilisez la méthode CreateService de la classe TBluetoothGattServer pour créer le service en utilisant l'UUID standard.
- Utilisez la méthode CreateCharacteristic de la classe TBluetoothGattServer pour créer les caractéristiques du service en utilisant les UUID standard.
- Utilisez la méthode AddService pour ajouter le service au serveur Gatt.
- Le gestionnaire d'événement OnCharacteristicReadRequest est déclenché quand le serveur reçoit une requête de lecture du périphérique client.
- Le gestionnaire d'événement OnCharacteristicWriteRequest est déclenché quand le serveur reçoit une requête d'écriture du périphérique client.
Profils non standard
Vous pouvez créer des applications serveur et client en utilisant la technologie BluetoothLE sans avoir recours aux profils GATT, c'est-à-dire que vous pouvez créer vos propres services et caractéristiques pour une communication privée entre les périphériques serveur et client.
L'utilisation d'un profil non standard requiert un UUID 128 bits qui doit être généré de façon aléatoire.
Chaque périphérique Bluetooth LE se comportant comme un serveur GATT doit implémenter le service Generic Access (Accès générique) officiel avec les caractéristiques Device Name (nom du périphérique) et Appearance (apparence). Pour plus d'informations, consultez la page officielle : service Generic Access (EN).
Ajout de la prise en charge de l'exécution en arrière-plan sur iOS
Si votre application iOS requiert que des services continuent leur exécution en arrière-plan, vous devez spécifier avant de déployer votre application finale les valeurs de la clé UIBackgroundModesProject
dans la page Informations de version.
- Remarque : Si vous devez réveiller votre application lorsqu'un événement Bluetooth se produit, ajoutez les valeurs de chaînes suivantes à la clé
UIBackgroundModesProject
:bluetooth-central
: si votre application assume le rôle central.bluetooth-peripherical
: si votre application assume un rôle périphérique.
Pour plus d'informations, voir Core Bluetooth Background Processing for iOS Apps (EN).