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

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 天气晴
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值