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 — 一种被动 BLE 设备,广播服务并等待 Central 连接。
  • 广播数据包(advertising)包含设备名称、服务 UUID、制造商数据和用于估计距离的 RSSI。
  • Peripheral 充当GATT 服务器,存储服务和特征供 Central 访问。
  • Peripheral 的功耗范围从睡眠模式下的5 µA 到主动数据传输时的 15 mA。
  • 连接后,Peripheral 可以关闭广播以节省能源,并在需要时重新开启。

BLE 中的 Peripheral 是什么?

Peripheral — 是一种 BLE 设备,实现 GATT 服务器并通过 advertising 信道广播其能力。与主动搜索设备的 Central 不同,Peripheral 被动等待连接。这是一种非对称模型,针对电池供电设备的能效进行了优化。

Peripheral 可以处于多种模式:advertising(广播)、connected(已连接到 Central)、sleeping(睡眠且广播关闭)。在广播模式下,Peripheral 定期发送短数据包,消耗最少的能量。连接后,Peripheral 进入 connected 模式,根据约定的连接间隔与 Central 交换数据。

根据 Bluetooth Core Specification 5.4(2023),设备可以在 Peripheral 和 Central 角色之间动态切换,但在每个时刻,对于一个连接,角色是固定的。典型场景:IoT 传感器始终以 Peripheral 角色工作,智能手机作为 Central 管理连接。

对于开发者来说,理解这一点很重要:Peripheral 确定哪些服务和特征可用并管理对它们的访问。Peripheral 上的 GATT 服务器结构决定了 Central 可以读取哪些数据以及可以写入哪些命令。

广播过程(Advertising)

Advertising(广播) — 是 Peripheral 宣布其存在的机制。Peripheral 在三个专用信道(37、38、39)上以 20 毫秒到 10.24 秒的间隔发送 advertising 数据包。每个广播数据包包含固定信息,并可以包含可选数据。

有两种类型的广播数据包:advertising PDU(主数据包)和 scan response PDU(对 Central 请求的响应)。主数据包包含必填字段:数据包类型、发送方地址、数据。如果 Central 发送扫描请求(scan request),Peripheral 会以包含更完整信息(例如完整设备名称)的附加数据包进行响应。

广播参数影响检测速度和功耗。Advertising interval — 数据包发送之间的时间。间隔越短,Central 检测设备越快,但 Peripheral 消耗的能量越多。建议间隔:对于大多数设备为 100–1000 毫秒。

参数范围影响建议
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 Type:Flags(0x01)——连接和检测模式,Local Name(0x08 或 0x09)——设备名称,Service UUID List(0x02–0x07)——服务 UUID 列表,Manufacturer Specific Data(0xFF)——制造商数据。将数据正确打包到 31 字节的数据包中是嵌入式设备开发人员的重要任务。

对于需要传输更多数据的设备,存在extended advertising(BLE 5.0+),它将广播数据包大小增加到 251 字节并添加新的数据包类型。Extended advertising 还支持编码信道(coded PHY),以在开放区域将范围扩展到 1 公里。

在设计广播数据包时要注意:广播数据包中的数据越多,与其他设备发生冲突的可能性就越高。为了快速检测,建议仅在 advertising PDU 中放置关键数据(Service UUID),而将附加数据放在 scan response 中。

Peripheral 作为 GATT 服务器

GATT 服务器在 Peripheral 上包含 Central 可以发现和交互的所有服务和特征。连接后,Central 发现服务(discover services),然后发现特征(discover characteristics)并通过 GATT 协议与之交互。

Peripheral 作为 GATT 服务器必须正确处理 Central 的请求:读取(read request)、写入(write request)、通知(notification)和确认通知(indication)。每个请求通过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()
        }
    }
}

当 Background Modes 中存在 bluetooth-peripheral 键时,iOS 允许 Peripheral 在后台模式下工作。在后台,iOS 可以使用有限的数据集进行广播和服务连接。对于长时间广播(超过 180 秒),请使用 CBAdvertisementDataWaitForResponseFromCentral 选项以节省能源。

