BluetoothとBLE:その概要、ClassicとLow Energyの違い、仕組み

著者: IT Sectr 公開日: 2026-03-24 読了時間: 12 分

BluetoothとBluetooth Low Energyは、短距離データ伝送のためのワイヤレス通信規格です。Bluetooth Classic(BR/EDR)はオーディオやファイルの安定したストリーミングチャネルを提供し、BLEはセンサーや周辺機器とのエネルギー効率の高い動作に最適化されています。Bluetooth SIG、2025年によると、毎年50億以上のBLE対応デバイスが出荷されており、この規格はIoT、ウェアラブル電子機器、モバイルアクセサリーの基盤となっています。

重要ポイント

  • Bluetooth Classic — 最大3 Mbit/s、消費電力10~30 mAの連続オーディオおよびデータ伝送のためのBR/EDR規格
  • Bluetooth Low Energy — ピーク電流5~15 mA、バッテリー寿命数年までの少量データ間欠伝送プロトコル
  • GATTプロファイル — モバイルアプリが周辺デバイスの特性を読み取る方法を定義する統一クライアント-サーバーモデル
  • Advertising — BLEデバイスが中央デバイス(スマートフォン)に発見されるために定期的にビーコンパケットを送信する仕組み
  • iOSとAndroid — 各プラットフォームは異なるAPI(Core Bluetoothとandroid.bluetooth)を使用するが、両方ともGATTをサポートしており、コードは最小限の変更で移植可能

BluetoothとBLEとは?

Bluetoothは、2.4 GHz ISMバンドで動作するワイヤレスパーソナルエリアネットワーク(WPAN)規格であり、最大100メートルの距離でのデバイス通信のために設計されています。IEEE 802.15.1仕様は物理層とMAC層を定義し、Bluetooth SIGスタックは特定のシナリオ(オーディオヘッドセット(HSP)、ファイル転送(OPP)、キーボード入力(HID))のための高レベルプロファイルを定義します。

この規格はバージョン4.0(2010年)以降、2つのブランチに分かれました:Bluetooth Classic(BR/EDR — Basic Rate / Enhanced Data Rate)とBluetooth Low Energy(BLE、旧Bluetooth Smart)です。Classicは連続ストリーム(オーディオ通話、音楽、ファイル)向けに設計されています。BLEは、データが数十秒または数分の間隔を置いて短いパケットで送信されるアプリケーション(心拍数モニター、タグ、温度センサー)向けに作られました。

Bluetooth SIG(2025年)によると、新しいスマートフォンの99%が両方のバージョンをサポートしており、BLEエコシステムはBlood PressureからEnvironmental Sensingまで15以上のプロファイルタイプを誇っています。

Bluetooth Classic vs BLE:比較

ClassicとBLEの選択はシナリオに依存します:オーディオストリーミングにはClassicのみが適しており、1時間に1回センサーをポーリングする場合にはBLEのみが適しています。BR/EDRは1 MHz間隔の79チャネルと適応周波数ホッピング(AFH)を使用し、Wi-Fi干渉に対する耐性を提供します。

パラメータBluetooth Classic(BR/EDR)Bluetooth Low Energy(BLE)
データ転送速度1~3 Mbit/s(EDR)125 kbit/s ~ 2 Mbit/s(LE 2M PHY)
ピーク電流10~30 mA5~15 mA
エアタイム約100 ms約3 ms
トポロジーPiconet(1マスター、最大7スレーブ)Broadcaster / Observer / Peripheral / Central
プロファイルHFP、A2DP、HSP、SPP、OPPGATTベース(HRS、BLS、CTSなど)
代表的なデバイスヘッドセット、スピーカー、車載ハンズフリーフィットネストラッカー、タグ、心拍数モニター、IoTセンサー
互換性物理層でBLEと互換性なしデュアルモードチップが両方のスタックをサポート

BLE 5.xは、最大1 km(開けた場所)までの到達距離を延ばすLE Coded PHYと、LC3コーデックを使用するLE Audioを追加しました。新しいバージョンは、オーディオシナリオにおけるClassicとBLEの境界を徐々に曖昧にしています。

BLEアーキテクチャ:コントローラー、ホスト、アプリケーション

BLEスタックは3つの層に分かれています:コントローラー(Controller)(物理層とリンク層)、ホスト(Host)(L2CAP、ATT、GATT、セキュリティマネージャー)、アプリケーション(Application)(アプリ内でのプロファイル実装)。この分離により、チップメーカーはファームウェアにコントローラーを実装し、モバイルアプリ開発者はGATT抽象化のみを扱うことができます。

リンク層(LL)はエアタイムを管理します:デバイスはStandby、Advertising、Scanning、Initiating、Connectionの状態を切り替えます。Connected状態では、CentralとPeripheralが接続間隔(データパケットを交換する頻度)について合意します。標準的な間隔は7.5~1000 msです。交換頻度が高いほど、スループットが高くなり、消費電力も大きくなります。

