tauri-plugin-blec を使用して、周囲の BLE デバイスをスキャンする方法です。このプラグインはクロスプラットフォームな BLE クライアントを提供します。
前提条件
1. Rust 側のプラグインインストール
src-tauri ディレクトリに移動して、以下のコマンドを実行します。
cargo add tauri-plugin-blec
2. フロントエンド側のパッケージインストール
プロジェクトのルートディレクトリで以下のコマンドを実行します。
npm add @mnlphlp/plugin-blec
3. プラグインの登録
src-tauri/src/lib.rs にプラグインを登録します。
tauri::Builder::default()
.plugin(tauri_plugin_blec::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
4. Permissions(権限)の設定
src-tauri/capabilities/default.json に以下の権限を追加します。
{
"permissions": [
...,
"blec:default"
]
}
1. 基本的なスキャンの実行
フロントエンド(TypeScript)から BLE デバイスのスキャンを実行します。
import { startScan, stopScan, type BleDevice } from '@mnlphlp/plugin-blec';
// 発見されたデバイスを保持する配列
let devices: BleDevice[] = [];
// スキャンを開始(タイムアウト: 10秒)
async function scanForDevices() {
devices = [];
await startScan(
(foundDevices) => {
// スキャン中にデバイスが発見されるたびに呼ばれる
devices = foundDevices;
console.log('発見されたデバイス:', devices);
},
10000 // タイムアウト(ミリ秒)
);
}
// スキャンを手動で停止
async function cancelScan() {
await stopScan();
}
2. BleDevice の構造
startScan で取得できる BleDevice オブジェクトには以下の情報が含まれます。
| プロパティ名 | 型 | 説明 |
|---|---|---|
address | string | デバイスのアドレス(MAC アドレスまたは UUID) |
name | string | デバイスの表示名 |
rssi | number | 受信信号強度(dBm)。値が大きいほど近い |
isConnected | boolean | 現在接続中かどうか |
isBonded | boolean | ペアリング済みかどうか |
services | string[] | アドバタイズしているサービス UUID の配列 |
manufacturerData | Record<number, number[]> | メーカー固有データ(キー: 企業ID) |
serviceData | Record<string, number[]> | サービス固有データ(キー: サービスUUID) |
3. スキャン状態の監視
スキャン中かどうかを監視することもできます。
import { getScanningUpdates } from '@mnlphlp/plugin-blec';
// スキャン状態が変わるたびに呼ばれる
getScanningUpdates((isScanning) => {
console.log('スキャン中:', isScanning);
});
4. 権限の確認
BLE を使用するには OS からの権限が必要です。権限が付与されているかを確認できます。
import { checkPermissions } from '@mnlphlp/plugin-blec';
async function ensurePermissions() {
// askIfDenied: true の場合、権限がなければユーザーに許可を求める
const granted = await checkPermissions(true);
if (!granted) {
console.error('Bluetooth の権限が付与されていません');
return false;
}
return true;
}
注意点
- スキャン結果はリアルタイムで更新されるため、UI を適切に更新するようにしてください。