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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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协议的最低两层上,并在物理层上进行了一些改动,加入了高速数字传输的特性和连接的稳定性。
### ESP8266 WiFi模块概述 ESP8266 是一款集成了 Wi-Fi 功能的微控制器芯片,广泛应用于物联网设备开发中。它支持多种工作模式,包括 Soft Access Point (SoftAP) 模式、Station 模式以及两者共存的混合模式[^1]。 --- ### 固件下载与配置 #### 固件获取 固件可以从官方资源库或者第三方开发者社区获得。对于初学者来说,推荐使用乐鑫公司提供的官方固件版本。可以通过访问官网页面找到最新稳定版固件链接并完成下载。 #### 工具准备 为了烧录固件到 ESP8266 芯片上,通常需要用到以下工具: - **esptool.py**: Python 编写的命令行工具,用于擦除闪存和上传新固件。 - **USB-TTL 串口转换器**: 将计算机连接至硬件电路板以便于调试通信。 安装 esptool 可通过 pip 命令实现: ```bash pip install esptool ``` 执行如下指令来刷写指定路径下的二进制文件至目标设备地址处: ```bash esptool.py --port /dev/ttyUSB0 write_flash 0x00000 firmware.bin ``` 上述例子假设 Linux 平台下 COM 设备名为 `/dev/ttyUSB0` ,实际操作需依据具体环境调整端口号参数设置情况而定[^2]。 --- ### 示例代码展示 以下是基于 Arduino IDE 的简单网络客户端程序片段: ```cpp #include <ESP8266WiFi.h> const char* ssid = "your_SSID"; // 替换为您的Wi-Fi名称 const char* password = "your_PASSWORD";// 输入对应的密码字符串值进去即可正常使用功能服务啦! void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); // 设置成 Station Mode WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED){ delay(500); Serial.println("Connecting to WiFi.."); } } void loop(){ if(WiFi.isConnected()){ Serial.print("Connected! IP Address:"); Serial.println(WiFi.localIP()); }else{ Serial.println("Not Connected!"); } delay(2000); } ``` 此段脚本实现了基本的功能需求:尝试接入预定义好的无线局域网热点;一旦成功建立关联关系,则打印当前分配得到的 IPv4 地址信息出来供后续进一步处理调用之便[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值