Tutoriel : Construction d'une application ThingConnect IoT

De IoT
Aller à : navigation, rechercher

Aller au parent ThingConnect


Ce tutoriel fournit les étapes détaillées relatives à la création d'une nouvelle application ThingConnect IoT (Internet of Things) permettant d'établir la connexion à un périphérique Bluetooth LE et de récupérer les données de ses services.

Pour construire une application ThingConnect, vous avez besoin des composants suivants :

  • Le composant TBluetoothDeviceDiscoveryManager est utilisé pour configurer la connexion avec le périphérique.
  • Le composant Périphérique ThingConnect correspondant est utilisé pour récupérer les services et les données caractéristiques du périphérique.
Remarque : Les composants Périphérique ThingConnect et TBluetoothDeviceDiscoveryManager ne sont pas disponibles dans la palette d'outils. Vous pouvez télécharger les composants ThingConnect que vous souhaitez utiliser dans votre application via le Gestionnaire de packages GetIt accessible dans Outils > Gestionnaire de packages GetIt. Lorsque vous installez un composant ThingConnect via le Gestionnaire de packages GetIt, le composant TBluetoothDeviceDiscoveryManager est également installé.

Ce tutoriel utilise le composant TPolarHeartRateMonitor pour établir la connexion au capteur de fréquence cardiaque Polar H7 et récupère l'emplacement corporel et les valeurs actualisées de la fréquence cardiaque. A l'aide de ce tutoriel, vous pouvez :

  • Etablir la connexion au capteur de fréquence cardiaque Polar H7.
  • Démarrer la surveillance du service Heart Rate :
  • Arrêter la surveillance des caractéristiques du service (désabonnement des mises à jour des données).
  • Effectuer la déconnexion du capteur de fréquence cardiaque Polar H7.

Création d'une application ThingConnect

  1. Vérifiez que le composant Polar H7 Heart Rate Monitor est bien installé dans l'EDI. Pour cela :
    1. Accédez à Outils > Gestionnaire de packages GetIt
    2. Naviguez vers la catégorie Internet of Things.
    3. Recherchez le composant Polar H7 Heart Rate Monitor. S'il n'est pas installé dans votre EDI, cliquez sur le bouton Installer.
  2. Créez une nouvelle application multi-périphérique.
    • Pour Delphi : Ouvrez Fichier > Nouveau > Application multi-périphérique - Delphi
    • Pour C++ : Ouvrez Fichier > Nouveau > Application multi-périphérique - C++Builder
  3. Dans la palette d'outils, recherchez un composant TBluetoothDeviceDiscoveryManager et déposez-le sur la fiche.
  4. Dans la palette d'outils, recherchez un composant TPolarHeartRateMonitor et déposez-le sur la fiche.
  5. Dans l'inspecteur d'objets, configurez les paramètres TPolarHeartRateMonitor (voir Utilisation des périphériques ThingConnect et Utilisation du framework Bluetooth LE IoT).
    • DiscoveryManager : BluetoothDeviceDiscoveryManager1
    • DeviceName : Polar H7 6E0C6C1D
      Remarque : Le paramètre DeviceName correspond au nom de votre propre périphérique. Pour le composant Polar H7 Heart Rate Monitor, le paramètre DeviceName correspond à l'ID imprimé à l'arrière du périphérique :
      PolarH7ID.png
ThingConnectApp1.png