セキュリティマネージャー(SM)は、ペアリングプロトコルを介した鍵交換によるAES-128暗号化を実装します。3つのモードがあります:Just Works(PIN入力なし)、Passkey Entry(画面に6桁のコードを表示)、OOB(NFCまたはQR)です。ウェアラブルデバイスでは通常Just Worksが使用され、医療機器では追加検証付きのOOBが使用されます。

Bluetooth Core Specification 5.4(2023年)によると、LE Secure Connectionsモードでの安全な接続設定時間は、接続間隔30 msで300 msを超えません。

GATTプロファイル:サービス、キャラクタリスティック、ディスクリプタ

ATT(属性プロトコル)は、サーバー(周辺デバイス)が属性を保存し、クライアント(スマートフォン)がそれらを読み書きする基本的なトランスポートモデルです。GATT(汎用属性プロファイル)は、ATTの上に階層(Service → Characteristic → Descriptor)を構築します。

各サービスは、1つのデバイス機能を記述するキャラクタリスティックの論理グループです:Heart Rate Service(UUID 0x180D)には、通知を制御するClient Characteristic Configuration Descriptor(0x2902)を持つHeart Rate Measurementキャラクタリスティック(UUID 0x2A37)が含まれています。モバイルアプリ開発者はdiscoverServices()を通じてサービスのリストを取得し、UUIDで目的のキャラクタリスティックを見つけて通知を購読します。

BLEは、標準化されたBluetooth SIGサービスには16ビットUUIDを、カスタムメーカーサービスには128ビットUUIDを使用します。例えば、トラッカーケースは、バッテリー充電レベルを送信するためのキャラクタリスティックを持つA000-…サービスを定義できます。

Kotlin(Android)でのGATT操作の例

kotlin
private val gattCallback = object BluetoothGattCallback() {
    override fun onServicesDiscovered(
        gatt: BluetoothGatt, status: Int
    ) {
        val service = gatt.getService(UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb"))
        val char = service?.getCharacteristic(
            UUID.fromString("00002a37-0000-1000-8000-00805f9b34fb")
        )
        gatt.setCharacteristicNotification(char, true)
    }

    override fun onCharacteristicChanged(
        gatt: BluetoothGatt, char: BluetoothGattCharacteristic
    ) {
        val heartRate = char.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 1)
        updateUi("心拍数: $heartRate 拍/分")
    }
}

この例では、アプリは標準のBluetooth SIG UUIDでHeart Rateサービスを見つけ、心拍数測定キャラクタリスティックを取得し、その通知を購読します。心拍数が変化するたびに、周辺デバイスはCentralからの明示的な要求なしにデータを送信します。

Advertising、スキャン、接続確立

AdvertisingはBLEの重要なメカニズムであり、Peripheralデバイスが3つのプライマリチャネル(37、38、39)で定期的にブロードキャストパケット(advertising PDU)を送信します。中央デバイスはこれらのチャネルをスキャンし、advertisingデータを受信して接続を開始できます。

Advertisingパケットには最大31バイトのペイロードが含まれます:フラグ、TX電力レベル、ローカル名、サービスUUID、メーカー固有データ。これは、接続を確立せずにセンサー測定値を送信するのに十分です(コネクションレスモード、Broadcasterタイプ)。継続的なデータ送信(例:1分に1回の温度)には、最大1000 msの接続間隔での接続が使用されます。

モバイルプラットフォームでは、スキャンはstartScan()(Android)またはscanForPeripherals()(iOS)を介して開始されます。サービスUUIDによるフィルタリングは、表示されているすべてのデバイスを処理しないことでエネルギーを節約します。アプリは関連するタグまたはセンサーのみのコールバックを受け取ります。

Swift(iOS)でのBLEデバイススキャンの例

swift
import CoreBluetooth

class ScannerViewController: UIViewController {
    private var centralManager: CBCentralManager!

    override func viewDidLoad() {
        centralManager = CBCentralManager(
            delegate: self, queue: nil
        )
    }

    func centralManagerDidUpdateState(central: CBCentralManager) {
        if central.state == .poweredOn {
            centralManager.scanForPeripherals(
                withServices: nil, options: nil
            )
        }
    }

    func centralManager(
        central: CBCentralManager,
        didDiscover peripheral: CBPeripheral,
        advertisementData: [String : Any],
        rssi RSSI: NSNumber
    ) {
        if let name = advertisementData[CBAdvertisementDataLocalNameKey] {
            print("デバイスが見つかりました: \(name)")
        }
    }
}

デバイスを発見した後、CentralはCBPeripheralオブジェクトを渡してconnect()を呼び出します。接続パラメータ(間隔、レイテンシ、監視タイムアウト)はリンク層レベルでネゴシエーションされます。開発者はこれらを直接管理しませんが、AndroidのrequestConnectionPriorityを介して影響を与えることができます。

モバイル開発におけるBluetooth LE:Core Bluetoothとandroid.bluetooth

