FlutterBluePlusでFlutterアプリにBluetooth LE機能を簡単実装!BLE通信パッケージ解説

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}',
      );
    }
  });
}

このコードでは以下を行っています。

  1. BLEスキャンを開始
  2. 検出結果を scanResults Streamで受信
  3. デバイス名と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]);
    }
  }
}

処理の流れは次の通りです。

  1. サービス探索
  2. Characteristic一覧取得
  3. 読み込み (read)
  4. 書き込み (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_plusBluetooth 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やスマートデバイス連携アプリを開発したい方は、ぜひ導入してみてください。

参考リンク

タイトルとURLをコピーしました