ESP8266 arduino 一键配网之后掉电不丢失wifi数据

本文关注掉电丢失wifi数据和不丢失数据的异同点。

一、软硬件

所用硬件如下图,软件是arduino 1.8.9。

二、代码分析

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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里面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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");

}

看语句:也就是说,如果没有已经自动配网,那么就自动配网。就是这么简单。

1
 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

可以通过搜索看到这个函数的说明。

还有其他的函数,都可以通过这里来找到说明。为了详细说明是怎么操作的,绘制一个图片如下:

初步分析到此,仅供参考。

进一步讨论