Tutorial: Erstellen einer ThingConnect-IoT-Anwendung

Aus IoT
Wechseln zu: Navigation, Suche

Go Up to ThingConnect


Dieses Tutorial enthält detaillierte Schritte zum Erstellen einer neuen ThingConnect-Anwendung (IoT, Internet der Dinge), um eine Verbindung mit einem Bluetooth LE-Gerät herzustellen und Daten von dessen Diensten abzurufen.

Zum Erstellen einer ThingConnect-Anwendung benötigen Sie die folgenden Komponenten:

  • Die Komponente TBluetoothDeviceDiscoveryManager, um die Verbindung mit dem Gerät einzurichten.
  • Die zugehörige ThingConnect-Gerätekomponente, um die Dienste und die Merkmale vom Gerät abzurufen.
Hinweis: Die Komponenten ThingConnect-Gerät und TBluetoothDeviceDiscoveryManager stehen nicht in der Tool-Palette zur Verfügung. Sie können die ThingConnect-Komponenten, die Sie in Ihrer Anwendung verwenden möchten mit dem GetIt-Package-Manager (Tools > GetIt-Package-Manager) herunterladen. Wenn Sie eine ThingConnect-Komponente über den GetIt-Package-Manager installieren, wird auch die Komponente TBluetoothDeviceDiscoveryManager installiert.

In diesem Tutorial wird mit der Komponente TPolarHeartRateMonitor eine Verbindung mit dem Polar H7 Herzfrequenzsensor hergestellt und die Position des Sensors am Körper sowie die aktuellen Herzfrequenzwerte abgerufen. Mit diesem Tutorial können Sie:

  • Eine Verbindung mit dem Polar H7 Herzfrequenzsensor herstellen.
  • Die Überwachung des Dienstes Heart Rate (EN) starten:
  • Die Überwachung der Dienstmerkmale beenden (Aufheben des Abonnements von Datenaktualisierungen).
  • Die Verbindung mit dem Polar H7 Herzfrequenzsensor aufheben.

Erstellen einer ThingConnect-Anwendung

  1. Überprüfen Sie folgendermaßen, ob die Komponente "Polar H7 Heart Rate Monitor" in der IDE installiert ist:
    1. Klicken Sie auf Tools > GetIt-Package-Manager.
    2. Navigieren Sie zu Kategorie Internet der Dinge.
    3. Suchen Sie die Komponente Polar H7 Heart Rate Monitor. Falls sie nicht in der IDE installiert ist, klicken Sie auf die Schaltfläche Installieren.
  2. Erstellen Sie eine neue geräteübergreifende Anwendung.
    • Für Delphi: Öffnen Sie Datei > Neu > Geräteübergreifende Anwendung - Delphi
    • Für C++: Öffnen Sie Datei > Neu > Geräteübergreifende Anwendung - C++Builder
  3. Suchen Sie in der Tool-Palette die Komponente TBluetoothDeviceDiscoveryManager, und ziehen Sie sie auf das Formular.
  4. Ziehen Sie eine TPolarHeartRateMonitor-Komponente aus der Tool-Palette auf das Formular.
  5. Konfigurieren Sie im Objektinspektor die TPolarHeartRateMonitor-Parameter (siehe Arbeiten mit ThingConnect-Geräten und Verwenden des IoT-Frameworks für Bluetooth LE).
    • DiscoveryManager: BluetoothDeviceDiscoveryManager1
    • DeviceName: Polar H7 6E0C6C1D
      Hinweis: DeviceName entspricht dem Namen Ihres Geräts. Für den Polar H7 Herzfrequenzsensor entspricht der DeviceName der auf der Rückseite des Geräts aufgedruckten ID:
      PolarH7ID.png
ThingConnectApp1.png

