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