Utilisation des beacons

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation du Bluetooth


Un beacon (ou balise) est un périphérique Bluetooth Low Energy. Il intègre des informations dans ses données publicitaires, en particulier les données spécifiques au fabricant ("Manufacturer Specific Data") décrites dans "Bluetooth Specification Version 4.1, page 2023 (EN)" https://www.bluetooth.org/en-us. Grâce à ces informations, n'importe quel périphérique Bluetooth Low Energy se trouvant à proximité peut identifier le beacon et calculer la distance qui les sépare, sans qu'il soit nécessaire de les appairer ni d'établir une connexion.

Présentation des beacons

Types de beacons

Les deux formats de beacons disponibles sont iBeacon et AltBeacon :

  • iBeacon : c'est le format défini par Apple. Pour l'API RTL, l'iBeacon est considéré comme le mode standard.
  • AltBeacon : il s'agit d'un format ouvert, connu sous le nom de beacon alternatif. Vous trouverez les spécifications complètes sur http://altbeacon.org (EN). Pour l'API RTL, le beacon alternatif est considéré comme le mode alternatif.

Vous devez connaître le format utilisé pour le beacon que vous souhaitez surveiller.

Informations sur le fabricant

Les périphériques Bluetooth Low Energy en mode publicité envoient à maintes reprises les données publicitaires par voie radio sous la forme de différentes structures de type AD. L'un des types AD des données publicitaires est le type "Manufacturer Specific Data" qui est utilisé par les beacons. Les données incluses dans le type "Manufacturer Specific Data" fournies par l'API RTL des beacons sont les suivantes :

  • UUID : un identificateur unique qui identifie un groupe de beacons, par exemple les beacons d'une entreprise spécifique.
  • MajorID, MinorID : identifie les régions au sein d'un UUID spécifique. MajorID identifie une sous-région au sein d'une région plus étendue définie par un UUID. MinorID spécifie une sous-division supplémentaire au sein d'un MajorID.
  • TxPower : TxPower est la puissance mesurée à 1 mètre de distance. La distance approximative d'un beacon est calculée à l'aide de TxPower et du RSSI (Received Signal Strength Indicator).

Prise en charge des plates-formes

Plate-forme Prise en charge ?

Windows

Mac OS X

10.7+

iOS

5+

Android

4.3+

L'API RTL des beacons n'est pas disponible pour la plate-forme Windows car les données publicitaires ne sont pas accessibles.

Mode d'emploi des beacons

L'API RTL des beacons vous permet d'obtenir la distance entre le périphérique qui utilise votre application et les beacons environnants. L'API RTL des beacons fournit des informations uniquement pour les beacons se trouvant dans la région définie. La région est un groupe de beacons dont les UDID, MajorID et MinorID sont spécifiés.

Obtention d'une instance de TBeaconManager

Pour utiliser l'API RTL des beacons, vous devez inclure l'unité System.Beacon dans votre application, puis appeler TBeaconManager.GetBeaconManager pour le TBeaconScanMode qui sera utilisé pour obtenir une instance de TBeaconManager.

Pour iBeacons :

    BeaconManager := TBeaconManager.GetBeaconManager(TBeaconScanMode.Standard);

Pour AltBeacons :

    BeaconManager := TBeaconManager.GetBeaconManager(TBeaconScanMode.Alternative);

ScanMode identifie le type de beacon que le système doit rechercher : mode standard ou mode alternatif. TBeaconManager est la classe principale de l'implémentation beacon de l'API RTL des beacons. TBeaconManager est en charge du recensement des régions et gère les événements pour obtenir les informations à partir des beacons. L'instance TBeaconManager doit être créée pour le mode standard comme pour le mode alternatif.

Recensement des régions à surveiller

Vous devez recenser les régions des beacons que vous souhaitez surveiller. Pour recenser des régions, vous devez appeler TBeaconManager.RegisterBeacon.

    BeaconManager.RegisterBeacon(TGUID.Create(UUID));

Les régions sont spécifiées avec les paramètres UUID, MajorID et MinorID. Pour recenser une région, seul le paramètre UUID est requis. Si vous souhaitez être plus spécifique concernant la région à recenser, vous pouvez également utiliser MajorID, MinorID ou les deux, en fonction des trois méthodes surchargées TBeaconManager.RegisterBeacon définies.

Démarrage et arrêt de l'analyse des beacons

Une fois les beacons recensés, vous pouvez commencer à les surveiller en appelant TBeaconManager.StartScan. Pour arrêter la surveillance des beacons, vous devez appeler TBeaconManager.StopScan.

Obtention d'informations à partir des beacons entrants

