Centralとは — BLEにおける役割とデバイススキャンの仕組み

著者: IT Sectr 公開日: 2026-07-15 読了時間: 8 分

CentralはBluetooth Low Energyアーキテクチャにおいて、スキャンを開始し、接続を確立し、ペリフェラルデバイスとのデータ交換を管理するデバイスです。モバイル開発の文脈では、CentralはiOSまたはAndroidのスマートフォンやタブレットであり、BLEセンサー、フィットネストラッカー、スマートアクセサリに接続します。Bluetooth Core Specification 5.4(2023)によると、Centralは最大7つの異なるPeripheralとの同時接続をサポートできますが、実際の制限はチップメーカーとOSバージョンによって異なります。iOSのCore BluetoothとAndroidのandroid.bluetooth.leは、Centralロールを管理するための完全なAPIを提供します。

重要なポイント

  • Centralは、スキャン、接続、ペリフェラルとのデータ交換を管理するアクティブなBLEデバイスです。
  • スキャンはアドバタイジングパケットを介して実行されます。CentralはService UUIDでデバイスをフィルタリングして省電力化できます。
  • 1つのCentralは、最大7つの接続を異なるPeripheralと同時にサポートできます(実装による)。
  • モバイル開発では、CentralはCore Bluetooth(iOS)またはandroid.bluetooth.le(Android)を使用するスマートフォンです。
  • Centralロールは、常時スキャンとデータ処理のため、Peripheralよりも多くの電力を消費します。

BLEにおけるCentralとは?

CentralはBluetooth Low EnergyアーキテクチャにおけるGATTクライアントであり、すべての通信を開始します。受動的に接続を待ち、サービスをアドバタイズするPeripheralとは異なり、Centralは能動的に電波をスキャンし、アドバタイジングパケットを発見して接続を開始します。

非対称なCentral-PeripheralモデルはBLEの基本的な特徴です。Centralは相互作用のロジックを管理します。どのデバイスに接続するか、どのサービスを探索するか、どの特性を読み書きするかを決定します。Peripheralはデータサーバーとして機能し、サービスと特性を保存しますが、接続は開始しません。

Bluetooth Core Specification 5.4(2023)によると、デバイスはCentralとPeripheralの両方(デュアルロール)として同時に機能できます。たとえば、スマートフォンはフィットネスバンドのCentralとして、またファイルを転送する別のスマートフォンのPeripheralとして機能できます。ただし、両方のロールで同時に動作すると、消費電力と接続管理の複雑さが増加します。

モバイル開発エコシステムでは、Centralロールが最も一般的なシナリオです。スマートフォンのアプリはBLEデバイス(センサー、ヘッドフォン、バンド)を検索し、接続してデータを受信します。開発者はオペレーティングシステムのAPIを使用してCentralを操作します。iOSではCBCentralManager、AndroidではBluetoothLeScannerとBluetoothGattを使用します。

デバイススキャンプロセス

スキャンはCentralの動作の第一段階です。デバイスはBLE無線チャンネル(37、38、39)をリッスンして、Peripheralが定期的に送信するアドバタイジングパケットを検出します。各アドバタイジングパケットには、デバイス名、Service UUIDのリスト、カスタムデータが含まれています。

Centralは2つのスキャンモードで動作できます。パッシブスキャン(アドバタイジングパケットの受信のみ)とアクティブスキャン(スキャン応答を介して追加データを取得するためのスキャン要求の送信)です。パッシブスキャンは省電力ですが、得られる情報は少なくなります。アクティブスキャンでは、デバイス名や完全なサービスリストを含む、アドバタイジングパケットの完全なデータを取得できます。

UUIDによるフィルタリングは重要な最適化です。Centralは特定のService UUIDを持つデバイスのみをスキャンし、残りを無視できます。これにより、電力が節約されるだけでなく、アプリケーションのロジックも簡素化されます。デリゲートは関連するデバイスのみを受信します。

swift
import CoreBluetooth

class BLECentralManager: NSObject, CBCentralManagerDelegate {

    private var centralManager: CBCentralManager!