両方のモバイルプラットフォームは、BLEを操作するためのネイティブAPIを提供します。Core Bluetooth(iOS)はデリゲートアプローチを使用します。セントラルマネージャーが操作を開始し、周辺オブジェクトがデリゲートメソッドを介して結果を報告します。android.bluetooth(Android)はコールバックインターフェース上に構築されており、複数のデバイスとの並列GATT操作をサポートしています。

プラットフォーム間の主な違い:

  • iOS — 最大7つの同時接続をサポート。バックグラウンドBLEモードにはUIBackgroundModes = bluetooth-centralが必要。フォアグラウンドを離れた後、システムはコールバックを数分遅延させる可能性がある
  • Android — 固定の接続制限なし(メモリによる制限)。BLUETOOTH_SCANおよびBLUETOOTH_CONNECTの許可が必要(Android 12以上)。信頼性の高いバックグラウンドスキャンにはフォアグラウンドサービスが必要
  • Flutter — flutter_blue_plusパッケージは、統一されたDartインターフェースでプラットフォームAPIを抽象化。スキャンおよびGATT操作のコードは両方のプラットフォームで同一

Bluetooth SIGのテスト(2024年)によると、スマートフォンとフィットネストラッカーの間のBLE接続時間は、Androidで平均150~300 ms、iOSで100~250 msです。この差は無線周波数モジュール管理ポリシーによるものです。

Dart(Flutter)でのBLE接続の例

dart
import 'package:flutter_blue_plus/flutter_blue_plus.dart';

class BleService {
  final FlutterBluePlus fbp = FlutterBluePlus();

  Future<void> scanAndConnect(String deviceName) async {
    await fbp.startScan(timeout: Duration(seconds: 15));

    await for (final result in fbp.scanResults) {
      if (result.device.advName == deviceName) {
        await fbp.stopScan();
        await result.device.connect();
        break;
      }
    }
  }
}

Flutter開発者は統一されたAPIインターフェースを取得し、内部ではflutter_blue_plusが呼び出しをネイティブのandroid.bluetoothまたはCore Bluetoothに変換します。このアプローチにより、両方のプラットフォームでBLEペリフェラルを操作するためのアプリ開発時間が短縮されます。

よくある質問

Bluetooth ClassicとBLEの違いは何ですか?

Bluetooth Classic(BR/EDR)は連続ストリーミング(オーディオ通話、音楽、ファイル転送)向けに設計されています。BLEは最小限の消費電力で短いデータパケット(センサー、タグ、フィットネストラッカー)向けに最適化されています。Classicは10~30 mA、BLEはピーク時5~15 mAを消費します。

Bluetooth ClassicとBLEは互換性がありますか?

物理層では互換性がありません。変調方式とチャネルマップが異なります。ただし、最近のほとんどのチップはデュアルモードであり、両方のスタックを実装しています。デュアルモードチップを搭載したスマートフォンは、ClassicヘッドセットとBLEトラッカーの両方と同時に通信できます。

BLEの接続間隔とは何ですか?

接続間隔とは、確立された接続内での2つのデータパケット間の時間です。値は7.5 msから4秒の範囲です。間隔が短いほど、スループットが高くなり消費電力も大きくなります。1分に1回報告する温度センサーでは、1000 msの間隔が使用されます。

BLEのペアリングはどのように機能しますか?

ペアリングはCentralとPeripheral間の暗号化鍵の交換プロセスです。BLEは3つの方法をサポートしています:Just Works(確認なし)、Passkey Entry(画面にPINを入力)、OOB(NFCまたはQRを介した交換)。ペアリング後、デバイスは鍵を保存(ボンディング)し、後続の接続で再認証を要求しません。

モバイルアプリケーションではどのBLEプロファイルが使用されていますか?

最も一般的なもの:心拍数モニター用のHeart Rate Profile(0x180D)、血圧計用のBlood Pressure Profile(0x1810)、温度・湿度センサー用のEnvironmental Sensing(0x181A)、充電レベル用のBattery Service(0x180F)、モデルとシリアル番号用のDevice Information(0x180A)です。

まとめ

  • Bluetoothは2.4 GHz帯のWPAN規格であり、バージョン4.0からClassic(BR/EDR)とLow Energy(BLE)に分かれている
  • Bluetooth Classicは最大3 Mbit/sの速度を提供し、オーディオヘッドセットやファイル転送に使用される
  • BLEは低消費電力(5~15 mA)向けに最適化されており、IoT、フィットネストラッカー、センサーで使用される
  • GATTプロファイルは、ATTプロトコルを介した交換により、データをService → Characteristic → Descriptor階層に整理する
  • Advertisingにより、周辺デバイスは3つのプライマリチャネルで接続を確立せずにデータを送信できる
  • iOS(Core Bluetooth)とAndroid(android.bluetooth)は、バックグラウンド動作と権限に対して異なるアプローチを持つネイティブAPIを提供する
  • Flutter(flutter_blue_plus)は、クロスプラットフォーム開発のために単一のDartインターフェースでプラットフォームAPIを統合する

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください