ESP8266WiFi-begin调用储存在ESP8266的闪存系统中的WiFi设置

本文详细介绍ESP8266WiFi模块的配置优化,如何通过persistent()函数在闪存中保存WiFi设置,以便于后续无需重复编写代码进行连接。包括无参数begin()方法的使用和清除闪存配置的流程。

ESP8266WiFi

有开发经验的同学,一定了解esp8266的WiFi的连接。
一般情况下,我们通过ESP8266WiFi库-begin()函数,配置wifi名称和wifi密码例如下程序片段

#include <ESP8266WiFi.h>        // 使用ESP8266WiFi库

const char* ssid     = "xxxxxx";      // 连接WiFi名
                                      // 请将您需要连接的WiFi名填入引号中
const char* password = "xxxxxx";      // 连接WiFi密码
                                      // 请将您需要连接的WiFi密码填入引号中
                                            
void setup() {
  Serial.begin(9600);         // 启动串口通讯
  
  WiFi.begin(ssid, password);                  // 启动网络连接
  Serial.print("Connecting to ");              // 串口监视器输出网络连接信息
  Serial.print(ssid); Serial.println(" ...");  // 告知用户esp8266正在尝试WiFi连接
  
  int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功
  while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由esp8266的WiFi连接状态所决定的。 
    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
    Serial.print(i++); Serial.print(' ');      // 此处通过While循环让esp8266每隔一秒钟检查一次WiFi.status()函数返回值
  }                                            // 同时esp8266将通过串口监视器输出连接时长读秒。
                                               // 这个读秒是通过变量i每隔一秒自加1来实现的。
                                               
  Serial.println("");                          // WiFi连接成功后
  Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信息。
  Serial.print("IP address:    ");             // 同时还将输出esp8266的IP地址。这一功能是通过调用
  Serial.println(WiFi.localIP());              // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。
}
 
void loop() {                                   
}

缺点

每次将wifif配置在程序中,增加代码会使代码冗余,繁杂。

改进

通过使用 begin()函数无参的方法,可调用储存在esp8266的闪存系统中的WiFi设置。

原理

在启动并连接WiFi时,ESP8266可以尝试使用闪存系统中储存的信息来进行WiFi连接。

流程图WIFI配置流程

相关语法

语法

  • WiFi.persistent();
    是否在flash中保存WiFi配置-可选
    参数(true or false)

语法

  • WiFi.begin();
    在不使用任何参数的情况下调用此函数,ESP8266模块将启用无线终端模式,并根据以前保存在闪存中的wifi配置连接到最近一次使用的接入点。

语法

  • WiFi.begin(ssid, password, channel, bssid, connect);
    我们也可以再调用begin函数的时候,为函数提供参数。这些参数的具体功能请见下面的“参数”部分介绍。

参数

参数

  • ssid – 要连接的wifi接入点的名字,最多可以包含32个字符。(类型:char*)
  • password – 要连接的 wifi接入点密码,长度至少应为8个字符且不超过64个字符。(类型:char*)
  • channel – 要连接的wifi接入点信道。(类型:int32_t)
  • bssid – 要连接的wifi接入点的mac地址。(类型:const uint8_t*)
  • connect – 连接状态参数。如果connect参数为true,ESP8266开发板会使用闪存中储存的信息尝试连接WiFi。如果connect参数为false,ESP8266开发板不会尝试连接WiFi,而只会将WiFi连接信息保存在闪存中。(类型:bool)

返回值

返回值

  • 返回值数据类型为布尔型。如果ESP8266开发板成功启动无线终端模式,则返回true,否则返回false。

示例程序

首次执行

#include <ESP8266WiFi.h>        // 使用ESP8266WiFi库

const char* ssid     = "xxxxxx";      // 连接WiFi名
                                      // 请将您需要连接的WiFi名填入引号中
const char* password = "xxxxxx";      // 连接WiFi密码
                                      // 请将您需要连接的WiFi密码填入引号中
                                            
void setup() {
  Serial.begin(9600);         // 启动串口通讯
  
  WiFi.persistent(true);//首次在flash中保存WiFi配置-可选
  WiFi.begin(ssid, password);                  // 启动网络连接
  Serial.print("Connecting to ");              // 串口监视器输出网络连接信息
  Serial.print(ssid); Serial.println(" ...");  // 告知用户esp8266正在尝试WiFi连接
  
  int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功
  while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由esp8266的WiFi连接状态所决定的。 
    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
    Serial.print(i++); Serial.print(' ');      // 此处通过While循环让esp8266每隔一秒钟检查一次WiFi.status()函数返回值
  }                                            // 同时esp8266将通过串口监视器输出连接时长读秒。
                                               // 这个读秒是通过变量i每隔一秒自加1来实现的。
                                               
  Serial.println("");                          // WiFi连接成功后
  Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信息。
  Serial.print("IP address:    ");             // 同时还将输出esp8266的IP地址。这一功能是通过调用
  Serial.println(WiFi.localIP());              // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。
}
 
void loop() {                                   
}

后续调用(再次烧录新代码)

#include <ESP8266WiFi.h>        // 使用ESP8266WiFi库

const char* ssid     = "xxxxxx";      // 连接WiFi名
                                      // 请将您需要连接的WiFi名填入引号中
const char* password = "xxxxxx";      // 连接WiFi密码
                                      // 请将您需要连接的WiFi密码填入引号中
                                            
void setup() {
  Serial.begin(9600);         // 启动串口通讯
  
  WiFi.begin();                  // 启动网络连接
  Serial.print("Connecting to ");              // 串口监视器输出网络连接信息
  Serial.print(ssid); Serial.println(" ...");  // 告知用户esp8266正在尝试WiFi连接
  
  int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功
  while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由esp8266的WiFi连接状态所决定的。 
    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
    Serial.print(i++); Serial.print(' ');      // 此处通过While循环让esp8266每隔一秒钟检查一次WiFi.status()函数返回值
  }                                            // 同时esp8266将通过串口监视器输出连接时长读秒。
                                               // 这个读秒是通过变量i每隔一秒自加1来实现的。
                                               
  Serial.println("");                          // WiFi连接成功后
  Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信息。
  Serial.print("IP address:    ");             // 同时还将输出esp8266的IP地址。这一功能是通过调用
  Serial.println(WiFi.localIP());              // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。
}
 
void loop() {                                   
}

擦除flash中的Wifi配置

#include <ESP8266WiFi.h>        // 使用ESP8266WiFi库

const char* ssid     = "xxxxxx";      // 连接WiFi名
                                      // 请将您需要连接的WiFi名填入引号中
const char* password = "xxxxxx";      // 连接WiFi密码
                                      // 请将您需要连接的WiFi密码填入引号中
                                            
void setup() {
  Serial.begin(9600);         // 启动串口通讯
  WiFi.persistent(false);
  WiFi.begin();                  // 启动网络连接
  Serial.print("Connecting to ");              // 串口监视器输出网络连接信息
  Serial.print(ssid); Serial.println(" ...");  // 告知用户esp8266正在尝试WiFi连接
  
  int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功
  while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由esp8266的WiFi连接状态所决定的。 
    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
    Serial.print(i++); Serial.print(' ');      // 此处通过While循环让esp8266每隔一秒钟检查一次WiFi.status()函数返回值
  }                                            // 同时esp8266将通过串口监视器输出连接时长读秒。
                                               // 这个读秒是通过变量i每隔一秒自加1来实现的。
                                               
  Serial.println("");                          // WiFi连接成功后
  Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信息。
  Serial.print("IP address:    ");             // 同时还将输出esp8266的IP地址。这一功能是通过调用
  Serial.println(WiFi.localIP());              // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。
  WiFi.disconnect(true);                       //擦除flash中的Wifi配置
}
 
void loop() {                                   
}

借鉴网站:

附ESP8266 Arduino开发文档

总结

  • 物联网开发尽可能阅读项目原文档及源代码
    在这里插入图片描述
    2022/1/4 天气晴
