在ESP32大多数的例程中,都是直接把WIFI的SSID和Password写程序里,不能随时修改,但是在实际使用中网络是不固定的,如果更换了网络,就得重新修改程序,很麻烦。于是便自己试着写了一个demo:
#include "WiFi.h"
#include <Preferences.h>//包含与nvs存储有关的头文件
Preferences preferences;//定义一个声明
void SmartWifiConfig(void)
{
int ms;
WiFi.beginSmartConfig();
while (!WiFi.smartConfigDone())
{
delay(500);
ms++;
printf("Connecting WiFi, please wait %d ms\n", ms);
}
WiFi.setAutoConnect(true); // 设置自动连接
//类似于文件操作
preferences.begin("wifi");//打开一个空间
preferences.putString( "ssid" , WiFi.SSID());//保存连接成功后WiFi账号
preferences.putString( "password", WiFi.psk());//保存连接成功后WiFi密码
preferences.end();//关闭空间
}
bool autoConfig(void)
{
char ID[20] = "***";
char Password[20] = "***";
preferences.begin("wifi");//打开一个空间
preferences.getString("ssid", ID, sizeof(ID));//读取保存连接成功后WiFi账号
preferences.getString("password", Password, sizeof(Password));//读取保存连接成功后WiFi密码
preferences.end();//关闭空间
WiFi.begin(ID, Password);//开始连接WiFi
//WiFi.begin(PrefSSID.c_str(), PrefPassword.c_str());
for (size_t i = 0; i < 20; i++)
{
if (WiFi.status() == WL_CONNECTED)
{
Serial.println("WiFi automatic reconnection succeeded!");
return 1;
}
else
{
delay(1000);
Serial.println("Connecting WiFi, please wait...");
}
}
Serial.println("Unable to automatically connect to WiFi!");
return 0;
}
void setup()
{
Serial.begin(115200);
WiFi.mode(WIFI_STA);
delay(5000);
if (!autoConfig())
{
SmartWifiConfig();
}
}
void loop()
{
}
自动重连效果