Peripheral 概述
2023-09-12 19:58:27
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 设备中。