ESP32- 项目应用1 智能手表之更新时间 #3
1 ESP32 WIFI 介绍
WiFi 主要有两种模式:STA 和 AP 模式。AP 模式即无线接入点,是我们常说的手机热点,被其他设备连接;STA 模式即 Station,是连接热点的设备。另外,ESP32S3 可支持 STA 和 AP两种模式共存,就像手机那样可以开热点,也可以连接其他热点。
WiFi 库支持配置及监控 ESP32S3 Wi-Fi 连网功能。支持配置:
①:Station 模式(即 STA 模式或 WiFi 客户端模式),此时 ESP32 S3 连接到接入点 (AP)。
②:AP 模式(即 Soft-AP 模式或接入点模式),此时基站连接到 ESP32S3 设备。
③:Station/AP 共存模式(ESP32S3 既是接入点,同时又作为基站连接到另外一个接入点)。
④:上述模式的各种安全模式(WPA、WPA2 及 WEP 等)。
⑤:扫描接入点(包括主动扫描及被动扫描)。
⑥:使用混杂模式监控 IEEE802.11 Wi-Fi 数据包
1.1 WiFi-AP 启动流程
上图展示了 ESP32 系列芯片以 AP 模式开启 WiFi 的启动流程。首先,系统需要对 lwIP 协议栈进行初始化。接着,创建一个任务,该任务将用于触发相应的事件。然后,配置 WiFi 参数和AP 模式参数。最后,启动 WiFi,从而完成以 AP 模式开启 WiFi 的操作。
1.2 WiFi-STA 启动流程
上图展示了 ESP32 系列芯片以 STA 模式开启 WiFi 的启动流程。首先,系统需要创建定时器和事件组,并对 lwIP 协议栈进行初始化。接着,创建一个任务,该任务将用于触发相应的事件。然后,配置 WiFi 参数和 STA 模式参数。最后,启动 WiFi,从而完成以 STA 模式开启 WiFi的操作。
2 esp32 wifi 配置
2.1.1 初始化 NVS 存储系统
ESP_ERROR_CHECK(nvs_flash_init());
ESP32 会使用 NVS(Non-Volatile Storage) 存储 Wi-Fi 配置信息。
如果你使用 esp_wifi_set_config() 设置了 WIFI_CONFIG,它可能会保存到 NVS 中。
必须在使用 Wi-Fi 前初始化 NVS。
2.1.2 初始化 TCP/IP 协议栈
ESP_ERROR_CHECK(esp_netif_init());
初始化 esp-netif 网络接口模块,它取代了旧版本中的 tcpip_adapter。
是实现 DHCP、IP 地址分配等的基础。
2.1.3 创建默认事件循环
ESP_ERROR_CHECK(esp_event_loop_create_default());
用于后续处理各种 Wi-Fi 和 IP 相关的异步事件,比如连接成功、断开、获取 IP 等。
事件机制是 ESP-IDF 的核心特性之一。
2.1.4 创建默认的 STA 接口(Station 模式)
esp_netif_create_default_wifi_sta();
创建一个默认的 esp-netif 实例,用于 Wi-Fi STA 模式。
你可以认为这是将 ESP32 设置为“客户端”,连接到热点。
2.1.5 初始化 Wi-Fi 驱动
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
加载 Wi-Fi 驱动,包括内核任务、缓冲区、内部状态等。
WIFI_INIT_CONFIG_DEFAULT() 提供默认配置。
2.1.6 注册 Wi-Fi/IP 事件回调函数
esp_event_handler_instance_register(WIFI_EVENT, ...)
esp_event_handler_instance_register(IP_EVENT, ...)
注册处理器,用于监听并处理事件,比如:
Wi-Fi 启动 (WIFI_EVENT_STA_START)
断线重连 (WIFI_EVENT_STA_DISCONNECTED)
成功获取 IP (IP_EVENT_STA_GOT_IP)
2.1.7 配置要连接的 Wi-Fi 网络参数
wifi_config_t wifi_config = {.sta = {.ssid = WIFI_SSID