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连接。

流程图

ESP8266 查询mysql数据库 esp8266确定wifi名称和密码_IP

相关语法

语法

  • 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() {                                   
}