BLEのAdvertising:概要、パケット形式、広告のメカニズム

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

Advertising(広告)はBluetooth Low Energyにおけるメカニズムで、Peripheralデバイスが3つの専用チャンネル(37、38、39)で短いデータパケットを送信して自身の存在を通知するものです。Bluetooth Core Specification 5.4(2023)は2種類の広告を定義しています:connectable — デバイスが接続可能な状態、non-connectable — 双方向通信を確立せずにデータのみを送信するビーコン(Beacon)で使用されます。広告のパラメータ — インターバル20 ms~10.24 s、送信電力-20~+10 dBm、パケットタイプ — はデバイスの検出速度と消費電力に直接影響し、バッテリー駆動のIoTデバイス開発において重要です。

重要なポイント

  • Advertisingは3つの専用チャンネル37、38、39で動作するBLEデバイス検出の主要メカニズムです。
  • 標準の広告パケットは31バイトのデータに制限されています。拡張広告(BLE 5.0)では制限が251バイトに増加します。
  • Connectable広告ではCentralがデバイスに接続できます。Non-connectableは一方向送信のみ(ビーコン)です。
  • 広告インターバルは消費電力に影響します:1000 msのインターバルでは、平均電流は100 msのときの10分の1です。
  • Scan responseを使用すると、Centralの要求に応じて追加の31バイトのデータを送信できます。

BLEのAdvertisingとは?

Advertising(広告)は、BLEデバイスが短いデータパケットを定期的に送信して自身の存在と利用可能性を通知するプロセスです。デバイスの検出に数秒かかるクラシックBluetoothとは異なり、BLE広告はミリ秒単位でデバイスを検出でき、消費電力は最小限です。

BLEアーキテクチャはデバイスを2つの役割に分割します:Peripheral(広告を送信)とCentral(スキャン)。Peripheralが広告パケットを送信し、Centralが電波をスキャンして接続するか判断します。この非対称モデルがBLEの重要な利点です:広告送信デバイスは常に電波を listening するのではなく、短いパケットの送信にのみエネルギーを消費します。

広告プロセスは3つの段階で構成されます:advertising event(3つのチャンネルすべてにパケットを送信)、scan request/response(Centralとのオプションの交換)、connection request(Centralによる接続開始)。各段階はLink LayerレベルでBluetooth Controllerによって管理されます。

広告チャンネルとその役割

BLEは2.4 GHz帯で40チャンネルを使用し、そのうち37(2402 MHz)、38(2426 MHz)、39(2480 MHz)が広告専用に割り当てられています。3つのチャンネルは検出の信頼性とスループットの妥協点です:1つのチャンネルがWi-Fiや他の干渉で占有されても、他の2つのチャンネルでデバイスが検出されます。

チャンネル37はWi-Fiチャンネル1の近く、チャンネル39はWi-Fiチャンネル6の近く、チャンネル38はそれらの間の最小干渉ゾーンに位置しています。3つのチャンネルの選択により、数十のWi-Fiアクセスポイントがあるショッピングセンターのような混雑した電波環境でもデバイスが検出されることが保証されます。

Peripheralは3つのチャンネルすべてに順次広告パケットを送信します — これをadvertising eventと呼びます。中央デバイスは一度に1つのチャンネルをスキャンし、Bluetooth Controllerに実装されたアルゴリズムに従ってチャンネルを切り替えます。衝突がない場合の1回のadvertising event内での検出確率は100%に近いです。

広告パケットの種類

Bluetooth Core Specificationは、それぞれ目的の異なる複数のタイプの広告PDU(Protocol Data Unit)を定義しています。主なタイプは:ADV_IND(connectable undirected advertising)— 接続可能な標準広告、ADV_NONCONN_IND(non-connectable undirected advertising)— 接続なしの広告のみ、ADV_SCAN_IND(scannable undirected advertising)— スキャン要求をサポート、ADV_DIRECT_IND(directed advertising)— 特定のCentral向け広告。

ADV_INDは最も一般的なタイプで、ほとんどのBLEデバイスで使用されています。ADV_INDを受信すると、Centralは接続要求を送信して接続を確立できます。ADV_NONCONN_INDはビーコン(Beacon)で使用されます:デバイスは広告を送信しますが、接続要求は受け付けません — 一方向のデータ送信のみです。

PDUタイプ説明接続Scan response
ADV_IND標準広告ありあり
ADV_DIRECT_IND特定のCentral向け広告ありなし
ADV_NONCONN_IND接続なし(ビーコン)なしなし
ADV_SCAN_INDスキャン対応ありあり
ADV_EXT_IND拡張広告(BLE 5.0)ありあり

