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

ESP8266清除WiFi凭据后仍能连接WiFi的EEPROM/FLASH异常问题

解决ESP8266清除自定义凭据后仍能连接WiFi的问题

这个问题我之前排查过,根本原因不是EEPROM或者Flash故障,而是ESP8266 WiFi库默认会自动保存并加载成功连接过的WiFi凭据到系统Flash分区,和你自己用EEPROM存储的凭据是完全分开的。当你清空自己的ssid/password数组后调用WiFi.begin("", "")时,WiFi库会自动 fallback 到系统保存的历史凭据,导致设备依然能连接WiFi,而你的串口只打印了自己EEPROM里的空值,所以看起来“无凭据却能连接”。

具体解决方案:

1. 关闭WiFi自动持久化特性

在初始化阶段(比如setup()开头)添加代码,禁用系统自动保存WiFi凭据的功能,让WiFi连接完全由你自己的代码控制:

WiFi.persistent(false); // 关闭系统自动保存WiFi凭据到Flash

2. 清除系统已保存的WiFi凭据

当你需要清除凭据时,除了清空自己的ssid/password数组并写入EEPROM,还要调用WiFi.disconnect(true)来清除系统Flash里的历史凭据:

// 修正你的loop里的清除逻辑
void loop() {
  if (!wifi_status) {
    server.handleClient();
  } else {
    Serial.println("Doing Sensor stuff");
    delay(2000);
    
    // 清除凭据的完整流程
    // 1. 清空本地数组
    for( int i = 0; i < sizeof(ssid); i++ ){
      ssid[i] = (char)0;
      password[i] = (char)0;
    }
    // 2. 清除系统保存的WiFi凭据
    WiFi.disconnect(true); // true参数表示清除系统存储的配置
    // 3. 写入空凭据到自己的EEPROM
    save_credentials();
    
    // 可选:重启设备让更改生效,避免后续WiFi.begin再读取旧配置
    // ESP.restart();
  }
}

3. 优化凭据加载逻辑

在setup_wifi()函数中,确保当你的本地ssid为空时,不要调用WiFi.begin()(或者明确传入空值并确保系统不会 fallback):

bool setup_wifi(int timeout) {
  int timeout_ctr = 0;
  
  // 如果本地ssid为空,直接返回连接失败
  if (strlen(ssid) == 0) {
    Serial.println("No credentials stored, skipping WiFi connection");
    return false;
  }

  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  
  while ((WiFi.status() != WL_CONNECTED) && (timeout_ctr < timeout)) {
    delay(500);
    Serial.println("...");
    timeout_ctr++;
  }
  
  if (WiFi.status() == WL_CONNECTED) {
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println("Connection to MCU failed, setting up AP.");
  }
  
  return (WiFi.status() == WL_CONNECTED);
}

为什么之前的代码会出现问题?

ESP8266的WiFi.begin()函数有个隐藏逻辑:如果传入的ssid是空字符串,它会自动尝试加载系统Flash中保存的最后一次成功连接的WiFi配置。所以即使你自己的EEPROM里已经清空了凭据,系统仍然有一份备份,导致设备能正常连接,但你的串口只打印了自己EEPROM中的空值,造成“无凭据连接”的假象。

通过上面的修改,就能完全接管WiFi凭据的管理,避免系统自动加载历史配置的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:45:38