Création de l'interface utilisateur de l'application

  1. Déposez un composant TMemo sur la fiche.
  2. Déposez un composant TLabel sur la fiche. Dans l'inspecteur d'objets :
    • Définissez la propriété Align sur Top.
  3. Définissez la propriété Text sur Polar H7 Heart Rate Monitor.
    
  4. Déposez un composant TPanel sur la fiche. Dans l'inspecteur d'objets :
    • Définissez la propriété Align sur Top.
  5. Déposez un composant TListBox sur la fiche. Dans l'inspecteur d'objets :
    • Définissez la propriété Align sur Client.
  6. Ajoutez trois éléments de zone de liste. Cliquez avec le bouton droit dans le TListBox1 et sélectionnez Ajouter TListBoxItem.
  7. Changez le nom du TListBoxItems.
    • Dans l'inspecteur d'objets :
      • Définissez la propriété Name sur BPM, Location et Status.
      • Nettoyez les propriétés Text..
  8. Déposez trois composants TLabel sur la fiche. Dans l'inspecteur d'objets, changez les propriétés suivantes de chaque libellé :
    Nom Text
    Premier libellé lblBPM XX bpm
    Deuxième libellé lblBodyLocation Body location
    Troisième libellé lblContactStatus Contact status
  9. Dans la vue Structure :
    • Faites glisser le lblBPM et déposez-le dans l'élément de liste BPM.
    • Faites glisser le lblBodyLocation et déposez-le dans l'élément de liste Location.
    • Faites glisser le lblContactStatus et déposez-le dans l'élément de liste Status.
    • Définissez la propriété Align des libellés sur Client.
  10. Ajoutez quatre TButtons au Panel1. Dans l'inspecteur d'objets, définissez les propriétés suivantes de chaque bouton :
    Nom Text
    Premier bouton ButtonConnect Connect
    Deuxième bouton ButtonDisconnect Disconnect
    Troisième bouton ButtonStartMonitor Start Monitoring
    Quatrième bouton ButtonStopMonitor Stop Monitoring
ThingConnectApp2.png

Connexion et déconnexion du capteur de fréquence cardiaque Polar H7

  1. Créez l'événement OnClick du composant ButtonConnect (double-cliquez dessus) et ajoutez le code suivant :
    • Pour Delphi :
    procedure TForm1.ButtonConnectClick(Sender: TObject);
    begin
    {$IF Defined(WIN32) or Defined(WIN64)}
      BluetoothDeviceDiscoveryManager1.DiscoveryMethod := TDiscoveryMethod.Connect;
    {$ELSE}
      BluetoothDeviceDiscoveryManager1.DiscoveryMethod := TDiscoveryMethod.ScanResponse;
    {$ENDIF}
      BluetoothDeviceDiscoveryManager1.DiscoverDevices;
      Memo1.Lines.Add('Connecting...');
    end;
    
    • Pour C++ :
    void __fastcall TForm1::ButtonConnectClick(TObject *Sender) {
    #ifdef _Windows
    	BluetoothDeviceDiscoveryManager1->DiscoveryMethod =  TDiscoveryMethod::Connect;
    #else
    	BluetoothDeviceDiscoveryManager1->DiscoveryMethod =  TDiscoveryMethod::ScanResponse;
    #endif
    	BluetoothDeviceDiscoveryManager1->DiscoverDevices();
    	Memo1->Lines->Add("Connecting...");
    }
    
  2. Ajoutez Iot.Family.BluetoothLE.GattTypes aux classes uses.
  3. Créez l'événement OnDeviceConnected du composant PolarHeartRateMonitor1 (double-cliquez dessus) et ajoutez le code suivant :
    • Pour Delphi :
    procedure TForm1.PolarHeartRateMonitor1DeviceFound;
    begin
      Memo1.Lines.Add('New Polar H7 device found');
      ButtonConnect.Text := 'Connected';
      ButtonConnect.Enabled := False;
      ButtonDisconnect.Enabled := True;
      ButtonStartMonitor.Enabled := True;
      ButtonStopMonitor.Enabled := False;
      lblContactStatus.Text := 'Contact status: Connected';
    end;
    
    • Pour C++ :
    void __fastcall TForm1::PolarHeartRateMonitor1DeviceFound()
    {
    	Memo1->Lines->Add("New Polar H7 device found");
    	ButtonConnect->Text = "Connected";
    	ButtonConnect->Enabled = False;
    	ButtonDisconnect->Enabled = True;
    	ButtonStartMonitor->Enabled = True;
    	ButtonStopMonitor->Enabled = False;
    	lblContactStatus->Text = "Conctact status: Connected";
    }
    
  4. Créez l'événement OnClick du composant ButtonDisconnect (double-cliquez dessus) et ajoutez le code suivant :
    • Pour Delphi :
    procedure TForm1.ButtonDisconnectClick(Sender: TObject);
    begin
    	PolarHeartRateMonitor1.Disconnect;
    end;
    
    • Pour C++ :
    void __fastcall TForm1::ButtonDisconnectClick(TObject *Sender)
    {
    	PolarHeartRateMonitor1->Disconnect();
    }
    
  5. Créez l'événement OnDeviceDisconnect du composant PolarHeartRateMonitor1 (double-cliquez dessus dans l'onglet Evénements) et ajoutez le code suivant :
    • Pour Delphi :
     procedure TForm1.PolarHeartRateMonitor1DeviceDisconnect (const Sender: TCustomGeneratedBluetoothLEComponent);
    begin
      Memo1.Lines.Add('Polar H7 device disconnected');
      ButtonConnect.Text := 'Connect';
      ButtonConnect.Enabled := True;
      ButtonDisconnect.Enabled := False;
      ButtonStartMonitor.Enabled := False;
      ButtonStopMonitor.Enabled := False;
      lblContactStatus.Text := 'Contact status: Disconnected';
    end;
    
    • Pour C++ :
    void __fastcall TForm1::PolarHeartRateMonitor1DeviceDisconnect (TCustomGeneratedBluetoothLEComponent * const Sender)
    {
    	Memo1->Lines->Add("Polar H7 device disconnected");
    	ButtonConnect->Text = "Connect";
    	ButtonConnect->Enabled = True;
    	ButtonDisconnect->Enabled = False;
    	ButtonStartMonitor->Enabled = False;
    	ButtonStopMonitor->Enabled = False;
    	lblContactStatus->Text = "Contact status: Disconnected";
    }
    

