「Qtの基礎 - Bluetooth Low Energy」の版間の差分

ナビゲーションに移動 検索に移動
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デバイスのスキャンを管理するクラス

案内メニュー