flutter_blue_plusとは?
flutter_blue_plus は、Flutter向けのBluetooth Low Energy(BLE)通信ライブラリです。従来の flutter_blue をベースに継続開発されており、安定性とクロスプラットフォーム対応に優れています。BLE Central Role に対応しており、スマートデバイスやセンサーとの通信を実現できます。
主な特徴:
- BLE通信に特化:Bluetooth Low Energyデバイスとの通信を簡単に実装可能
- クロスプラットフォーム対応:Android・iOS・macOS・Linux・Webに対応
- スキャンから通信まで対応:デバイス探索、接続、Characteristic操作を一通りサポート
- イベントベースAPI:Streamを利用したリアルタイム状態監視
- 依存関係が少なく安定:Flutter本体以外の依存がほぼない構成
- 複数デバイス接続対応:マルチデバイスBLE通信にも対応
インストール方法
まずは pubspec.yaml にパッケージを追加します。
YAML
dependencies:
flutter_blue_plus: ^2.3.3
続いてパッケージをインストールします。
Bash
flutter pub get
または以下のコマンドでも追加できます。
Bash
flutter pub add flutter_blue_plus
Androidでは minSdkVersion 21 以上が必要です。(Dart packages)
基本的な使い方
まずはBLEデバイスをスキャンしてみましょう。
Dart
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
Future<void> startScan() async {
await FlutterBluePlus.startScan(timeout: const Duration(seconds: 4));
FlutterBluePlus.scanResults.listen((results) {
for (ScanResult result in results) {
print(
'${result.device.platformName} '
'${result.device.remoteId}',
);
}
});
}
このコードでは以下を行っています。
- BLEスキャンを開始
- 検出結果を
scanResultsStreamで受信 - デバイス名とIDを表示
flutter_blue_plus はStreamベースで設計されているため、スキャン結果や接続状態をリアルタイムで監視できます。
BLEデバイスへ接続する
スキャンしたデバイスへ接続してみます。
Dart
Future<void> connect(BluetoothDevice device) async {
await device.connect();
device.connectionState.listen((state) {
print('connection: $state');
});
}
connectionState を監視することで、接続・切断状態をリアルタイムで取得できます。
BLE通信では接続切れへの対応が重要ですが、Stream監視によって状態管理をシンプルに実装できます。
Characteristicの読み書き
BLE通信では、サービス(Service)内にあるCharacteristicを読み書きしてデータをやり取りします。
以下はCharacteristicを読み込み、書き込みする例です。
Dart
Future<void> readWrite(BluetoothDevice device) async {
List<BluetoothService> services =
await device.discoverServices();
for (BluetoothService service in services) {
for (BluetoothCharacteristic c in service.characteristics) {
// read
List<int> value = await c.read();
print(value);
// write
await c.write([1, 2, 3]);
}
}
}
処理の流れは次の通りです。
- サービス探索
- Characteristic一覧取得
- 読み込み (
read) - 書き込み (
write)
センサー値取得やIoT機器制御など、BLEアプリの中核となる機能です。
通知(Notification)を受け取る
BLEではCharacteristicの値変化を通知(Notification)として受信できます。
Dart
Future<void> subscribe(
BluetoothCharacteristic characteristic,
) async {
await characteristic.setNotifyValue(true);
characteristic.lastValueStream.listen((value) {
print(value);
});
}
この機能を使うことで、ポーリングせずリアルタイム通信が可能になります。
例えば以下の用途に向いています。
- 心拍数モニター
- 温度センサー
- IoT状態監視
- スマートデバイス通知
対応している機能一覧
| 機能 | 対応 |
|---|---|
| BLEスキャン | ✅ |
| BLE接続 | ✅ |
| Service探索 | ✅ |
| Characteristic読込 | ✅ |
| Characteristic書込 | ✅ |
| Notification | ✅ |
| Descriptor操作 | ✅ |
| RSSI取得 | ✅ |
| 複数デバイス接続 | ✅ |
| Bluetooth Classic | ❌ |
| BLE Peripheral Role | ❌ |
flutter_blue_plus は Bluetooth Classic(HC-05、ヘッドホン、スピーカー等)には対応していません。BLE専用ライブラリです。
互換性と対応プラットフォーム
対応プラットフォーム:
- Android
- iOS
- macOS
- Linux
- Web
- Windows(別パッケージ
flutter_blue_plus_winrt利用)
BLE APIはプラットフォーム差異がありますが、flutter_blue_plus はほぼ共通APIで扱えるため、クロスプラットフォーム開発でも実装負荷を抑えられます。
まとめ
flutter_blue_plus は、FlutterでBLE通信を実装する際の有力な選択肢です。
特に以下のようなアプリ開発で活躍します。
| 項目 | 内容 |
|---|---|
| 用途 | BLE通信アプリ |
| 難易度 | 中級 |
| クロスプラットフォーム | ✅ |
| Stream対応 | ✅ |
| Bluetooth Classic | ❌ |
| IoT・ウェアラブル開発 | ✅ |
BLE実装はネイティブ知識が必要になりがちですが、flutter_blue_plus を利用することでFlutterだけでもかなり実用的なBluetoothアプリを構築できます。
IoTやスマートデバイス連携アプリを開発したい方は、ぜひ導入してみてください。
参考リンク
- Pub.dev
https://pub.dev/packages/flutter_blue_plus - API Documentation
https://pub.dev/documentation/flutter_blue_plus/latest/
