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(広告)は、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は、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バイトの空きを残すことをお勧めします。
拡張広告(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 Mbps | 125 kbps ~ 2 Mbps |
| 定期送信 | なし | あり |
iOS(Core Bluetooth)は広告管理にCBPeripheralManagerを提供します。広告パラメータはadvertisementDataディクショナリでキーCBAdvertisementDataLocalNameKey(デバイス名)、CBAdvertisementDataServiceUUIDsKey(サービスUUID)、CBAdvertisementDataTxPowerLevelKey(電力レベル)を使用して設定します。iOSは広告インターバルを自動的に管理し、手動での設定はできません。
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%です。
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広告(ADV_IND)はCentralがデバイスとの双方向接続を確立できるようにします。Non-connectable(ADV_NONCONN_IND)は一方向のデータ送信のみで、接続機能なしで識別子を送信するビーコン(Beacon)で使用されます。
標準の広告パケットは31バイト、scan responseはさらに31バイトです。拡張広告(BLE 5.0+)はデータ送信にセカンダリチャンネルを使用して制限を251バイトに引き上げます。
ほとんどのIoTデバイスには500–1000 msをお勧めします。高速検出が必要な場合(ヘッドフォン接続など)は20–50 msを使用します。データ送信が稀なセンサーの場合は、省電力のために1000–2000 msを使用します。
3つのチャンネル(37、38、39)は検出の信頼性とスループットの妥協点です。1つのチャンネルがWi-Fiで占有されても、他の2つでデバイスが検出されます。チャンネル38はWi-Fiチャンネル間の最小干渉ゾーンにあります。
広告はBLEにおける主要な電力消費源です。1000 msのインターバルでは、平均電流は50–100 µAで、CR2032バッテリーで1年間動作できます。20 msのインターバルでは電流が1–2 mAに増加し、動作時間は数週間に短縮されます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。