ESP-IDF WiFi配网(SoftAP+HTTPD)代码备注
主要是为了方便了解实际代码层面的配网协议是什么样的,所以文档记录的基本上是代码片段。
- ESP-IDF的版本是V5.0
- 使用 SoftAP 传输时,为了允许服务发现,必须在开始配置之前初始化 mDNS。
- protocomm_security 一共有3个选项,这里只说了protocomm_security1
- Curve25519 key exchange + AES-CTR encryption/decryption
配网流程图
该流程图适用BLE和 WiFi (SoftAP+HTTPD) 这两种配网方式。
Endpoint
连接到设备后,可以按如下方式识别与配置相关的协议端点:
Endpoint Name(BLE + GATT Server) | URI (SoftAP + HTTP Server + mDNS) | Structure | proto文件路径 | Description |
---|---|---|---|---|
prov-session | http://.local/prov-session | Protobuf | components/protocomm/proto/sec1.proto | 用于会话建立的安全端点 |
prov-scan | http://wifi-prov.local/prov-scan | Protobuf | components/wifi_provisioning/proto/wifi_scan.proto | 用于启动 Wi-Fi 扫描和接收扫描结果的端点 |
prov-ctrl | http://wifi-prov.local/prov-ctrl | Protobuf | components/esp_local_ctrl/proto/esp_local_ctrl.proto | 用于控制 Wi-Fi 配置状态的端点 |
prov-config | http://.local/prov-config | Protobuf | components/wifi_provisioning/proto/wifi_config.proto | 用于在设备上配置 Wi-Fi 凭据的端点 |
prov-ver | http://.local/proto-ver | JSON | 用于检索版本信息的端点 |
如果用户想要根据他们的要求定制一些额外的协议端点,这将分两步完成。首先是创建具有特定名称的端点,第二步是为该端点注册处理程序。
Typical Provisioning Process
请提前了解 tools/esp_prov/esp_prov.py 的参数说明。
1. Transport specific discovery and connection
ESP32板子直接开启SoftAP模式,然后Client直接通过wifi连接就可以。
2. Session Etablishment
Get Version Request
tools/esp_prov/esp_prov.py:has_capability()
components/protocomm/src/common/protocomm.c:protocomm_version_handler()
Get Version Response
tools/esp_prov/esp_prov.py:has_capability()
Session Setup Request
tools/esp_prov/security/security1.py:setup0_request()
tools/esp_prov/security/security1.py:setup1_request()
Session Setup Response
components/protocomm/src/security/security1.c:sec1_req_handler()
3. Configuration
App specific Set Config(optional)
tools/esp_prov/esp_prov.py:has_capability()传参"wifi_scan"
tools/esp_prov/esp_prov.py:scan_wifi_APs()
Set Config Response(optional)
examples/wifi/scan/main/scan.c:wifi_scan()
Wi-Fi SetConfig(SSID,Passphrase...)
tools/esp_prov/esp_prov.py:send_wifi_config()
Wi-Fi SetConfig response
components/wifi_provisioning/src/wifi_config.c:cmd_set_config_handler()
Wi-Fi ApplyConfig cmd
tools/esp_prov/esp_prov.py:apply_wifi_config()
Wi-Fi ApplyConfig resp
components/wifi_provisioning/src/wifi_config.c:cmd_apply_config_handler()
Wi-Fi GetStatus cmd(repeated)
tools/esp_prov/esp_prov.py:wait_wifi_connected()
Wi-Fi GetStatus resp(repeated)
components/wifi_provisioning/src/wifi_config.c:cmd_get_status_handler()