    override init() {
        super.init()
        centralManager = CBCentralManager(
            delegate: self,
            queue: nil
        )
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            central.scanForPeripherals(
                withServices: nil,
                options: [
                    CBCentralManagerScanOptionAllowDuplicatesKey: false
                ]
            )
        }
    }
}

接続管理

接続管理はCentralの主要な責任です。適切なPeripheralを発見した後、Centralは接続を開始します。BLE接続は、接続間隔、スレーブレイテンシ、スーパービジョンタイムアウトなどのパラメータ交換を含む接続確立手順を通じて確立されます。

接続間隔は、接続後にCentralとPeripheralがデータを交換する頻度を決定します。間隔は7.5ミリ秒から4秒の範囲です。間隔が短いほどスループットは高くなりますが、消費電力も大きくなります。スレーブレイテンシにより、Peripheralは省電力のために複数の接続イベントをスキップできます。スーパービジョンタイムアウトは、応答がない最大時間であり、これを超えると接続が失われたと見なされます。

Centralはデータ交換の完了後に接続を終了する責任があります。BLEデバイスは通常、永続的に接続を維持しません。Centralは接続し、データを取得し、切断します。これはIoTセンサーの標準的なパターンです。Centralがスキャンし、温度センサーを見つけ、接続し、値を読み取り、切断します。

パラメータ範囲目的推奨
接続間隔7.5 ms – 4 sデータ交換頻度ストリーミング: 30–50 ms、間欠データ: 1–4 s
スレーブレイテンシ0–499イベントPeripheralイベントのスキップセンサー省電力: 4–10
スーパービジョンタイムアウト100 ms – 32 s接続損失タイムアウトほとんどのシナリオ: 6–10秒
MTU23–517 バイトATTパケットサイズ接続時に最大を要求

iOSのCentral:Core Bluetooth

Core Bluetoothは、iOSおよびmacOSでBLEを操作するためのAppleのフレームワークです。CBCentralManagerクラスは、Centralロールを実装するための完全なAPI(スキャン、接続、接続管理)を提供します。iOSでのCentralの操作はデリゲートモデルに基づいています。CBCentralManagerDelegateが状態変更、デバイス発見、接続結果のイベントを受信します。

iOSでのCentralの主要な手順:CBCentralManagerの初期化、Bluetooth状態の確認、スキャンの開始、デリゲートを介した発見デバイスの処理、選択したPeripheralへの接続、サービスと特性の発見、データ交換。

swift
// 発見したPeripheralに接続
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // Peripheralへの参照を保持して接続
    discoveredPeripheral = peripheral
    central.connect(peripheral, options: nil)
}

// 接続成功
func centralManager(
    _ central: CBCentralManager,
    didConnect peripheral: CBPeripheral
) {
    peripheral.delegate = self
    peripheral.discoverServices(nil)
}

iOSはバックグラウンドでのBLE動作を制限しています。バックグラウンドでは、アプリはInfo.plistの特定のキーでのみスキャンでき、接続されたデバイスはCentralにデータ変更を通知できます。重要なアプリケーション(医療機器)の場合は、bluetooth-centralキーを使用したバックグラウンドモードを使用してください。

AndroidのCentral:BluetoothLeScanner

Androidは、BLEデバイスをスキャンするためのBluetoothLeScanner APIと、接続管理のためのBluetoothGattを提供します。Android 5.0(API 21)以降、BluetoothLeScannerは非推奨のstartLeScanを置き換えました。このAPIにはBLUETOOTH、BLUETOOTH_ADMIN、ACCESS_FINE_LOCATIONの権限(Android 10+の場合はACCESS_BACKGROUND_LOCATION)が必要です。

java
import android.bluetooth.le.*;
import android.bluetooth.*;

private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;

// スキャンを設定
ScanSettings settings = new ScanSettings.Builder()
    .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
    .build();

// スキャンを開始
scanner.startScan(null, settings, new ScanCallback() {
    @Override
    public void onScanResult(
            int callbackType,
            ScanResult result
    ) {
        BluetoothDevice device = result.getDevice();
        // デバイスに接続
        bluetoothGatt = device.connectGatt(
            context, false, gattCallback
        );
    }
});

