You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32如何在AP模式下检测到配置WiFi后切换回STA模式?

ESP32 保持AP运行同时检测目标WiFi并自动切换STA模式的实现方案

完全可以实现,核心思路是让ESP32同时运行AP与STA双模式,在维持AP供Web配置的同时,定期尝试连接目标WiFi,成功后关闭AP并切换至纯STA模式。具体实现步骤如下:

  • 初始化双模式
    先将WiFi模式设置为WIFI_AP_STA双模式,启动自身AP(用于Web配网界面),同时保存之前配置的目标WiFi信息。示例代码:

    WiFi.mode(WIFI_AP_STA);
    // 配置并启动自身AP
    WiFi.softAP("ESP32-Config", "config123");
    // 保存目标WiFi的SSID和密码(可通过Preferences存储)
    String targetSSID = "YourWiFiSSID";
    String targetPassword = "YourWiFiPass";
    
  • 定期检测目标WiFi
    使用定时器(如Ticker库)或FreeRTOS任务,每隔固定时间(如10秒)发起一次目标WiFi连接尝试:

    Ticker wifiChecker;
    void checkAndConnectWiFi() {
      if (WiFi.status() == WL_CONNECTED) return; // 已连接则跳过
      // 尝试连接目标WiFi
      WiFi.begin(targetSSID.c_str(), targetPassword.c_str());
      // 等待连接结果,超时5秒
      int waitCount = 0;
      while (WiFi.status() != WL_CONNECTED && waitCount < 50) {
        delay(100);
        waitCount++;
      }
      // 连接成功则切换模式
      if (WiFi.status() == WL_CONNECTED) {
        // 关闭Web配网服务(以ESPAsyncWebServer为例)
        server.end();
        // 关闭自身AP
        WiFi.softAPdisconnect(true);
        // 切换为纯STA模式
        WiFi.mode(WIFI_STA);
      }
    }
    
    // setup中初始化定时器,每10秒触发一次检测
    void setup() {
      // ... 其他初始化代码(Web服务器等)
      wifiChecker.attach(10, checkAndConnectWiFi);
    }
    
  • 关键注意事项

    • 检测任务需避免阻塞主线程,非阻塞式的等待逻辑或单独FreeRTOS任务更可靠。
    • 目标WiFi配置需持久化存储(如使用ESP32的Preferences库),避免重启后丢失。
    • 切换模式前需先关闭Web服务器等依赖AP的服务,防止资源泄漏。

内容的提问来源于stack exchange,提问作者dronus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:42:41