目录

一、wifi基础知识

二、wifi开发流程

1. STA模式

1)初始化阶段

2)配置阶段

3)启动阶段

4)连接阶段

2. AP模式

1)初始化阶段

2)配置阶段

3)启动阶段

4)连接阶段

3. STA+AP模式

1)初始化阶段

2)配置阶段

3)启动阶段

4)连接阶段


一、wifi基础知识

        WiFi(Wireless Fidelity,无线保真)是一种基于 IEEE 802.11 标准的无线局域网(WLAN)技术,允许电子设备通过无线方式连接到互联网或局域网。WiFi 使用无线电波在设备之间传输数据,通常工作在 2.4GHz 和 5GHz 频段。

        WiFi 的工作模式常见有三种,AP模式、STA模式、AP+STA混合模式。

        ESP32芯片内置了2.4 GHz Wi-Fi收发器,支持802.11b/g/n标准。ESP32芯片对于5GHz Wi-Fi暂不支持。

二、wifi开发流程

1. STA模式

1)初始化阶段

  1. 调用esp_event_loop_create() 创建一个系统事件任务,并初始化应用程序事件的回调函数;
  2. 调用esp_netif_init() 创建一个 LwIP 核心任务,并初始化 LwIP 相关工作;
  3. 调用esp_netif_create_default_wifi_sta() 创建有TCP/IP堆栈的默认网络接口实例绑定station;
  4. 调用函数esp_wifi_init() 创建 Wi-Fi 驱动程序任务,并初始化 Wi-Fi 驱动程序;
  5. 调用esp_event_handler_instance_register(WIFI_EVENT,
                                                            ESP_EVENT_ANY_ID,
                                                            &event_handler,
                                                            NULL,
                                                            &instance_any_id)注册对应的事件回调到应用当中;
  6. 调用esp_event_handler_instance_register(IP_EVENT,
                                                            IP_EVENT_STA_GOT_IP,
                                                            &event_handler,
                                                            NULL,
                                                            &instance_got_ip)注册对应的事件回调到应用当中;

2)配置阶段

  1. 调用函数esp_wifi_set_mode() 将 Wi-Fi 模式配置为 station模式;
  2. 调用函数 esp_wifi_set_config() 配置热点名和密码;

3)启动阶段

  1. 调用esp_wifi_start() 启动 Wi-Fi 驱动程序;
  2. 应用程序的事件回调函数将事件WIFI_EVENT_STA_START 中继到应用程序任务中。此时,推荐调用函数esp_wifi_connect() 进行 Wi-Fi 连接;

4)连接阶段

  1. 调用函数esp_wifi_connect() 后,Wi-Fi 驱动程序将启动内部扫描/连接过程;
  2. event_handler中处理如下事件:
  • 如果内部扫描/连接过程成功,将产生WIFI_EVENT_STA_CONNECTED 事件;
  • 如果 Wi-Fi 成功从 DHCP 服务器接收到 IP 地址,则将引发IP_EVENT_STA_GOT_IP 事件;

2. AP模式

1)初始化阶段

  1. 调用esp_event_loop_create() 创建一个系统事件任务,并初始化应用程序事件的回调函数;
  2. 调用esp_netif_init() 创建一个 LwIP 核心任务,并初始化 LwIP 相关工作;
  3. 调用esp_netif_create_default_wifi_ap() 创建有TCP/IP堆栈的默认网络接口实例绑定ap;
  4. 调用函数esp_wifi_init() 创建 Wi-Fi 驱动程序任务,并初始化 Wi-Fi 驱动程序;
  5. 调用 esp_event_handler_instance_register(WIFI_EVENT,
                                                            ESP_EVENT_ANY_ID,
                                                            &wifi_event_handler,
                                                            NULL,
                                                            NULL)注册对应的事件回调到应用当中;

2)配置阶段

  1. 调用函数esp_wifi_set_mode() 将 Wi-Fi 模式配置为 ap模式;
  2. 调用函数 esp_wifi_set_config() 配置热点名和密码;

3)启动阶段

  1. 调用esp_wifi_start() 启动 Wi-Fi 驱动程序;

4)连接阶段

  1. event_handler中处理如下事件:
  • WIFI_EVENT_AP_STACONNECTED 事件触发;
  • WIFI_EVENT_AP_STADISCONNECTED 事件触发。

3. STA+AP模式

1)初始化阶段

  1. 调用esp_event_loop_create() 创建一个系统事件任务,并初始化应用程序事件的回调函数;
  2. 调用esp_netif_init() 创建一个 LwIP 核心任务,并初始化 LwIP 相关工作;
  3. 调用esp_netif_create_default_wifi_sta() 创建有TCP/IP堆栈的默认网络接口实例绑定station;
  4. 调用esp_netif_create_default_wifi_ap() 创建有TCP/IP堆栈的默认网络接口实例绑定ap;
  5. 调用函数esp_wifi_init() 创建 Wi-Fi 驱动程序任务,并初始化 Wi-Fi 驱动程序;
  6. 调用 esp_event_handler_instance_register(WIFI_EVENT,
                                                            ESP_EVENT_ANY_ID,
                                                            &wifi_event_handler,
                                                            NULL,
                                                            NULL)注册对应的事件回调到应用当中;
  7. 调用esp_event_handler_instance_register(IP_EVENT,
                                                            IP_EVENT_STA_GOT_IP,
                                                            &event_handler,
                                                            NULL,
                                                            &instance_got_ip)注册对应的事件回调到应用当中;

2)配置阶段

  1. 调用函数esp_wifi_set_mode() 将 Wi-Fi 模式配置为 ap+sta模式;
  2. STA模式:调用函数 esp_wifi_set_config() 配置热点名和密码;
  3. AP模式:调用函数 esp_wifi_set_config() 配置热点名和密码;

3)启动阶段

  1. 调用esp_wifi_start() 启动 Wi-Fi 驱动程序;

4)连接阶段

  1. 主函数中等待连接连接事件置位,随后调用softap_set_dns_addr(esp_netif_ap,esp_netif_sta);
  2. 将STA(Station)模式设置为默认网络接口esp_netif_set_default_netif(esp_netif_sta);

  3. 在AP接口上启用NAPT(网络地址端口转换)esp_netif_napt_enable(esp_netif_ap)

参考代码可见官方例程:

Wi-Fi 驱动程序 - ESP32 - — ESP-IDF 编程指南 latest 文档

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