Réception des mises à jour des données depuis le périphérique Polar H7 HRM

  1. Créez l'événement OnClick du composant ButtonStartMonitor (double-cliquez dessus) et ajoutez le code suivant :
    • Pour Delphi :
    procedure TForm1.ButtonStartMonitorClick(Sender: TObject);
    begin
      // Subscribing to the Service characteristics:
      PolarHeartRateMonitor1.SubscribeHeartRateMeasurement;
      Memo1.Lines.Add('Subscribing to HRM');
      PolarHeartRateMonitor1.RefreshBodySensorLocation;
      Memo1.Lines.Add('Refreshing Body Sensor Location');
      ButtonStartMonitor.Enabled := False;
      ButtonConnect.Enabled := False;
      ButtonDisconnect.Enabled := True;
      ButtonStartMonitor.Enabled := False;
      ButtonStopMonitor.Enabled := True;
    end;
    
    • Pour C++ :
    void __fastcall TForm1::ButtonStartMonitorClick(TObject *Sender) {
    	// Subscribing to the Service characteristics:
    	PolarHeartRateMonitor1->SubscribeHeartRateMeasurement();
    	Memo1->Lines->Add("Subscribing to HRM");
    	PolarHeartRateMonitor1->RefreshBodySensorLocation();
    	Memo1->Lines->Add("Refreshing Body Sensor Location");
    	ButtonStartMonitor->Enabled = False;
    	ButtonConnect->Enabled = False;
    	ButtonDisconnect->Enabled = True;
    	ButtonStartMonitor->Enabled = False;
    	ButtonStopMonitor->Enabled = True;
    }
    
  2. Implémentez le gestionnaire de l'événement OnBodySensorLocationUpdate :
    • Pour Delphi :
    procedure TForm1.PolarHeartRateMonitor1BodySensorLocationUpdate(Sender: TObject; const Value: TGattBodySensorLocation);
    begin
      case Value of
        TGattBodySensorLocation.Unread:
          lblBodyLocation.Text := lblBodyLocation.Text+ ': Unread';
        TGattBodySensorLocation.Other:
          lblBodyLocation.Text := lblBodyLocation.Text+ ': Other';
        TGattBodySensorLocation.Chest:
          lblBodyLocation.Text := lblBodyLocation.Text+ ': Chest';
        TGattBodySensorLocation.Wrist:
          lblBodyLocation.Text := lblBodyLocation.Text+ ': Wrist';
        TGattBodySensorLocation.Finger:
          lblBodyLocation.Text := lblBodyLocation.Text+ ': Finger';
        TGattBodySensorLocation.Hand:
          lblBodyLocation.Text := lblBodyLocation.Text+ ': Hand';
        TGattBodySensorLocation.EarLobe:
          lblBodyLocation.Text := lblBodyLocation.Text+ ': EarLobe';
        TGattBodySensorLocation.Foot:
          lblBodyLocation.Text := lblBodyLocation.Text+ ': Foot';
      end;
      Memo1.Lines.Add('Body sensor location update...');
    end;
    
    • Pour C++ :
    void __fastcall TForm1::PolarHeartRateMonitor1BodySensorLocationUpdate (TObject *Sender, const TGattBodySensorLocation Value) {
    	switch (Value) {
    	case TGattBodySensorLocation::Unread:
    		lblBodyLocation->Text = lblBodyLocation->Text + ": Unread";
    		break;
    	case TGattBodySensorLocation::Other:
    		lblBodyLocation->Text = lblBodyLocation->Text + ": Other";
    		break;
    	case TGattBodySensorLocation::Chest:
    		lblBodyLocation->Text = lblBodyLocation->Text + ": Chest";
    		break;
    	case TGattBodySensorLocation::Wrist:
    		lblBodyLocation->Text = lblBodyLocation->Text + ": Wrist";
    		break;
    	case TGattBodySensorLocation::Finger:
    		lblBodyLocation->Text = lblBodyLocation->Text + ": Finger";
    		break;
    	case TGattBodySensorLocation::Hand:
    		lblBodyLocation->Text = lblBodyLocation->Text + ": Hand";
    		break;
    	case TGattBodySensorLocation::EarLobe:
    		lblBodyLocation->Text = lblBodyLocation->Text + ": EarLobe";
    		break;
    	case TGattBodySensorLocation::Foot:
    		lblBodyLocation->Text = lblBodyLocation->Text + ": Foot";
    		break;
    	default:
    		lblBodyLocation->Text = lblBodyLocation->Text;
    	}
    	Memo1->Lines->Add("Body sensor location update...");
    }
    
  3. Implémentez le gestionnaire de l'événement OnHeartRateMeasurementUpdate :
    • Pour Delphi :
    procedure TForm1.PolarHeartRateMonitor1HeartRateMeasurementUpdate (Sender: TObject; const Value: TGattHeartRateMeasurement);
    var
      val: TGattHeartRateMeasurement;
    begin
      val := Value;
      lblBPM.Text := IntToStr(val.HeartRateMeasurement) + 'bpm';
      Memo1.Lines.Add('HRM update...');
    end;
    
    • Pour C++ :
    void __fastcall TForm1::PolarHeartRateMonitor1HeartRateMeasurementUpdate (TObject *Sender, const TGattHeartRateMeasurement &Value) {
    	TGattHeartRateMeasurement val = Value;
    	lblBPM->Text = IntToStr(val.HeartRateMeasurement) + "bpm";
    	Memo1->Lines->Add("HRM update...");
    }
    
  4. Créez l'événement OnClick du composant ButtonStopMonitor (double-cliquez dessus) et ajoutez le code suivant :
    • Pour Delphi :
    procedure TForm1.ButtonStopMonitorClick(Sender: TObject);
    begin
      PolarHeartRateMonitor1.UnSubscribeHeartRateMeasurement;
      Memo1.Lines.Add('UnSubscribing from HRM');
      ButtonConnect.Enabled := False;
      ButtonDisconnect.Enabled := True;
      ButtonStartMonitor.Enabled := True;
      ButtonStopMonitor.Enabled := False;
    end;
    
    • Pour C++ :
    void __fastcall TForm1::ButtonStopMonitorClick(TObject *Sender) {
    	PolarHeartRateMonitor1->UnSubscribeHeartRateMeasurement();
    	Memo1->Lines->Add("UnSubscribing from HRM");
    	ButtonConnect->Enabled = False;
    	ButtonDisconnect->Enabled = True;
    	ButtonStartMonitor->Enabled = True;
    	ButtonStopMonitor->Enabled = False;
    }
    

Exécution de l'application

Pour exécuter l'application dans votre périphérique, cliquez simplement sur Exécuter ou cliquez sur F9.

  • Cliquez sur le bouton Connect pour établir la connexion au moniteur de fréquence cardiaque Polar H7.
  • Cliquez sur le bouton Start Monitoring pour démarrer la réception des mises à jour des données à partir des mesures du périphérique.
  • Cliquez sur le bouton Stop Monitoring pour arrêter la réception des mises à jour des données à partir des mesures du périphérique (désabonnement des caractéristiques).
  • Cliquez sur le bouton Disconnect pour effectuer la déconnexion du périphérique de fréquence cardiaque Polar H7.
ThingConnectApp3.png

Voir aussi