ESPProvision
ESPProvision 是一个用 Swift 编写的配置库。它为 ESP32、ESP32-S2 或 ESP8266 设备提供提供网络凭证和/或自定义数据的机制。
功能
- 搜索可用的 BLE 设备。
- 扫描设备 QR 码以提供对 ESP 设备的引用。
- 手动创建 ESPDevice 的引用。
- 数据加密
- 通过 BLE 和 SoftAP 传输数据。
- 配置设备。
- 扫描可用的 Wi-Fi 网络。
- 控制台日志
- 支持版本 2 的安全功能。
要求
- iOS 13.0+/ macOS 10.12+
- Xcode 13+
- Swift 5.1+
- 在 Xcode 中启用热点配置功能。
- 在 Xcode 中启用访问 WiFi 信息功能。
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 ESPProvision 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它。
pod 'ESPProvision'
Swift 包管理器
Swift 包管理器 是一个自动化 Swift 代码分发的工具,并集成到 swift
编译器中。
一旦您设置了 Swift 包,就像将其添加到您的 Package.swift
的 dependencies
值一样简单,就可以将其作为依赖项添加到 ESPProvision 中。
dependencies: [
.package(url: "https://github.com/espressif/esp-idf-provisioning-ios.git", from: "2.1.1")
]
...使用 Xcode
如果您正在使用 Xcode,那么您应将此 SwiftPM 包作为依赖项添加到您的 Xcode 项目中:请参阅 Apple 文档
使用 ESPProvision
简介
ESPProvision 提供了一种更简单的机制来与 ESP-32、ESP32-S2 和 ESP8266 设备进行通信。它提供了一种高效搜索和扫描模型来监听和返回处于配置模式下的设备。ESProvision 内置了安全协议,通过端到端加密实现数据安全传输。它支持作为传输模式的 BLE 和 SoftAP,这些模式在运行时可以进行配置。它的主要用途是向设备提供家庭网络凭据,并确保设备连接状态返回给应用程序。
获取 ESPDevice
ESPDevice
对象是 ESP-32/ESP32-S2/ESP8266 设备的虚拟表示。它提供了一种以更简单的方式直接与设备交互的接口。《ESPProvisionManager》是一个单例类,它包含管理这些对象的 API。《ESPDevice》实例可以通过以下任何一种技术获得
搜索
ESPProvision 支持 BLE 设备的搜索,这些设备当前处于配置模式下。它返回匹配参数标准的可发现设备列表。
ESPProvisionManager.shared.searchESPDevices(devicePrefix:"Prefix", transport:.ble, security:.secure) { deviceList, _ in
}
传输参数是数据传输的媒介,ESProvision 支持 .softAP 和 .ble 传输。安全参数说明连接是否需要加密或不加密。目前 iOS 不支持 SoftAP 搜索。
扫描
可以通过扫描有效二维码来提取设备信息。此API的用户可以通过提供imshow作为参数来决定摄像头预览层的帧。它成功时返回单个ESPDevice
实例。支持SoftAP和BLE。
ESPProvisionManager.shared.scanQRCode(scanView: scannerView) { espDevice, _ in
}
创建
ESPDevice
也可以通过将必要的参数作为以下函数的参数来创建。
ESPProvisionManager.shared.createESPDevice(deviceName: deviceName, transport: transport, security: security){ espDevice, _ in
}
加电启动
ESPProvision库的主要功能是加电启动ESP设备。一旦从上述API中获取了ESPDevice
实例,我们需要在使用它来传输/接收数据之前,与该设备建立会话。这可以通过调用以下示例中的connect
来实现。
espDevice.connect(delegate: self) { status in
}
如果设备具有pop功能,则需要委托来从用户处获取持有证明。
以下是从委托类返回设备的持有证明的示例
func getProofOfPossesion(forDevice: ESPDevice, completionHandler: @escaping (String) -> Void) {
completionHandler(proofOfPossession)
}
对于安全版本2,从委托类以下提供用户名
func getUsername(forDevice: ESPProvision.ESPDevice, completionHandler: @escaping (String?) -> Void) {
completionHandler(username)
}
如果状态为已连接,则应用可以继续扫描设备可见的可用网络列表。此列表可以用作提供给用户选择自己的网络选项。
espDevice.scanWifiList { wifiList, _ in
}
用户可以选择从上述列表应用Wi-Fi设置或选择其他Wi-Fi网络来加电启动设备。
espDevice.provision(ssid: ssid, passPhrase: passphrase) { status in
}
权限
-
自iOS 13以来,希望访问SSID(Wi-Fi网络名称)的应用程序需要具备位置权限。在Info.plist中添加键
NSLocationWhenInUseUsageDescription
并附上适当的描述。此权限是验证iOS设备当前是否已连接到SoftAP所必需的。 -
自iOS 14以来,通过本地网络进行通信的应用程序需要具备本地网络权限。在Info.plist中添加键
NSLocalNetworkUsageDescription
并附上适当的描述。此权限是用于与SoftAP设备发送/接收配置数据的必需的。
许可证
ESPProvision是在Apache License Version 2.0下发布的。