Erstellen der Benutzeroberfläche der Anwendung

  1. Ziehen Sie eine TMemo-Komponente auf das Formular.
  2. Ziehen Sie eine TLabel-Komponente auf das Formular. Im Objektinspektor:
    • Setzen Sie die Eigenschaft Align auf Top.
  3. Setzen Sie die Eigenschaft Text auf Polar H7 Heart Rate Monitor.
    
  4. Ziehen Sie eine TPanel-Komponente auf das Formular. Im Objektinspektor:
    • Setzen Sie die Eigenschaft Align auf Top.
  5. Ziehen Sie eine TListBox-Komponente auf das Formular. Im Objektinspektor:
    • Setzen Sie die Eigenschaft Align auf Client.
  6. Fügen Sie drei Listenfeldeinträge hinzu. Klicken Sie mit der rechten Maustaste auf die TListBox1, und wählen Sie TListBoxItem hinzufügen.
  7. Ändern Sie den Namen der TListBoxItems.
    • Im Objektinspektor:
      • Setzen Sie die Eigenschaft Name auf BPM, Location bzw. Status.
      • Leeren Sie die Text-Eigenschaften..
  8. Ziehen Sie drei TLabel-Komponenten auf das Formular. Ändern Sie im Objektinspektor die folgenden Eigenschaften der drei Beschriftungen:
    Name Text
    Erste Beschriftung lblBPM XX bpm
    Zweite Beschriftung lblBodyLocation Body location
    Dritte Beschriftung lblContactStatus Contact status
  9. In der Strukturansicht:
    • Ziehen Sie die Komponente lblBPM in den Listeneintrag BPM.
    • Ziehen Sie die Komponente lblBodyLocation in den Listeneintrag Location.
    • Ziehen Sie die Komponente lblContactStatus in den Listeneintrag Status.
    • Setzen Sie die Eigenschaft Align der Beschriftungen auf Client.
  10. Fügen Sie Panel1 vier TButton-Komponenten hinzu. Legen Sie im Objektinspektor die folgenden Eigenschaften der Schaltflächen fest:
    Name Text
    Erste Schaltfläche ButtonConnect Connect
    Zweite Schaltfläche ButtonDisconnect Disconnect
    Dritte Schaltfläche ButtonStartMonitor Start Monitoring
    Vierte Schaltfläche ButtonStopMonitor Stop Monitoring
ThingConnectApp2.png

Herstellen und Aufheben der Verbindung mit dem Polar H7 Herzfrequenzsensor

  1. Erstellen Sie das Ereignis OnClick der ButtonConnect-Komponente (doppelklicken Sie darauf), und fügen Sie den folgenden Code hinzu:
    • Für 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;
    
    • Für 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. Fügen Sie der uses-Klausel Iot.Family.BluetoothLE.GattTypes hinzu.
  3. Erstellen Sie das Ereignis OnDeviceConnected der PolarHeartRateMonitor1-Komponente (doppelklicken Sie darauf), und fügen Sie den folgenden Code hinzu:
    • Für 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;
    
    • Für 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. Erstellen Sie das Ereignis OnClick der ButtonDisconnect-Komponente (doppelklicken Sie darauf), und fügen Sie den folgenden Code hinzu:
    • Für Delphi:
    procedure TForm1.ButtonDisconnectClick(Sender: TObject);
    begin
    	PolarHeartRateMonitor1.Disconnect;
    end;
    
    • Für C++:
    void __fastcall TForm1::ButtonDisconnectClick(TObject *Sender)
    {
    	PolarHeartRateMonitor1->Disconnect();
    }
    
  5. Erstellen Sie das Ereignis OnDeviceDisconnect der PolarHeartRateMonitor1-Komponente (doppelklicken Sie auf der Registerkarte "Ereignisse" darauf), und fügen Sie den folgenden Code hinzu:
    • Für 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;
    
    • Für 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";
    }
    

Empfangen von Datenaktualisierungen vom Polar H7 Herzfrequenzsensor

  1. Erstellen Sie das Ereignis OnClick der ButtonStartMonitor-Komponente (doppelklicken Sie darauf), und fügen Sie den folgenden Code hinzu:
    • Für 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;
    
    • Für 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. Implementieren Sie die Ereignisbehandlungsroutine des Ereignisses OnBodySensorLocationUpdate:
    • Für 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;
    
    • Für 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. Implementieren Sie die Ereignisbehandlungsroutine des Ereignisses OnHeartRateMeasurementUpdate:
    • Für 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;
    
    • Für 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. Erstellen Sie das Ereignis OnClick der ButtonStopMonitor-Komponente (doppelklicken Sie darauf), und fügen Sie den folgenden Code hinzu:
    • Für 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;
    
    • Für 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;
    }
    

Ausführen der Anwendung

Um die Anwendung auf Ihrem Gerät auszuführen, klicken Sie einfach auf Start, oder drücken Sie F9.

  • Klicken Sie auf die Schaltfläche Connect, um eine Verbindung mit dem Polar H7 Herzfrequenzmonitor herzustellen.
  • Klicken Sie auf die Schaltfläche Start Monitoring, um den Empfang von Datenaktualisierungen von den Messungen des Geräts zu starten.
  • Klicken Sie auf die Schaltfläche Stop Monitoring, um den Empfang von Datenaktualisierungen von den Messungen des Geräts zu beenden (Aufheben des Abonnements des Merkmals).
  • Klicken Sie auf die Schaltfläche Disconnect, um die Verbindung mit dem Polar H7 Herzfrequenzmonitor aufzuheben.
ThingConnectApp3.png

Siehe auch