Utilisation des périphériques ThingConnect
Aller au parent ThingConnect
Pour utiliser un périphérique Bluetooth LE dans votre application, vous devez suivre ces procédures.
Sommaire
Connexion aux périphériques
Pour se connecter à un périphérique Bluetooth LE dans votre application, procédez comme suit :
- Déposez un composant
TBluetoothDeviceDiscoveryManager
. - Déposez le composant correspondant pour le périphérique Bluetooth LE.
- Dans l'inspecteur d'objets, définissez la propriété DiscoveryManager du composant Bluetooth LE sur le
TBluetoothDeviceDiscoveryManager
. - Définissez le mécanisme de découverte approprié dans la propriété
DiscoveryMethod
duTBluetoothDeviceDiscoveryManager
. - Pour se connecter au périphérique réel, vous devez appeler la méthode
DiscoverDevices
duTBluetoothDeviceDiscoveryManager
.Delphi :FDiscoveryManager.DiscoverDevices;
C++ :FDiscoveryManager->DiscoverDevices();
- Après la connexion au périphérique, l'événement
OnDeviceConnected
du composant correspondant est appelé. - Ajoutez les unités suivantes à la clause Uses de l'application :
- Iot.Family.BluetoothLE.GattTypes
- L'unité Types personnalisée (si le composant définit des types de données personnalisés).
Définition de la méthode de mécanisme de découverte
Pour définir la méthode de mécanisme de découverte des périphériques Bluetooth LE dans votre application, effectuez l'une des opérations suivantes :
- Dans l'inspecteur d'objets, utilisez la propriété
DiscoveryMethod
. - Définissez le mécanisme de découverte par du code avant d'appeler la méthode
DiscoverDevices
:
{$IF Defined(WIN32) or Defined(WIN64)}
FDiscoveryManager.DiscoveryMethod := TDiscoveryMethod.Connect;
{$ELSE}
FDiscoveryManager.DiscoveryMethod := TDiscoveryMethod.ScanResponse;
{$EndIf}
#ifdef _Windows
FDiscoveryManager->DiscoveryMethod = TDiscoveryMethod::Connect;
#else
FDiscoveryManager->DiscoveryMethod = TDiscoveryMethod::ScanResponse;
#endif
-
- Remarque : Pour les applications des plates-formes Windows 32 bits et Windows 64 bits, vous devez définir Connect comme type de méthode de découverte.
- Avertissement : Certains périphériques ne diffusent pas leur nom ou les services dans les données publicitaires. Vous devez utiliser à la place la méthode de découverte Connect et définir manuellement le nom du périphérique auquel vous souhaitez vous connecter.
Utilisation de la méthode de mécanisme de découverte ScanResponseAllDevices
Si vous utilisez la méthode de mécanisme de découverte ScanResponseAllDevices
pour se connecter à un périphérique donné, vous devez récupérer le nom du DiscoveredDevice dans la liste.
- Implémentez le gestionnaire d'événement
OnGenericHeartRateMonitor1DeviceListDiscovered
pour récupérer la liste des périphériques découverts. Dans cet exemple de code, les périphériques découverts sont ajoutés à un TlistBox.Delphi :procedure TForm1.GenericHeartRateMonitor1DeviceListDiscovered(const Sender: TObject; const ADiscoveredDeviceCount: Integer); var I: Integer; begin for I := 0 to ADiscoveredDeviceCount - 1 do ListBox1.Items.Add(GenericHeartRateMonitor1.DiscoveredDevice[I].DeviceName); end;
C++ :void __fastcall TForm1::GenericHeartRateMonitor1DeviceListDiscovered(TObject * const Sender, const int ADiscoveredDeviceCount) { for (int I = 0; I < ADiscoveredDeviceCount; I++) { ListBox1->Items->Add() = GenericHeartRateMonitor1->DiscoveredDevice[I]->DeviceName; } }
- Utilisez la méthode
ConnectDevice
pour se connecter auDiscoveredDevice
sélectionné. Cet élément est récupéré dans le TListBox.Delphi :procedure TForm1.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); begin GenericHeartRateMonitor1.ConnectDevice(GenericHeartRateMonitor1.DiscoveredDevice[Item.Index]); end;
C++ :void __fastcall TForm1::ListBox1ItemClick(TCustomListBox * const Sender, TListBoxItem * const Item) { TBluetoothLEDevice *LDevice; LDevice = GenericHeartRateMonitor1->DiscoveredDevice[AItem->Index]; GenericHeartRateMonitor1->ConnectDevice(LDevice); }
Lecture des données d'une propriété
Pour lire la valeur des données d'une propriété, vous devez appeler la méthode Refresh et implémenter le gestionnaire de l'événement.
Par exemple, pour lire la valeur des données de la propriété BatteryLevel
, ajoutez le code suivant :
procedure TForm1.ReadPropertyClick(Sender: TObject);
begin
ZephyrHeartRateMonitor.RefreshBatteryLevel;
end;
void __fastcall TForm1::ReadPropertyClick(TObject *Sender) {
ZephyrHeartRateMonitor1->RefreshBatteryLevel();
}
Implémentez le gestionnaire de l'événement OnBatteryLevelUpdate
:
uses
Iot.Family.BluetoothLE.GattTypes, Iot.Device.ZephyrHeartRateMonitorTypes;
var BatteryLevelText : UnicodeString;
procedure TForm1.ZephyrHeartRateMonitorBatteryLevelUpdate(Sender: TObject; Value: Byte);
begin
BatteryLevelText := IntToStr(Value) + '%';
end;
C++ :
- Dans le fichier .h, ajoutez la clause Uses :
#include <Iot.Family.BluetoothLE.GattTypes.hpp>
#include <Iot.Device.ZephyrHeartRateMonitorTypes.hpp>
- Dans le fichier .cpp :
void __fastcall TForm1::ZephyrHeartRateMonitor1BatteryLevelUpdate (TObject *Sender, BYTE Value) {
BateryLevel = IntToStr(Value) + "%";
}
Abonnement à une caractéristique
Pour s'abonner à une caractéristique, vous devez appeler la méthode Subscribe de la caractéristique.
Par exemple, pour s'abonner à la caractéristique Heart Rate Measurement, ajoutez le code suivant :
procedure TForm1.HRMSubscribeBtnClick(Sender: TObject);
begin
ZephyrHeartRateMonitor.SubscribeHeartRateMeasurement;
end;
void __fastcall TForm1::HRMSubscribeBtnClick(TObject *Sender) {
FZephyrHeartRateMonitor->SubscribeHeartRateMeasurement();
}
Réception des mises à jour des données
Pour démarrer la réception des mises à jour des données d'une caractéristique abonnée, vous devez implémenter le gestionnaire de l'événement.
Par exemple, pour recevoir les mises à jour de la mesure de la fréquence cardiaque, implémentez le gestionnaire de l'événement OnHeartRateMeasurementUpdate
comme suit :
uses
Iot.Family.BluetoothLE.GattTypes, Iot.Device.ZephyrHeartRateMonitorTypes;
var HRMValueText : UnicodeString;
procedure TForm1.ZephyrHeartRateMonitorHeartRateMeasurementUpdate(Sender: TObject; const Value: TGattHeartRateMeasurement);
begin
HRMValueText := 'HR: ' + IntToStr(Value.HeartRateMeasurement) + 'bpm RRInterval: ' + IntToStr(Value.RRInterval) + ' EnergyExp: ' + IntToStr(Value.EnergyExpended) + ' Contact: ' + IntToStr(Ord(Value.ContactStatus));
end;
Dans le fichier .h :
#include <Iot.Family.BluetoothLE.GattTypes.hpp>
#include <Iot.Device.ZephyrHeartRateMonitorTypes.hpp>
Dans le fichier .cpp :
void __fastcall TForm1::FZephyrHeartRateMonitorHeartRateMeasurementUpdate(TObject *Sender,
const TGattHeartRateMeasurement &Value)
{
TGattHeartRateMeasurement Ghrm = Value;
HRMValueText = "HR: " + IntToStr(Ghrm.HeartRateMeasurement) + " bpm RRInterval : " + IntToStr(Ghrm.RRInterval) + " EnergyExp : " + IntToStr(Ghrm.EnergyExpended) + " Contact:" + IntToStr((int)Ghrm.ContactStatus);
}
Désabonnement d'une caractéristique
Pour se désabonner d'une caractéristique, vous devez appeler la méthode Unsubscribe de cette caractéristique.
Par exemple, pour se désabonner de la caractéristique Heart Rate Measurement, ajoutez le code suivant :
procedure TForm1.HRMUnSubscribeBtnClick(Sender: TObject);
begin
ZephyrHeartRateMonitor.UnsubscribeHeartRateMeasurement;
end;
void __fastcall TForm1::HRMUnSubscribeBtnClick(TObject *Sender) {
FZephyrHeartRateMonitor->UnsubscribeHeartRateMeasurement();
}
Ecriture d'une caractéristique
Pour écrire une caractéristique, vous devez définir la propriété correspondante du composant. Pour cela, utilisez la méthode Create
de cette caractéristique, transmettez les valeurs nécessaires, puis définissez les valeurs sur celle-ci.
Par exemple, pour mettre à jour la couleur de l'éclairage de l'ampoule Yeelight Blue Light, vous devez définir la propriété ControlCharacter du composant. Pour écrire cette propriété, ajoutez le code suivant :
procedure TForm1.SetColorClick(Sender: TObject);
var
LColor: TAlphaColor;
LControl: TControlCharacter;
LIntensity: Integer;
begin
LIntensity := 80;
LColor := claOrange; //System.UITypes.TAlphaColor
LControl := TControlCharacter.Create(LColor, LIntensity, TLEDCommand.ColorCommand);
YeelightBlue1.ControlCharacter := LControl;
end;
void __fastcall TForm1::SetColorClick(TObject *Sender)
{
TAlphaColor LColor;
int LIntensity;
LIntensity = 80;
LColor = TAlphaColor(claGreen); //System.UITypes.TAlphaColor
TControlCharacter LControl = TControlCharacter(LColor, LIntensity, TLEDCommand::ColorCommand);
YeelightBlue1->ControlCharacter = LControl;
}
Gestion des erreurs
Lors de la connexion à un périphérique, il se peut que vous ayez plusieurs erreurs à gérer :
Erreur | Composant | Description |
---|---|---|
OnDiscoveryError
|
TBluetoothDeviceDiscoveryManager
|
Le gestionnaire ne peut trouver un périphérique de ce type à proximité. |
OnDiscoveryError
|
Composant Bluetooth LE | Le composant ne peut trouver le périphérique. |