ADV_DIRECT_INDは対象Centralのアドレスを含み、スキャンを待たずに迅速に接続を確立できます。デバイスがすでに互いを“認識している”場合に使用されます — 例えば、以前ペアリングしたスマートフォンに再接続する場合など。このタイプはすべてのチャンネルで広告する必要がないため、消費電力を削減します。

広告インターバルと消費電力

Advertising intervalは連続するadvertising event間の時間です。仕様では0.625 ms刻みで20 msから10.24 sまでのインターバルが許可されています。実際のインターバルは固定値とランダム遅延(0–10 ms)の合計として計算され、複数の広告デバイス間の衝突確率を低減します。

インターバルの選択は検出速度消費電力のバランスです。20 msのインターバルでは、デバイスは20–30 msで検出されますが、平均電流は約1–2 mAになります。1000 msのインターバルでは、検出に最大1秒かかりますが、平均電流は50–100 µAに低下します。ほとんどのIoTデバイスでは、推奨インターバルは200–1000 msです。

Texas Instruments Application Report SWRA478(2024)によると、広告インターバルを100 msから1000 msに増やすと、消費電力が90%削減されます。デバイスに即時検出が必要ない場合(例えば、1分に1回データを送信する温度センサー)、最適なインターバルは1000–2000 msです。

追加パラメータとしてadvertising timeoutがあります — デバイスが広告を送信する最大時間です。iOSでは、Peripheralはバックグラウンドで180秒後に自動的に広告を停止します。Androidにはそのような制限はありませんが、メーカーが独自の制限を追加する場合があります。

Scan Response:追加データ

Scan Responseは、PeripheralがCentralからのスキャン要求に応答して送信する追加データパケット(最大31バイト)です。スキャン要求は、Centralが広告パケットを受信した後、接続前により多くの情報が必要な場合に送信されます。Scan Responseは追加の広告を必要としません — 要求があった場合のみ送信され、電波時間を節約します。

典型的なデータ配分:advertising PDU(31バイト)にはフラグ(3バイト)、サービスUUID(2–16バイト)、メーカーデータ(残りのバイト)が含まれます。scan responseには完全なデバイス名(最大28バイト)と追加のUUIDまたはTX Power Levelが含まれます。この分離により、Centralはscan responseを読み取らずにUUIDでデバイスを迅速にフィルタリングできます。

広告パケットを設計する際の注意:advertising PDUの31バイトすべてが使用されている場合、Centralはデバイスがscan responseをサポートしているかどうかを判断できません。scan response機能を示すために、advertising PDUに少なくとも3–5バイトの空きを残すことをお勧めします。

BLE 5.0の拡張広告

拡張広告(Extended Advertising BLE 5.0)は広告メカニズムの拡張で、広告パケットサイズを31バイトから251バイトに増やし、新しいパケットタイプを追加します。Extended Advertisingは、オープンエリアでの通信範囲を1 kmまで拡張するcoded PHYと、複数のCentralを同期するためのPeriodic Advertisingもサポートしています。

主な革新:ADV_EXT_IND — 1つのパケットで最大251バイトのデータを送信できる拡張広告PDU。Extended Advertisingはプライマリチャンネル(37、38、39)を、どのセカンダリチャンネル(0–36)で完全なデータが送信されるかを示すためだけに使用します。これにより広告チャンネルの負荷が軽減され、システム全体のスループットが向上します。

Periodic Advertisingは、Peripheralが固定インターバルでセカンダリチャンネルにデータを送信し、Centralがこのシーケンスに同期できる追加メカニズムです。定期的なデータ更新が必要なサービス(オーディオストリーミングやリアルタイムセンサー読み取りなど)に使用されます。

パラメータ標準BLE拡張BLE 5.0
最大パケットサイズ31バイト251バイト
チャンネル37、38、39のみ+ セカンダリ0–36
範囲最大100 m最大1000 m(coded PHY)
速度1 Mbps125 kbps ~ 2 Mbps
定期送信なしあり

iOSとAndroidでの広告設定

iOS(Core Bluetooth)は広告管理にCBPeripheralManagerを提供します。広告パラメータはadvertisementDataディクショナリでキーCBAdvertisementDataLocalNameKey(デバイス名)、CBAdvertisementDataServiceUUIDsKey(サービスUUID)、CBAdvertisementDataTxPowerLevelKey(電力レベル)を使用して設定します。iOSは広告インターバルを自動的に管理し、手動での設定はできません。

swift
import CoreBluetooth

class AdvertiserManager: NSObject, CBPeripheralManagerDelegate {

