返回

Peripheral 概述

IOS

iOS BLE 开发小记[3]——如何实现一个 Local Peripheral

概述

在 iOS BLE 开发小记[2]中,你已经学到了如何在 Central 方面去调用 BLE 的常用方法。在这一节中,你将学习用 CoreBluetooth 框架来调用 Peripheral 方面 BLE 的常用方法。通过本文的示例代码,将会引导你开发一个将你的 Local 设为 Peripheral 设备,并能向其他 Central 设备广播数据的示例程序。

准备工作

  • 一台运行 iOS 10 或更高版本的设备
  • 一个 BLE 兼容的设备,如 iPhone 或 iPad
  • Xcode 10 或更高版本

在你开始之前,你需要导入 CoreBluetooth 库到你的项目中。你可以通过在你的项目设置中添加 CoreBluetooth.framework 来做到这一点。

步骤

CBPeripheralManager 是一个管理 BLE Peripheral 的类。要创建一个 CBPeripheralManager 对象,你可以使用以下代码:

let peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: [CBPeripheralManagerOptionShowPowerAlertKey: true])

CBPeripheralManagerDelegate 协议定义了你必须实现的方法来响应来自 BLE Peripheral 的事件。你必须实现以下方法:

func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager)

此方法在 Peripheral 的状态发生改变时调用。你可以在此方法中检查 Peripheral 的状态,并在需要时采取适当的措施。

func peripheralManager(_ peripheral: CBPeripheralManager, willRestoreState dict: [String : Any])

此方法在 Peripheral 从恢复状态中恢复时调用。你可以使用 dict 参数来恢复 Peripheral 的先前状态。

func peripheralManagerDidStartAdvertising(_ peripheral: CBPeripheralManager, error: Error?)

此方法在 Peripheral 开始广播数据时调用。你可以在此方法中检查 Peripheral 是否已成功开始广播。

func peripheralManager(_ peripheral: CBPeripheralManager, didAdd service: CBService, error: Error?)

此方法在 Peripheral 添加服务时调用。你可以在此方法中检查服务是否已成功添加。

func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic)

此方法在 Central 设备订阅了 Peripheral 的特征时调用。你可以在此方法中检查 Central 设备是否已成功订阅了特征。

func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic)

此方法在 Central 设备取消订阅了 Peripheral 的特征时调用。你可以在此方法中检查 Central 设备是否已成功取消订阅了特征。

func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveReadRequest request: CBATTRequest)

此方法在 Central 设备读取了 Peripheral 的特征时调用。你可以在此方法中处理读取请求并发送数据回 Central 设备。

func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveWriteRequest request: CBATTRequest)

此方法在 Central 设备写入了 Peripheral 的特征时调用。你可以在此方法中处理写入请求并保存数据到 Peripheral。

要启动广播,你可以使用以下代码:

peripheralManager.startAdvertising(advertisementData)

其中,advertisementData 是一个包含要广播的数据的字典。你可以在此字典中添加以下键值对:

  • CBAdvertisementDataLocalNameKey:Peripheral 的名称
  • CBAdvertisementDataServiceUUIDsKey:Peripheral 提供的服务的 UUID
  • CBAdvertisementDataIsConnectableKey:Peripheral 是否可以连接

要停止广播,你可以使用以下代码:

peripheralManager.stopAdvertising()

要添加服务,你可以使用以下代码:

peripheralManager.add(service)

其中,service 是一个 CBService 对象。你可以使用以下代码创建一个 CBService 对象:

let service = CBMutableService(type: serviceUUID, primary: true)

其中,serviceUUID 是服务的 UUID,primary 是一个布尔值,指示服务是否是主服务。

要添加特征,你可以使用以下代码:

service.add(characteristic)

其中,characteristic 是一个 CBCharacteristic 对象。你可以使用以下代码创建一个 CBCharacteristic 对象:

let characteristic = CBMutableCharacteristic(type: characteristicUUID, properties: properties, value: nil, permissions: permissions)

其中,characteristicUUID 是特征的 UUID,properties 是一个包含特征属性的数组,value 是特征的初始值,permissions 是一个包含特征权限的数组。

要添加符,你可以使用以下代码:

characteristic.add(descriptor)

其中,descriptor 是一个 CBDescriptor 对象。你可以使用以下代码创建一个 CBDescriptor 对象:

let descriptor = CBMutableDescriptor(type: descriptorUUID, value: nil)

其中,descriptorUUID 是符的 UUID,value 是描述符的初始值。

总结

通过本文的示例代码,你已经学习了如何使用 CoreBluetooth 框架创建 BLE Peripheral。你可以将你的 Local 设为 Peripheral 设备,并向其他 Central 设备广播数据。你也可以添加服务、特征和描述符到你的 Peripheral 设备中。