本文关注掉电丢失wifi数据和不丢失数据的异同点。
一、软硬件
所用硬件如下图,软件是arduino 1.8.9。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL5tmaN9mRyQmb1cFZ2x2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2ADNxIjN1YDM4IDNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
二、代码分析
代码如下:
void smartConfig()
{
WiFi.mode(WIFI_STA);
Serial.println("\r\nWait for Smartconfig...");
WiFi.beginSmartConfig();
while (1)
{
Serial.print(".");
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
if (WiFi.smartConfigDone())
{
Serial.println("SmartConfig Success");
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
WiFi.setAutoConnect(true); // 设置自动连接,这个语句是最重要的语句。
break;
}
}
}
WiFi.setAutoConnect(true); // 设置自动连接,这个语句是最重要的语句。如果设置了自动连接属性为true,那么就可以让wifi的数据自动保存在esp8266模块的flash内部。
当然,在smartconfig函数里面设置自动保存还是不够的,这只是一个函数,没有人调用它,它是不会自动工作的,调用它的代码在setup里面。
void setup() {
Serial.begin(115200);
delay(10);
pinMode(LED_BUILTIN, OUTPUT);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
//smartConfig();不再直接上来就配网一次,而是判断一下,以前是否联网了,如果联网,那么就不用再次配网。
if (!autoConfig())
{
Serial.println("Start module");
smartConfig();
}
delay(500);
Serial.println("");
Serial.println("WiFi connected");
}
看语句:也就是说,如果没有已经自动配网,那么就自动配网。就是这么简单。
if (!autoConfig())
如果你在调试的时候,想断电重启就想寻找wifi开始配网(不要笑,有的时候调试时,是需要这样的)。
那么就将这个判断语句注释掉吧。每次都会让你配网。
三、深层分析
下面分析一下esp8266掉电不易失wifi数据的基本原理。
首先查看这个setAutoConnect函数在哪里,在arduino文件夹中搜索这个名字。找到在这个位置。
然后看函数原型,这个函数里面其实调用了esp8266 SDK内部的函数。
这个文件里面有wifi的参数。注意,这个文件是arduino编程环境下的库函数内容。ESP8266WiFiSTA.cpp文件。但是调用的函数wifi_station_set_config,却是在ESP8266 SDK一系列文件内部的。
SDK参考在哪里?官方手册上有SDK链接如下:
https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_cn.pdf
可以通过搜索看到这个函数的说明。
还有其他的函数,都可以通过这里来找到说明。为了详细说明是怎么操作的,绘制一个图片如下:
初步分析到此,仅供参考。
进一步讨论