Vous pouvez obtenir des informations concernant les beacons surveillés via les événements associés au TBeaconManager. Ces événements sont :

  • OnBeaconEnter : déclenché chaque fois qu'un nouveau beacon devient accessible.
  • OnBeaconExit : déclenché chaque fois qu'un beacon devient inaccessible.
  • OnBeaconProximity : déclenché chaque fois que la valeur Proximity change.
  • OnCalcDistance : déclenché immédiatement avant le calcul de la distance.
  • OnEnterRegion : déclenché la première fois qu'un beacon devient accessible à partir d'une région recensée.
  • OnExitRegion : déclenché lorsque tous les beacons recensés sur une région deviennent inaccessibles.

Une fois l'événement déclenché, vous pouvez utiliser les informations fournies par l'événement.

Remarque : Pour des raisons de compatibilité multiplate-forme, si vous recensez plusieurs éléments région avec le même UUID et que vous souhaitez les surveiller, vous ne pourrez obtenir que les événements du dernier élément de région que vous avez recensé dans le TBeaconRegionCollection. Dans l'éventualité où vous souhaiteriez surveiller différentes régions, il existe deux façons de faire selon votre scénario :
  • Recensez une région avec son UUID spécifique, MajorID=-1 et MinorID=-1 afin de recevoir des événements associés à tous les beacons ayant le même UUID.
  • Recensez une région avec son UUID spécifique et concevez votre app de façon à filtrer MajorID et MinorID selon vos valeurs personnalisées et les exigences relatives à votre app.

Ajout de services de localisation

Les services de localisation permettent aux apps basées sur la localisation d'utiliser les informations des réseaux cellulaires, Wi-Fi, GPS et des beacons pour déterminer votre emplacement approximatif. Pour détecter les beacons, vous devez activer les services de localisation.

Pour Android, activez les options Bluetooth dans Projet > Options > Permissions d'utilisation.

Pour la plate-forme iOS, si le mode alternatif est activé, vous n'avez pas besoin d'activer les services de localisation. En mode standard (iBeacons), la demande d'activation de la localisation doit être acceptée lors du premier démarrage de l'app.

A partir d'iOS 8.0, si vous utilisez le mode standard, certaines clés permettant à l'application d'utiliser les services de localisation sont nécessaires pour la détection des beacons. L'EDI inclut déjà NSLocationAlwaysUsageDescription et NSLocationWhenInUseUsageDescription.

La clé à ajouter manuellement est :

  • NSLocationUsageDescription

Pour les valeurs, vous devez simplement utiliser un message texte comme "Cette app doit pouvoir accéder aux services de localisation pour surveiller les beacons". Le système affiche ce message texte lorsqu'il accède à la configuration de l'app.

La clé peut être ajoutée dans l'EDI en sélectionnant Projet > Options > Informations de version, en cliquant avec le bouton droit sur la grille et en cliquant sur Ajouter une clé.

BeaconKeysFig1.png

Limitations en utilisation intérieure

Le signal radio diffusé par les beacons est extrêmement sensible aux effets de bruit tels que la diffraction, l'absorption, les réflexions sur plusieurs chemins ou les interférences qui proviennent d'autre périphériques émettant sur la même bande de radiofréquence. Ces effets nuisibles affectent principalement le signal du beacon dans les environnements intérieurs. En conséquence, les estimations issues des mesures de l'alimentation, comme les valeurs des propriétés Rssi, Distance ou Proximity, deviennent considérablement instables et tendent à fluctuer. La précision de ces estimations diminue donc.

Traitement du signal

La RTL fournit deux algorithmes différents pour améliorer la stabilité du signal d'un beacon et les estimations issues de ce signal :

  • RssiToDistance introduit un modèle pour obtenir l'estimation de distance dérivée des mesures Rssi. Notez qu'un paramètre d'alimentation calibré, ATxPower, améliore la fiabilité de l'algorithme.
  • TBeaconManager implémente un algorithme de filtre différentiel en option. Cet algorithme stabilise les mesures Rssi et distance. Pour activer cet algorithme, sélectionnez le mode de calcul Stabilized sur la propriété CalcMode. Ce mode est particulièrement utile pour l'estimation de la proximité et la détection de mouvements.

Incorporation d'algorithmes

Vous pouvez également incorporer des algorithmes supplémentaires de traitement du signal. Il peut s'agir d'algorithmes à usage général ou d'algorithmes conçus par vous-même. La liste suivante contient des exemples de filtres que vous pouvez implémenter pour diminuer les effets de bruit :

  • Filtre moyenne mobile
  • Filtre moyenne pondérée
  • Filtre ajustement de courbe

Voir aussi