Utilisation des périphériques ThingConnect

De IoT
Aller à : navigation, rechercher

Aller au parent ThingConnect


Pour utiliser un périphérique Bluetooth LE dans votre application, vous devez suivre ces procédures.

Connexion aux périphériques

Pour se connecter à un périphérique Bluetooth LE dans votre application, procédez comme suit :

  1. Déposez un composant TBluetoothDeviceDiscoveryManager.
  2. Déposez le composant correspondant pour le périphérique Bluetooth LE.
  3. Dans l'inspecteur d'objets, définissez la propriété DiscoveryManager du composant Bluetooth LE sur le TBluetoothDeviceDiscoveryManager.
  4. Définissez le mécanisme de découverte approprié dans la propriété DiscoveryMethod du TBluetoothDeviceDiscoveryManager.
  5. Pour se connecter au périphérique réel, vous devez appeler la méthode DiscoverDevices du TBluetoothDeviceDiscoveryManager.
    Delphi :
      FDiscoveryManager.DiscoverDevices;
    
    C++ :
      FDiscoveryManager->DiscoverDevices();
    
  6. Après la connexion au périphérique, l'événement OnDeviceConnected du composant correspondant est appelé.
  7. 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 :
Delphi :
  {$IF Defined(WIN32) or Defined(WIN64)}
  FDiscoveryManager.DiscoveryMethod := TDiscoveryMethod.Connect;
  {$ELSE}
  FDiscoveryManager.DiscoveryMethod := TDiscoveryMethod.ScanResponse;
  {$EndIf}
C++ :
  #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.

  1. 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;
    	}
    }
    
  2. Utilisez la méthode ConnectDevice pour se connecter au DiscoveredDevice 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 :

Delphi :
procedure TForm1.ReadPropertyClick(Sender: TObject);
begin
  ZephyrHeartRateMonitor.RefreshBatteryLevel;
end;
C++ :
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 :

Delphi :
procedure TForm1.HRMSubscribeBtnClick(Sender: TObject);
begin
  ZephyrHeartRateMonitor.SubscribeHeartRateMeasurement;
end;
C++ :
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 :

Delphi :
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;
C++ :

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 :

Delphi :
procedure TForm1.HRMUnSubscribeBtnClick(Sender: TObject);
begin
  ZephyrHeartRateMonitor.UnsubscribeHeartRateMeasurement;
end;
C++ :
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 :

Delphi :
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;
C++ :
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.

Voir aussi