チュートリアル:ThingConnect IoT アプリケーションを作成する
目次
Go Up to ThingConnect
このチュートリアルでは、Bluetooth LE デバイスに接続してそのサービスからデータを取得するための、ThingConnect IoT(モノのインターネット)アプリケーションを新規作成する詳しい手順を説明します。
ThingConnect アプリケーションを構築するには、次のコンポーネントが必要です。
TBluetoothDeviceDiscoveryManager
コンポーネント。デバイスとの接続をセットアップするために使用します。- 該当する ThingConnect デバイス コンポーネント。デバイスからサービスおよびキャラクタリスティックのデータを取得するために使用します。
- メモ: ThingConnect デバイス コンポーネントと
TBluetoothDeviceDiscoveryManager
コンポーネントは、[ツール パレット]では提供されていません。アプリケーションで使用する ThingConnect コンポーネントは、[ツール|GetIt パッケージ マネージャ...]を選択すると開く[GetIt パッケージ マネージャ]からダウンロードすることかできます。[GetIt パッケージ マネージャ]から ThingConnect コンポーネントをインストールすると、TBluetoothDeviceDiscoveryManager
コンポーネントも一緒にインストールされます。
このチュートリアルでは、TPolarHeartRateMonitor コンポーネントを使用して Polar H7 心拍数センサに接続し、体の部位と現在の心拍数の値を取得します。 このチュートリアルにより以下を行うことができます。
- Polar H7 心拍数センサに接続する。
- Heart Rate サービスの監視を開始する。
- Heart Rate Measurement(データ更新をサブスクライブ)。
- Body Sensor Location の値。
- サービス キャラクタリスティックの監視を終了する(データ更新のサブスクライブを解除)。
- Polar H7 心拍数センサとの接続を解除する。
ThingConnect アプリケーションの作成
- Polar H7 心拍数モニタ コンポーネントが IDE にインストールされていることを確認します。手順は以下のとおりです。
- [ツール|GetIt パッケージ マネージャ...]を選択します。
- [Internet of Things]カテゴリを開きます。
- Polar H7 Heart Rate Monitor コンポーネントを探します。まだ IDE にインストールされていなければ、[インストール]ボタンをクリックします。
- マルチデバイス アプリケーションを新規作成します。
- Delphi の場合: [ファイル|新規作成|マルチデバイス アプリケーション - Delphi]を選択します。
- C++ の場合: [ファイル|新規作成|マルチデバイス アプリケーション - C++Builder]を選択します。
- [ツール パレット]で a
TBluetoothDeviceDiscoveryManager
コンポーネントを探してフォームにドロップします。 - [ツール パレット]から
TPolarHeartRateMonitor
コンポーネントをフォームにドロップします。 - [オブジェクト インスペクタ]で
TPolarHeartRateMonitor
のパラメータを次のように構成します(「ThingConnect デバイスの操作」と「Bluetooth LE IoT フレームワークの使用」を参照)。
アプリケーション UI の作成
- TMemo コンポーネントをフォームにドロップします。
- [オブジェクト インスペクタ]で、Align プロパティを
Bottom
に設定します。
- [オブジェクト インスペクタ]で、Align プロパティを
- TLabel コンポーネントをフォームにドロップします。[オブジェクト インスペクタ]で次のように設定します。
- Align プロパティを
Top
に設定します。
- Align プロパティを
- TPanel コンポーネントをフォームにドロップします。[オブジェクト インスペクタ]で次のように設定します。
- Align プロパティを
Top
に設定します。
- Align プロパティを
- TListBox コンポーネントをフォームにドロップします。[オブジェクト インスペクタ]で次のように設定します。
- Align プロパティを
Client
に設定します。
- Align プロパティを
- リスト ボックス項目を 3 つ追加します。それには、TListBox1 を右クリックし、[TListBoxItem の追加]を選択します。
- 各 TListBoxItem の名前を変更します。
- [オブジェクト インスペクタ]で次のように設定します。
- Name プロパティを「
BPM
」、「Location
」、「Status
」に設定します。 - Text プロパティをクリアします。.
- Name プロパティを「
- [オブジェクト インスペクタ]で次のように設定します。
- TLabel コンポーネントを 3 つフォームにドロップします。[オブジェクト インスペクタ]で、それぞれのラベルのプロパティを次のように変更します。
Name Text 1 番目のラベル lblBPM
XX bpm
2 番目のラベル lblBodyLocation
Body location
3 番目のラベル lblContactStatus
Contact status
- [構造]ビューで次の作業をします。
lblBPM
をドラッグしてBPM
リスト項目にドロップします。lblBodyLocation
をドラッグしてLocation
リスト項目にドロップします。lblContactStatus
をドラッグしてStatus
リスト項目にドロップします。- 各ラベルの Align プロパティを
Client
に設定します。
- TButton を 4 つ
Panel1
に追加します。[オブジェクト インスペクタ]でそれぞれのボタンのプロパティを次のように設定します。Name Text 1 番目のボタン ButtonConnect
Connect 2 番目のボタン ButtonDisconnect
Disconnect 3 番目のボタン ButtonStartMonitor
Start Monitoring 4 番目のボタン ButtonStopMonitor
Stop Monitoring
Text プロパティを「Polar H7 Heart Rate Monitor
」に設定します。
Polar H7 心拍数センサとの接続および接続解除
ButtonConnect
コンポーネントのOnClick
イベントを(ダブルクリックして)作成し、次のコードを追加します。- 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;
- 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..."); }
- uses 句に
Iot.Family.BluetoothLE.GattTypes
を追加します。 PolarHeartRateMonitor1
コンポーネントのOnDeviceConnected
イベントを(ダブルクリックして)作成し、次のコードを追加します。- 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;
- 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"; }
ButtonDisconnect
コンポーネントのOnClick
イベントを(ダブルクリックして)作成し、次のコードを追加します。- Delphi の場合:
procedure TForm1.ButtonDisconnectClick(Sender: TObject); begin PolarHeartRateMonitor1.Disconnect; end;
- C++ の場合:
void __fastcall TForm1::ButtonDisconnectClick(TObject *Sender) { PolarHeartRateMonitor1->Disconnect(); }
PolarHeartRateMonitor1
コンポーネントのOnDeviceDisconnect
イベントを([イベント]タブでダブルクリックして)作成し、次のコードを追加します。- 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;
- 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"; }
Polar H7 HRM デバイスからのデータ更新の受信
ButtonStartMonitor
コンポーネントのOnClick
イベントを(ダブルクリックして)作成し、次のコードを追加します。- 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;
- 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; }
OnBodySensorLocationUpdate
イベントのイベント ハンドラを次のように実装します。- 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;
- 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..."); }
OnHeartRateMeasurementUpdate
イベントのイベント ハンドラを次のように実装します。- 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;
- C++ の場合:
void __fastcall TForm1::PolarHeartRateMonitor1HeartRateMeasurementUpdate (TObject *Sender, const TGattHeartRateMeasurement &Value) { TGattHeartRateMeasurement val = Value; lblBPM->Text = IntToStr(val.HeartRateMeasurement) + "bpm"; Memo1->Lines->Add("HRM update..."); }
ButtonStopMonitor
コンポーネントのOnClick
イベントを(ダブルクリックして)作成し、次のコードを追加します。- 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;
- 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; }
アプリケーションの実行
デバイスでアプリケーションを実行するには、[実行]をクリックするか F9 を押します。
- [Connect]ボタンをクリックすると、Polar H7 心拍数モニタに接続します。
- [Start Monitoring]ボタンをクリックすると、デバイスの測定結果のデータ更新の受信が始まります。
- [Stop Monitoring]ボタンをクリックすると、デバイスの測定結果のデータ更新の受信が停止します(キャラクタリスティックのサブスクライブ解除)。
- [Disconnect]ボタンをクリックすると、Polar H7 心拍数デバイスとの接続が解除されます。