登录/注册

esp32 idf wifi模式切换

更多

在ESP32 IDF中切换WiFi模式(如STA、AP或APSTA模式),需要调用WiFi驱动函数并处理相关事件。以下是详细步骤和示例:


核心步骤

  1. 包含头文件

    #include "esp_wifi.h"
    #include "esp_event.h"
  2. 初始化NVS(非易失性存储)

    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES) {
       nvs_flash_erase();
       nvs_flash_init();
    }
  3. 初始化WiFi驱动

    esp_netif_init(); // 初始化TCP/IP栈
    esp_event_loop_create_default(); // 事件循环
    
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);
  4. 配置模式切换

    • 切换到STA模式(连接路由器):

      esp_wifi_set_mode(WIFI_MODE_STA);
      wifi_config_t sta_config = {
       .sta = {
           .ssid = "你的路由器SSID",
           .password = "路由器密码"
       }
      };
      esp_wifi_set_config(WIFI_IF_STA, &sta_config);
    • 切换到AP模式(作为热点):

      esp_wifi_set_mode(WIFI_MODE_AP);
      wifi_config_t ap_config = {
       .ap = {
           .ssid = "ESP32_AP",
           .password = "12345678",
           .max_connection = 4,
           .authmode = WIFI_AUTH_WPA2_PSK
       }
      };
      esp_wifi_set_config(WIFI_IF_AP, &ap_config);
    • 切换到AP+STA模式(同时运行):

      esp_wifi_set_mode(WIFI_MODE_APSTA);
      // 分别配置STA和AP的参数
  5. 启动/停止WiFi

    esp_wifi_start(); // 启动
    esp_wifi_stop();  // 停止(切换模式前建议先停止)
  6. 事件处理: 注册事件回调以处理连接状态:

    esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, NULL);

示例代码(动态切换模式)

// 切换到AP模式
void switch_to_ap_mode() {
    esp_wifi_stop(); // 先停止WiFi
    esp_wifi_set_mode(WIFI_MODE_AP);
    // 配置AP参数
    wifi_config_t ap_config = { ... };
    esp_wifi_set_config(WIFI_IF_AP, &ap_config);
    esp_wifi_start();
}

// 切换到STA模式
void switch_to_sta_mode() {
    esp_wifi_stop();
    esp_wifi_set_mode(WIFI_MODE_STA);
    // 配置STA参数
    wifi_config_t sta_config = { ... };
    esp_wifi_set_config(WIFI_IF_STA, &sta_config);
    esp_wifi_start();
    esp_wifi_connect(); // 主动发起连接
}

注意事项

  1. 模式切换顺序:建议在切换模式前调用 esp_wifi_stop(),避免资源冲突。
  2. 配置持久化:WiFi配置不会自动保存,切换模式后需重新设置参数。
  3. 事件处理:处理 WIFI_EVENT_STA_DISCONNECTED 等事件以实现重连逻辑。
  4. 性能影响:同时启用AP+STA模式(WIFI_MODE_APSTA)会增大内存和CPU开销。

通过上述方法,可灵活实现ESP32在不同WiFi模式间的动态切换。

VSCode + ESP-IDF环境下给ESP32-S3项目添加头文件

VSCode + ESP-IDF环境下给ESP32-S3项目添加头文件

2025-11-28 07:27:33

ESP32学习笔记:WiFi

今天我们来说说ESP32 的WiFi。

2023-07-15 16:20:32

[esp32教程] 5、UART使用

基于Ubuntu下,利用esp-idf进行esp32开发的教程

2023-06-13 09:04:58

ESP32ESP-IDF 教学(十)—— 电机控制器(MCPWM)

本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建

资料下载 h1654155275.3301 2022-01-14 12:23:08

ESP32ESP-IDF 教学WiFi篇(一)—— WiFi两种模式

文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!↓↓↓通过下方链接进入专栏主页↓↓↓专栏主页:点击进入→ESP32 教学专栏 (基于ESP-IDF) 二级专栏:点击进入→

资料下载 佚名 2022-01-13 14:37:39

ESP32ESP-IDF 教学(五(1))——ESP-IDF的CMake 构建系统(Build System)

ESP32 之 ESP-IDF 学习笔记(五)【ESP-IDF CMake构建系统(Build System)】文章目录

资料下载 淡淡的爱 2021-12-16 16:53:21

四、ESP32单片机wifi的AP与STA模式使用

ESP32单片机wifi的AP与STA模式使用关于WIFI的AP与STA

资料下载 佚名 2021-11-26 17:51:10

ESP32ESP-IDF 教学(九)—— 串口通信(UART)

ESP32 之 ESP-IDF 教学(九)—— 串口通信(UART)文章目录ESP32 之

资料下载 KANA 2021-11-26 13:21:03

[esp32教程] 4、LEDC使用

基于Ubuntu下,利用esp-idf进行esp32开发的教程

2023-06-03 09:39:00

[esp32教程]3、利用idf.py创建组件

[esp32教程]3、利用idf.py创建组件

2023-05-05 09:05:57

[esp32教程]2、按键中断

基于Ubuntu,利用esp-idf进行esp32的教学

2023-05-05 09:04:04

esp32教程】0、环境搭建

基于Ubuntu下,利用esp-idf进行esp32开发的教程

2023-04-21 16:54:52

斑梨电子ESP32开发板可充电蓝牙WiFi模块 18650电池座

1970-01-01 08:00:00 至 1970-01-01 08:00:00

【DFRobot Beetle ESP32-C3开发板试用体验】vscode esp_idf开发环境体验

,esp32c3是esp32家族性价比最高的芯片之一,支持wifi和蓝牙5,功能强大。本想安装arduino开发环境,奈何真是太难了,好在乐鑫官

2022-11-28 14:04:36

浅谈Zephyr ESP32 wifi如何使用

在Zephyr ESP32 wifi驱动简析一文中简要分析了esp32 wifi

2021-06-01 10:17:53

7天热门专题 换一换
相关标签