[ESP] ESP-IDF WiFi配网(SoftAP+HTTPD)代码备注

发布时间 2023-05-26 18:46:03作者: 空水

ESP-IDF WiFi配网(SoftAP+HTTPD)代码备注

主要是为了方便了解实际代码层面的配网协议是什么样的,所以文档记录的基本上是代码片段。

  • ESP-IDF的版本是V5.0
  • 使用 SoftAP 传输时,为了允许服务发现,必须在开始配置之前初始化 mDNS。
  • protocomm_security 一共有3个选项,这里只说了protocomm_security1
    • Curve25519 key exchange + AES-CTR encryption/decryption

配网流程图

该流程图适用BLEWiFi (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()

4. Close connection

Close Connection