Peripheral — 定義、BLE での役割とサービス広告の仕組み

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

Peripheral は Bluetooth Low Energy アーキテクチャにおけるデバイスで、advertising パケットを通じてサービスを広告し、Central からの接続を待ちます。IoT エコシステムにおいて、Peripheral は通常、消費電力の少ないデバイス:温度センサー、スマートランプ、フィットネスブレスレット、ビーコン (Beacon) です。Bluetooth Core Specification 5.4 (2023) は広告プロトコルを定義しています:Peripheral は定期的にデバイス名、サービスのリスト、カスタムデータを含む advertising パケットを送信し、Central はこれらのパケットをスキャンして接続するかどうかを決定します。接続確立後、Peripheral は GATT サーバーとして動作し、読み取りと書き込みのためのサービスと特性を提供します。

メインポイント

  • Peripheral は、サービスを広告し、Central からの接続を待つ被動的な BLE デバイスです。
  • Advertising パケットには、デバイス名、サービス UUID、メーカーデータ、距離推定用の RSSI が含まれます。
  • Peripheral は、Central がアクセスするためのサービスと特性を保管する GATT サーバー として動作します。
  • Peripheral の消費電力は、スリープモードで 5 µA から活発なデータ伝送時の 15 mA まで変化します。
  • 接続後、Peripheral は電力を節約するために 広告を無効にし、必要に応じて再び有効にできます。

BLE における Peripheral とは?

Peripheral は、GATT サーバーを実装し、advertising チャネルを通じて自己の機能を広告する BLE デバイスです。主動的にデバイスを探す Central とは異なり、Peripheral は被動的に接続を待ちます。これは、バッテリ駆動デバイスの電力効率に向けて最適化された非対称モデルです。

Peripheral はいくつかのモードになれます:advertising (広告)、connected (Central に接続)、sleeping (広告を無効にして眠る)。advertising モードでは、Peripheral は最小限の電力を消費しながら定期的に短いデータパケットを送信します。接続後、Peripheral は connected モードに切り替わり、合意された接続インターバルに従って Central とデータをやり取りします。

Bluetooth Core Specification 5.4 (2023) によれば、デバイスは Peripheral と Central のロールを動的に切り替えることができますが、いかなる瞬間でも単一の接続に対してロールは固定されます。ティピカルなシナリオ:IoT センサーが常に Peripheral として動作し、スマートフォンが Central として接続を管理します。

開発者が理解すべき重要な点:Peripheral は、どの サービスと特性 が利用可能かを決定し、それらへのアクセスを管理します。Peripheral 上の GATT サーバー構造は、Central が読み取れるデータと書き込めるコマンドを決定します。

広告プロセス (Advertising)

Advertising は、Peripheral が自己の存在を知らせるためのメカニズムです。Peripheral は 3 つの専用チャネル (37, 38, 39) で、20 ms から 10.24 秒の間隔で advertising パケットを送信します。各 advertising パケットには固定情報が含まれ、オプショナルデータを含むことができます。

2 種類の advertising パケットがあります:advertising PDU (主パケット) と scan response PDU (Central のリクエストへの応答)。主パケットには必須フィールド:パケットタイプ、送信元アドレス、データが含まれます。Central がスキャンリクエストを送信すると、Peripheral はより完全な情報(例えば、フルデバイス名)を含む追加パケットで応答します。

Advertising パラメータは、発見速度と消費電力に影響します。Advertising interval は、パケット送信間の時間です。間隔が短いほど Central はデバイスを早く発見できますが、Peripheral の消費電力が増えます。推奨される間隔:多くのデバイスで 100–1000 ms。

パラメータ範囲影響推奨
Advertising Interval20 ms – 10.24 s発見速度、電力100–1000 ms バランス用
Advertising Channels37, 38, 39発見の可靠性全て 3 チャネル必須
Tx Power-20 – +10 dBm範囲、干渉室内 0 dBm、屋外 +4 dBm
Advertising Timeout0 – 180 秒広告の期間ビーコン用 0 (無限)

広告パケットの構造

