12,925
回編集
(→使用例) |
(→使用例) |
||
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デバイスのスキャンを管理するクラス |