Tutoriel : Construction d'une application ThingConnect IoT
Sommaire
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 composantTBluetoothDeviceDiscoveryManager
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 :
- La caractéristique Heart Rate Measurement (abonnement aux mises à jour des données).
- La valeur de la caractéristique Body Sensor Location.
- 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
- Vérifiez que le composant Polar H7 Heart Rate Monitor est bien installé dans l'EDI. Pour cela :
- Accédez à Outils > Gestionnaire de packages GetIt
- Naviguez vers la catégorie Internet of Things.
- Recherchez le composant Polar H7 Heart Rate Monitor. S'il n'est pas installé dans votre EDI, cliquez sur le bouton Installer.
- 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
- Dans la palette d'outils, recherchez un composant
TBluetoothDeviceDiscoveryManager
et déposez-le sur la fiche. - Dans la palette d'outils, recherchez un composant
TPolarHeartRateMonitor
et déposez-le sur la fiche. - Dans l'inspecteur d'objets, configurez les paramètres
TPolarHeartRateMonitor
(voir Utilisation des périphériques ThingConnect et Utilisation du framework Bluetooth LE IoT).
Création de l'interface utilisateur de l'application
- Déposez un composant TMemo sur la fiche.
- Dans l'inspecteur d'objets, définissez la propriété Align sur
Bottom
.
- Dans l'inspecteur d'objets, définissez la propriété Align sur
- Déposez un composant TLabel sur la fiche. Dans l'inspecteur d'objets :
- Définissez la propriété Align sur
Top
.
- Définissez la propriété Align sur
- Déposez un composant TPanel sur la fiche. Dans l'inspecteur d'objets :
- Définissez la propriété Align sur
Top
.
- Définissez la propriété Align sur
- Déposez un composant TListBox sur la fiche. Dans l'inspecteur d'objets :
- Définissez la propriété Align sur
Client
.
- Définissez la propriété Align sur
- Ajoutez trois éléments de zone de liste. Cliquez avec le bouton droit dans le TListBox1 et sélectionnez Ajouter TListBoxItem.
- Changez le nom du TListBoxItems.
- Dans l'inspecteur d'objets :
- Définissez la propriété Name sur
BPM
,Location
etStatus
. - Nettoyez les propriétés Text..
- Définissez la propriété Name sur
- Dans l'inspecteur d'objets :
- 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
- Dans la vue Structure :
- Faites glisser le
lblBPM
et déposez-le dans l'élément de listeBPM
. - Faites glisser le
lblBodyLocation
et déposez-le dans l'élément de listeLocation
. - Faites glisser le
lblContactStatus
et déposez-le dans l'élément de listeStatus
. - Définissez la propriété Align des libellés sur
Client
.
- Faites glisser le
- 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
Définissez la propriété Text sur Polar H7 Heart Rate Monitor
.
Connexion et déconnexion du capteur de fréquence cardiaque Polar H7
- Créez l'événement
OnClick
du composantButtonConnect
(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..."); }
- Ajoutez
Iot.Family.BluetoothLE.GattTypes
aux classes uses. - Créez l'événement
OnDeviceConnected
du composantPolarHeartRateMonitor1
(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"; }
- Créez l'événement
OnClick
du composantButtonDisconnect
(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(); }
- Créez l'événement
OnDeviceDisconnect
du composantPolarHeartRateMonitor1
(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
- Créez l'événement
OnClick
du composantButtonStartMonitor
(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; }
- 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..."); }
- 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..."); }
- Créez l'événement
OnClick
du composantButtonStopMonitor
(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.