BLE 広告パケット は、advertising PDU に 31 バイト、scan response にさらに 31 バイトの制限があります。パケット内では、データは AD Structure (Advertising Data Structure) 形式で組織されます:各フィールドには、タイプ (1 バイト)、長さ (1 バイト)、値があります。

もっともよく使われる AD タイプ:Flags (0x01) — 接続と発見モード、Local Name (0x08 または 0x09) — デバイス名、Service UUID List (0x02–0x07) — サービス UUID のリスト、Manufacturer Specific Data (0xFF) — メーカーデータ。31 バイトのパケットにデータを正しくパッケージすることは、組込みデバイス開発者にとって重要な仕事です。

より多くのデータを送信する必要があるデバイスのために、extended advertising (BLE 5.0+) は advertising パケットサイズを 251 バイトに増やし、新しいパケットタイプを追加します。Extended advertising はまた、開放領域で 1 km までの範囲を得るために coded PHY チャネルもサポートします。

広告パケットを設計する際に注意:advertising パケットのデータが多いほど、他のデバイスとの衝突の可能性が高まります。早速な発見のためには、advertising PDU には クリティカルなデータ (Service UUID) のみを配置し、追加データは scan response に配置することをおすすめします。

GATT サーバーとしての Peripheral

GATT サーバー は Peripheral 上の、Central が発見してインタラクションできるすべてのサービスと特性を含みます。接続後、Central はサービスを発見し、次に特性を発見し、GATT プロトコルを通じてそれらとインタラクションします。

GATT サーバーとしての Peripheral は、Central からのリクエスト(読み取りリクエスト、書き込みリクエスト、通知、指示)を正しく処理する必要があります。各リクエストは GATT テーブル を通過します。ここでは、各属性(サービス、特性、説明子)が Handle — 16 ビットのアドレスに対応します。

Peripheral 開発者は、各属性に対する アクセス権限 を定義します:読み取りのみ、書き込みのみ、読み取りと書き込み、暗号化ありまたはなし。機密データ(個人情報、医療データ)には、MITM Protection を通じた暗号化を必須にすることをおすすめします。

iOS における Peripheral: CBPeripheralManager

CBPeripheralManager は、iOS で Peripheral ロールを実装するための Core Bluetooth クラスです。GATT サーバーを管理し、サービスと特性を公開し、Central からのリクエストを処理します。CBCentralManager と違い、CBPeripheralManager はスキャンを行いません — 広告と接続の管理のみを行います。

iOS で Peripheral を実装する主なステップ:CBPeripheralManager の初期化、add でのサービス追加、startAdvertising での広告開始、CBPeripheralManagerDelegate を通じての Central からのリクエスト処理。

swift
import CoreBluetooth

class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {

    private var peripheralManager: CBPeripheralManager!

    func startAdvertising() {
        let advertisementData: [String: Any] = [
            CBAdvertisementDataLocalNameKey: "BLE Sensor",
            CBAdvertisementDataServiceUUIDsKey: [
                CBUUID("180F")
            ]
        ]
        peripheralManager.startAdvertising(advertisementData)
    }

    func peripheralManagerDidUpdateState(
        _ peripheral: CBPeripheralManager
    ) {
        if peripheral.state == .poweredOn {
            startAdvertising()
        }
    }
}

iOS は、Background Modes での bluetooth-peripheral キーにより、Peripheral が バックグラウンド で動作することを許可します。バックグラウンドでは、iOS は制限されたデータセットで広告し、接続を管理できます。長時間の広告(180 秒を超える)の場合は、CBAdvertisementDataWaitForResponseFromCentral オプションを使用して電力を節約します。

Android における Peripheral: BluetoothLeAdvertiser

Android は、Peripheral ロールで動作するための BluetoothLeAdvertiser を提供しています (API 21 より)。API は、設定可能なパラメータ(送信力、広告間隔、パケットデータ)で広告を開始できます。Android はまた、サポートされているデバイス上で extended advertising (BLE 5.0) もサポートしています。

java
import android.bluetooth.le.*;

private BluetoothLeAdvertiser advertiser;

public void startPeripheral() {
    BluetoothAdapter adapter =
        BluetoothAdapter.getDefaultAdapter();
    advertiser = adapter.getBluetoothLeAdvertiser();

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

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

    advertiser.startAdvertising(
        settings, data, advertiseCallback
    );
}