WLAN是英文WirelessLAN的缩写,就是无线局域网的意思。无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、灵活地为用户提供网络接入,适合于用户流动性较大、有数据业务需求的公共场所、高端的企业及家庭用户、需要临时建网的场合以及难以采用有线接入方式的环境等 作为全球公认的局域网权威,IEEE802工作组建立的标准在过去二十年内在局域网领域独领风骚。这些协议包括了802.3Ethernet协议、802.5TokenRing协议、802.3z100BASE-T快速以太网协议。在1997年,经过了7年的工作以后,IEEE发布了802.11协议,这也是在无线局域网领域内的第一个国际上被认可的协议。  在1999年9月,他们又提出了802.11b"HighRate"协议,用来对802.11协议进行补充,802.11b在802.11的1Mbps和2Mbps速率下又增加了5.5Mbps和11Mbps两个新的网络吞吐速率。利用802.11b,移动用户能够获得同Ethernet一样的性能、网络吞吐率、可用性。这个基于标准的技术使得管理员可以根据环境选择合适的局域网技术来构造自己的网络,满足他们的商业用户和其他用户的需求。802.11协议主要工作在ISO协议的最低两层上,并在物理层上进行了一些改动,加入了高速数字传输的特性和连接的稳定性。
<think>我们被要求清除ESP8266设备中存储的WiFi信息。根据引用[4],我们可以使用WiFiManager库来清理ESP8266储存WiFi连接信息。但是,用户的问题是关于如何使用`esp8266wifi.h`(可能是`ESP8266WiFi.h`)来清除WiFi信息。 在标准的ESP8266 Arduino核心库中,我们可以使用`WiFi.disconnect()`函数来断开当前连接,并且可以选择清除保存的WiFi网络信息。 具体来说,`WiFi.disconnect`函数有一个布尔参数,用于指定是否清除保存的WiFi设置。当我们将其设置为`true`时,它会清除保存的WiFi网络信息。 函数原型如下: ```cpp bool disconnect(bool clear = false); ``` 如果`clear`参数设置为`true`,则ESP8266会清除保存的WiFi网络信息(即从闪存中删除保存的网络凭证)。 因此,清除WiFi信息的代码可以这样写: ```cpp #include <ESP8266WiFi.h> void setup() { // 初始化串口 Serial.begin(115200); // 断开当前连接并清除保存的WiFi信息 WiFi.disconnect(true); // 打印提示信息 Serial.println("Cleared saved WiFi credentials"); } void loop() { // 不需要做任何事情 } ``` 注意:`WiFi.disconnect(true)`会断开当前连接,并且清除保存的WiFi信息(SSID和密码)。这样,下次启动时,ESP8266将不会自动连接到之前保存的网络。 另外,根据引用[4]中提到的清理ESP8266储存WiFi连接信息的方法,还有一种方式是通过调用`WiFi.persistent(false)`来禁用保存WiFi凭证到闪存,但这通常用于在连接前设置,以避免保存。而清除已经保存的信息,使用`WiFi.disconnect(true)`即可。 总结步骤: 1. 包含头文件`ESP8266WiFi.h`。 2. 调用`WiFi.disconnect(true)`来清除保存的WiFi信息。 注意:执行此操作后,设备将不会自动连接之前保存的网络,除非重新配置。 相关问题: 1. 如何让ESP8266忘记所有保存的WiFi网络? 2. 除了使用`WiFi.disconnect(true)`,还有其他方法清除ESP8266保存的WiFi信息吗? 3. 清除WiFi信息后,如何重新配置ESP8266连接到新的WiFi网络?</think>### 清除 ESP8266 存储的 WiFi 信息 要清除 ESP8266 设备中存储的 WiFi 信息,可以使用以下方法(基于 ESP8266WiFi 库): #### 核心方法 ```cpp #include <ESP8266WiFi.h> void clearSavedWiFi() { WiFi.persistent(false); // 禁用凭证自动保存到闪存 WiFi.disconnect(true); // 断开连接并清除保存的凭证 delay(100); // 等待操作完成 WiFi.persistent(true); // 恢复默认保存设置(可选) } ``` #### 使用说明: 1. **`WiFi.persistent(false)`** 禁用自动保存 WiFi 凭证到闪存的功能[^4]。 2. **`WiFi.disconnect(true)`** 关键参数 `true` 表示清除设备保存的所有 WiFi 网络凭证[^2]。 3. **执行效果** 调用后,设备将: - 断开当前 WiFi 连接 - 删除所有存储的 SSID 和密码 - 下次启动时不会自动连接历史网络 #### 完整示例: ```cpp #include <ESP8266WiFi.h> void setup() { Serial.begin(115200); clearSavedWiFi(); Serial.println("已清除所有保存的WiFi凭证"); } void loop() { /* 空 */ } void clearSavedWiFi() { WiFi.persistent(false); WiFi.disconnect(true); delay(100); } ``` #### 注意事项: 1. 清除凭证后需重新调用 `WiFi.begin()` 连接新网络 2. 部分固件版本可能需要重启生效 3. 清除操作会删除所有保存的网络,不可恢复 4. 建议在配网功能前调用此方法[^4] > 该方法适用于 ESP8266 Arduino 核心库,底层通过修改 `esp_wifi_set_config()` 实现闪存数据擦除[^3]。 --- ### 相关问题 1. 清除 WiFi 信息后如何重新配置 ESP8266 连接新网络? 2. ESP8266WiFi 凭证存储在哪个物理介质中?擦除次数是否有限制? 3. 如何实现 ESP8266 的自动配网功能(如 SmartConfig)? 4. 清除 WiFi 信息是否会影响 ESP8266 的其他功能(如 OTA 更新)? 5. 如何验证 WiFi 信息已被成功清除? [^1]: ESP8266.h 文件头定义的硬件接口说明 [^2]: ESP8266 WiFi 库的 STA 模式连接管理方法 [^3]: ESP8266 的存储架构与 Wi-Fi 功能特性 [^4]: WiFiManager 库的配网流程与凭证清理方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值