Androidでは、スキャン制限を考慮することが重要です。Android 7(API 24)以降、位置情報を使用しないアプリでは、30秒間に5回を超えてスキャンを開始できません。Android 12+では、BLUETOOTH_SCAN、BLUETOOTH_CONNECT、ADVERTISEの権限と、これらの権限のランタイム要求が必要です。

Centralの消費電力

Centralの消費電力は、無線チャンネルを常時スキャンする必要があるため、Peripheralよりも高くなります。CentralはBLEパケットを受信し、処理し、接続を管理し、アプリケーションプロセッサで計算を実行することもよくあります。Bluetooth SIGによると、スキャンの消費電力はモードに応じて30 mAから100 mAの範囲です。

Centralの省電力戦略はいくつかあります。間欠スキャンは最も効果的な方法です。Centralは短いウィンドウ(スキャンウィンドウ)でスキャンし、長い休止(スキャン間隔)を取ります。たとえば、スキャンウィンドウ30 ms、スキャン間隔1000 msの場合、継続的スキャンと比較して消費電力が97%削減されます。

追加の最適化としてUUIDフィルタリングがあります。Centralは関連するアドバタイジングパケットのみを迅速に処理し、残りを無視します。これによりCPU負荷が軽減され、デバイスのバッテリー寿命が延びます。また、目的のデバイスを見つけたらすぐにスキャンを停止し、必要以上に接続を維持しないことをお勧めします。

よくある質問

スマートフォンはCentralとPeripheralを同時に務められますか?

はい、BLEはデュアルロールをサポートしています。デバイスは一部のデバイスに対してCentralとして、他のデバイスに対してPeripheralとして同時に機能できます。たとえば、スマートフォンがセンサーからデータを読み取り(Centralとして)、同時に別のデバイスにデータを送信するために自身のサービスをアドバタイズ(Peripheralとして)できます。

Centralは同時にいくつのデバイスを処理できますか?

BLE仕様では、1つのCentralに対して最大7接続の制限を定めています。実際には、制限はチップメーカーによって異なります。Nordic nRF52840チップは最大20接続をサポートしますが、一部の安価なBluetoothアダプターは3〜4接続までしかサポートしません。

CentralがBLEセンサーを検出しないのはなぜですか?

理由はさまざまです。センサーがアドバタイズしていない(アドバタイズモードでない)、UUIDフィルターが厳しすぎる、スマートフォンのBluetoothがオフ、必要な権限がない(Androidの位置情報)、またはセンサーが範囲外(屋内では最大10メートルを推奨)などが考えられます。

BLEデバイスとの接続を常に維持する必要がありますか?

必ずしも必要ではありません。多くのシナリオでは、接続して読み取るパターンが使用されます。Centralがスキャンし、接続し、必要なデータを読み取り、切断します。常時接続が必要なのは、ストリーミングデータ(脈拍、心電図)やリアルタイムデバイス制御の場合のみです。

スキャン中のCentralの消費電力を抑えるには?

スキャンウィンドウ30〜50 ms、スキャン間隔500〜1000 msの間欠スキャンを使用します。UUIDでデバイスをフィルタリングして、関連するアドバタイジングパケットのみを処理します。目的のPeripheralを見つけたらすぐにスキャンを停止してください。

まとめ

  • CentralはBLE接続のアクティブな参加者であり、スキャン、接続、データ交換管理を開始します。
  • スキャンプロセスでは、Service UUIDでフィルタリング可能なチャンネル37、38、39でのアドバタイジングパケットの受信が含まれます。
  • Peripheralを発見後、Centralは設定可能なパラメータ(接続間隔、スレーブレイテンシ、スーパービジョンタイムアウト)で接続を確立します。
  • モバイル開発では、CentralはCBCentralManager(iOS)またはBluetoothLeScanner + BluetoothGatt(Android)を介して実装されます。
  • 1つのCentralは標準的なBluetooth構成で最大7つの接続を同時に管理できます。
  • Centralの消費電力は、間欠スキャンとUUIDフィルタリングによって最適化し、バッテリー寿命を延ばせます。
  • 発見から切断までの適切な接続ライフサイクル管理が、BLEアプリケーションの効率を決定します。

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

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

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

こちらもお読みください