Android での Peripheral サポートは、メーカーと OS バージョン に依存します。すべてのデバイスが BluetoothLeAdvertiser をサポートしているわけではありません — adapter.isMultipleAdvertisementSupported() で確認してください。Android 10 より、Peripheral ロールには BLUETOOTH_ADVERTISE パーミッションが必要で、target SDK 31+ のアプリにはランタイムリクエストも必要です。

Peripheral の電力効率

電力効率 は BLE の主な利点であり、Peripheral はこれに重要な役割を果たしています。デバイスは、最適化された消費電力により、CR2032 バッテリー (220 mAh) で 1 年以上動作することができます。大部分の時間、Peripheral は広告を無効にしてスリープモードでいます。広告パケットを送信するか、Central からのリクエストを処理するときのみ起動します。

さまざまなモードでの Peripheral の消費電力:スリープモード (深い眠り) — 1–5 µA、タイマー有効のアイドル — 10–50 µA、advertising — 5–15 mA (パケット送信時)、connected — 5–10 mA (接続イベント時)。Advertising 間隔 1000 ms、パケット期間 4 ms の場合、平均電流は約 50–100 µA です。

Texas Instruments Application Report (SWRA478, 2024) によれば、advertising 間隔を 100 ms から 1000 ms に最適化すると、平均消費電力が 90% 減少します。さらなる節約は、slave latency(接続イベントのスキップ)、短距離での Tx Power の削減、接続後の広告無効化 (connectable advertising) によって実現されます。

よくある質問

Peripheral はデータ送信を開始できますか?

はい、通知/指示 メカニズムを通じてです。接続を開始するのは常に Central ですが、接続後は Central からの明示的なリクエストなしで、Peripheral は GATT 通知を通じてデータを送信できます。このためには、Central が事前に CCCD を通してサブスクライブする必要があります。

Peripheral はどれくらい広告できますか?

広告の期間はスペックによって制限されていませんが、実際には バッテリーの電力 によって制限されます。iOS では、Peripheral は追加設定なしではセッションあたり最大 180 秒までバックグラウンドで広告できます。Android では、広告は無制限で動作できますが、バッテリーの消費が大きくなります。

機能を失わずに Peripheral の消費電力を削減するには?

Advertising 間隔 を増やし (推奨 500–1000 ms)、slave latency を使用して接続イベントをスキップし、接続後に広告を無効にし、必要な距離での安定通信に十分な最小の Tx Power を選択します。

non-connectable advertising とは何ですか?

Non-connectable advertising は、Peripheral が広告は行うが接続リクエストを受け付けないモードです。データのみを送信するビーコン(例:店舗識別子)に使用され、双向接続を確立しません。Connectable advertising よりも電力を節約できます。

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

31 バイトでは、flags (3 バイト)、デバイス名 (縮略形式で最大 28 バイト)、サービス UUID のリスト (UUID あたり 2–16 バイト)、メーカーデータ (最大 26 バイト) を含めることができます。最適なストラテジーは、フィルタリング用に advertising PDU にサービス UUID を、scan response にフルネームを配置することです。

まとめ

  • Peripheral は、サービスを広告し、データやり取りのために Central からの接続を待つ BLE GATT サーバーです。
  • Advertising パケットは、チャネル 37, 38, 39 で 20 ms から 10.24 秒 の間隔で送信され、31 バイトのデータに制限されます。
  • Peripheral は、GATT テーブルに サービスと特性 を保管し、読み取り、書き込み、通知を通じて Central にデータアクセスを提供します。
  • iOS では CBPeripheralManager を通じて、Android では GATT サーバー付きの BluetoothLeAdvertiser を通じて Peripheral が実装されます。
  • スリープモードでの Peripheral の消費電力は 1–5 µA で、CR2032 バッテリーで 1 年以上動作できます。
  • Advertising 間隔と slave latency の最適化により、機能を失わずに 消費電力を最大 90% 削減できます。
  • 適切な広告パケット構造と GATT サーバー設計は、BLE デバイスの 互換性、発見速度、効率を決定します。

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

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

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

こちらもお読みください