13,009
回編集
|  (→使用例) |  (→使用例) | ||
| 165行目: | 165行目: | ||
| <br> | <br> | ||
| ==== 使用例 ==== | ==== 使用例 ==== | ||
| Qt Bluetoothモジュールを使用したBLEスキャンの処理を以下に示す。<br> | |||
| <br> | |||
| * QBluetoothDeviceDiscoveryAgentクラス | |||
| * QBluetoothDeviceInfoクラス | |||
| <br> | |||
| ===== デバイス探索エージェントの作成 ===== | |||
| QBluetoothDeviceDiscoveryAgentのインスタンスを生成する。<br> | |||
| <br> | |||
|  <syntaxhighlight lang="c++"> | |||
|  #include <QBluetoothDeviceDiscoveryAgent> | |||
|  QBluetoothDeviceDiscoveryAgent discoveryAgent; | |||
|  </syntaxhighlight> | |||
| <br> | |||
| ===== シグナル / スロット接続 ===== | |||
| * QBluetoothDeviceDiscoveryAgent::deviceDiscoveredシグナル | |||
| *: デバイスを発見した時に送信される。 | |||
| * QBluetoothDeviceDiscoveryAgent::finished | |||
| *: スキャンが完了した時に送信される。 | |||
| * QBluetoothDeviceDiscoveryAgent::error | |||
| *: エラーが発生した時に送信される。 | |||
| <br> | |||
|  <syntaxhighlight lang="c++"> | |||
|  // デバイス発見時 | |||
|  connect(discoveryAgent, &QBluetoothDeviceDiscoveryAgent::deviceDiscovered, this, &MyClass::onDeviceDiscovered); | |||
|  // スキャン完了時 | |||
|  connect(discoveryAgent, &QBluetoothDeviceDiscoveryAgent::finished, this, &MyClass::onScanFinished); | |||
|  // エラー発生時 | |||
|  // エラーハンドリングは必ず実装する | |||
|  connect(discoveryAgent, &QBluetoothDeviceDiscoveryAgent::error, this, &MyClass::onError); | |||
|  </syntaxhighlight> | |||
| <br> | |||
| ===== スキャン開始 ===== | |||
| <code>QBluetoothDeviceDiscoveryAgent::LowEnergyMethod</code>メソッドを指定して、<code>QBluetoothDeviceDiscoveryAgent::start</code>メソッドを実行する。<br> | |||
| これによりBLEデバイスのスキャンが開始する。<br> | |||
| <br> | |||
|  <syntaxhighlight lang="c++"> | |||
|  discoveryAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod); | |||
|  </syntaxhighlight> | |||
| <br> | |||
| ===== デバイス発見時 ===== | |||
| <code>QBluetoothDeviceDiscoveryAgent::deviceDiscovered</code>シグナルで通知する。<br> | |||
| <code>QBluetoothDeviceInfo</code>クラスを使用して、以下に示す情報を取得することが可能である。<br> | |||
| * デバイス名 | |||
| * アドレス | |||
| * 信号強度 (RSSI値) | |||
| * サービスUUID | |||
| * マニファクチャラーデータ | |||
| <br> | |||
| <u>ただし、これらの情報を取得する前は、必ず存在確認を行う。</u><br> | |||
| <br> | |||
|  <syntaxhighlight lang="c++"> | |||
|  void onDeviceDiscovered(const QBluetoothDeviceInfo &device) | |||
|  { | |||
|     // デバイス名の取得 | |||
|     QString name = device.name(); | |||
|     // アドレスの取得 | |||
|     QString address = device.address().toString(); | |||
|     // RSSI値の取得 | |||
|     qint16 rssi = device.rssi(); | |||
|     // サービスUUIDの取得 | |||
|     QList<QBluetoothUuid> services = device.serviceUuids(); | |||
|     // マニファクチャラーデータの取得 | |||
|     QMap<quint16, QByteArray> manufacturerData = device.manufacturerData(); | |||
|  } | |||
|  </syntaxhighlight> | |||
| <br> | |||
| ===== スキャン完了時 ===== | |||
| <code>QBluetoothDeviceDiscoveryAgent::finished</code>シグナルで送信する。<br> | |||
| <br> | |||
| スキャン完了時の処理を記述する。<br> | |||
| また、必要に応じて再スキャンを開始する。<br> | |||
| <br> | |||
|  <syntaxhighlight lang="c++"> | |||
|  void onScanFinished() | |||
|  { | |||
|     // 必要に応じて再スキャン | |||
|     discoveryAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod); | |||
|  } | |||
|  </syntaxhighlight> | |||
| <br> | |||
| ===== エラー発生時 ===== | |||
| リソースの解放は適切に行う。<br> | |||
| <br> | |||
|  <syntaxhighlight lang="c++"> | |||
|  void onError(QBluetoothDeviceDiscoveryAgent::Error error) | |||
|  { | |||
|     switch (error) { | |||
|        case QBluetoothDeviceDiscoveryAgent::NoError: | |||
|             break; | |||
|        case QBluetoothDeviceDiscoveryAgent::InputOutputError: | |||
|             break; | |||
|        case QBluetoothDeviceDiscoveryAgent::PoweredOffError: | |||
|             break; | |||
|        case QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError: | |||
|             break; | |||
|        case QBluetoothDeviceDiscoveryAgent::UnsupportedPlatformError: | |||
|             break; | |||
|        case QBluetoothDeviceDiscoveryAgent::UnsupportedDiscoveryMethod: | |||
|             break; | |||
|        default: | |||
|             break; | |||
|     } | |||
|  } | |||
|  </syntaxhighlight> | |||
| <br> | |||
| ===== スキャン停止 ===== | |||
|  <syntaxhighlight lang="c++"> | |||
|  discoveryAgent->stop(); | |||
|  </syntaxhighlight> | |||
| <br> | |||
| ===== 組み合わせ ===== | |||
|   <syntaxhighlight lang="c++"> |   <syntaxhighlight lang="c++"> | ||
|   // BLEデバイスのスキャンを管理するクラス |   // BLEデバイスのスキャンを管理するクラス | ||