    private var peripheralManager: CBPeripheralManager!

    func startBLEAdvertising() {
        let data: [String: Any] = [
            CBAdvertisementDataLocalNameKey: "BLE Beacon",
            CBAdvertisementDataServiceUUIDsKey: [
                CBUUID("180F")
            ],
            CBAdvertisementDataIsConnectable: true
        ]
        peripheralManager.startAdvertising(data)
    }
}

Android(BluetoothLeAdvertiser)はより詳細な制御を提供します。利用可能:AdvertiseSettings — モード設定(LOW_POWER、BALANCED、LOW_LATENCY)、送信電力とインターバル;AdvertiseData — パケットデータ。Androidは互換性のあるデバイスで拡張広告(BLE 5.0)をサポートしていますが、そのようなデバイスの市場シェアは約30–40%です。

java
BluetoothLeAdvertiser advertiser =
    BluetoothAdapter.getDefaultAdapter()
    .getBluetoothLeAdvertiser();

AdvertiseSettings settings = new AdvertiseSettings.Builder()
    .setAdvertiseMode(
        AdvertiseSettings.ADVERTISE_MODE_LOW_POWER
    )
    .setTxPowerLevel(
        AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM
    )
    .build();

AdvertiseData data = new AdvertiseData.Builder()
    .setIncludeDeviceName(true)
    .addServiceUuid(new ParcelUuid(
        UUID.fromString(
            "0000180F-0000-1000-8000-00805F9B34FB"
        )
    ))
    .build();

advertiser.startAdvertising(
    settings, data, advertiseCallback
);

クロスプラットフォームのBLEアプリケーションを開発する際は、違いを考慮してください:iOSは広告インターバルを直接制御できませんが、すべてのデバイスで安定した動作を保証します;Androidは完全な制御を提供しますが、バージョンとメーカーの断片化により非互換性が生じる可能性があります。両方のプラットフォームの実機で広告をテストすることをお勧めします。

よくある質問

Connectable広告とnon-connectable広告の違いは?

Connectable広告(ADV_IND)はCentralがデバイスとの双方向接続を確立できるようにします。Non-connectable(ADV_NONCONN_IND)は一方向のデータ送信のみで、接続機能なしで識別子を送信するビーコン(Beacon)で使用されます。

広告パケットで何バイト送信できますか?

標準の広告パケットは31バイト、scan responseはさらに31バイトです。拡張広告(BLE 5.0+)はデータ送信にセカンダリチャンネルを使用して制限を251バイトに引き上げます。

IoTデバイスにはどの広告インターバルを選ぶべきですか?

ほとんどのIoTデバイスには500–1000 msをお勧めします。高速検出が必要な場合(ヘッドフォン接続など)は20–50 msを使用します。データ送信が稀なセンサーの場合は、省電力のために1000–2000 msを使用します。

BLEはなぜ3つの広告チャンネルを使用するのですか?

3つのチャンネル(37、38、39)は検出の信頼性とスループットの妥協点です。1つのチャンネルがWi-Fiで占有されても、他の2つでデバイスが検出されます。チャンネル38はWi-Fiチャンネル間の最小干渉ゾーンにあります。

広告はバッテリー寿命にどのように影響しますか?

広告はBLEにおける主要な電力消費源です。1000 msのインターバルでは、平均電流は50–100 µAで、CR2032バッテリーで1年間動作できます。20 msのインターバルでは電流が1–2 mAに増加し、動作時間は数週間に短縮されます。

まとめ

  • Advertisingは3つのチャンネル(37、38、39)で最大31バイトのパケットサイズで動作するBLEデバイス検出メカニズムです。
  • 5種類の広告PDUがあります:ADV_IND、ADV_DIRECT_IND、ADV_NONCONN_IND、ADV_SCAN_IND、およびBLE 5.0用のADV_EXT_IND
  • 広告インターバルは20 ms~10.24 sの範囲で、検出速度とデバイスの消費電力に直接影響します。
  • Scan ResponseはCentralの要求に応じてPeripheralの消費電力を増やさずに追加の31バイトのデータを提供します。
  • 拡張広告(BLE 5.0)はパケットを251バイトに増やし、coded PHYを介して最大1 kmの範囲をサポートします。
  • iOSでは広告はCBPeripheralManagerを介して管理され、Androidでは詳細設定が可能なBluetoothLeAdvertiserを介して管理されます。
  • 広告インターバルとパケットタイプの適切な選択がBLEデバイスのエネルギー効率とバッテリー寿命を決定します。

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

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

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

こちらもお読みください