Android 中的 Peripheral:BluetoothLeAdvertiser

Android 提供 BluetoothLeAdvertiser 用于在 Peripheral 角色中工作(从 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 的支持取决于制造商和操作系统版本。并非所有设备都支持 BluetoothLeAdvertiser——通过 adapter.isMultipleAdvertisementSupported() 进行检查。从 Android 10 开始,在 Peripheral 角色中工作需要 BLUETOOTH_ADVERTISE 权限,以及 target SDK 31+ 应用程序的运行时请求。

Peripheral 的能效

能效 — 是 BLE 的关键优势,而 Peripheral 在其中扮演主要角色。由于优化的功耗,设备可以在 CR2032 电池(220 mAh)上运行超过一年。Peripheral 大部分时间处于广播关闭的睡眠模式,仅在发送广播数据包或处理来自 Central 的请求时唤醒。

Peripheral 在不同模式下的功耗:睡眠模式(深度睡眠)——1–5 µA,定时器开启的空闲模式——10–50 µA,广播——5–15 mA(在数据包发送期间),已连接——5–10 mA(在连接事件期间)。在广播间隔 1000 毫秒和数据包持续时间 4 毫秒时,平均电流约为 50–100 µA。

根据 Texas Instruments Application Report (SWRA478, 2024),将广播间隔从 100 毫秒优化到 1000 毫秒可将平均功耗降低 90%。通过使用从机延迟(slave latency,跳过连接事件)、在短距离内降低 Tx Power 以及在连接后关闭广播(可连接广播),可以实现额外的节能。

常见问题

Peripheral 能否主动发送数据?

可以,通过通知(Notify/Indicate)机制。虽然连接的发起者始终是 Central,但在连接后,Peripheral 可以通过 GATT 通知发送数据,无需 Central 显式请求。为此,Central 必须事先通过 CCCD 进行订阅。

Peripheral 可以广播多长时间?

广播持续时间不受规范限制,但实际上受电池能量限制。在 iOS 上,Peripheral 在后台每次会话最多广播 180 秒,无需额外设置。在 Android 上,广播可以无限期工作,但会显著缩短自主工作时间。

如何在不损失功能的情况下降低 Peripheral 的功耗?

增加广播间隔(建议 500–1000 毫秒),使用从机延迟跳过连接事件,连接后关闭广播,并选择在所需距离上稳定通信所需的最小 Tx Power。

什么是不可连接广播(non-connectable advertising)及其用途?

不可连接广播(non-connectable advertising)——是 Peripheral 广播但不接受连接请求的模式。用于仅传输数据(例如商店标识符)而不建立双向连接的信标。与可连接广播相比,节省能源。

广播数据包(31 字节)中可以传输哪些数据?

31 字节中可以包含:标志(3 字节)、设备名称(缩写形式最多 28 字节)、服务 UUID 列表(每个 UUID 2–16 字节)、制造商数据(最多 26 字节)。最佳策略——将服务 UUID 放在 advertising PDU 中以进行过滤,将完整名称放在 scan response 中。

总结

  • Peripheral — BLE GATT 服务器,广播其服务并等待 Central 连接以进行数据交换。
  • 广播数据包在信道 37、38、39 上以20 毫秒到 10.24 秒的间隔传输,限制为 31 字节数据。
  • Peripheral 在 GATT 表中存储服务和特征,通过读取、写入和通知为 Central 提供数据访问。
  • 在 iOS 上,Peripheral 通过CBPeripheralManager 实现,在 Android 上——通过 BluetoothLeAdvertiser 与 GATT 服务器实现。
  • Peripheral 在睡眠模式下的功耗为1–5 µA,使其能够在 CR2032 电池上运行长达一年。
  • 优化广播间隔和从机延迟可以将功耗降低高达 90% 而不损失功能。
  • 正确的广播数据包和 GATT 服务器结构决定了 BLE 设备的兼容性、检测速度和效率。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读