很多代码在展示smartconfig 的时候,只写了smartconfig的代码,导致让人会误以为系统会自动检测网络是否连接状态。
实际上在smartconfig的时候必须先检测网络连接状态一定时间,然后在无法联通的时候再启动smartconfig 的设置,参考代码如下。
#include <ESP8266WiFi.h>
void setup() {
// ESP.eraseConfig();
// delay(1000);
// ESP.reset();
// ESP.restart();
Serial.begin(115200);
pinMode(2, OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.begin();
int i=0;
while(i<=30){
Serial.println(i);
delay(100);
if (WiFi.status() == WL_CONNECTED)break;
i++;
}
if (WiFi.status() == WL_CONNECTED)
{
Serial.println("AutoConfig Success");
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
WiFi.printDiag(Serial);
}
else
{
smartConfig();
}
}
void smartConfig() {
Serial.println("begin stmart config...");
WiFi.beginSmartConfig();
while (WiFi.status() != WL_CONNECTED) {
Serial.print(">");
digitalWrite(2, 0);
delay(300);
digitalWrite(2, 1);
delay(300);
if (WiFi.smartConfigDone()) {
Serial.println("\r\nsmartconfig success");
Serial.printf("SSID:%S", WiFi.SSID().c_str());
Serial.printf("PW:%s", WiFi.psk().c_str());
break;
}
}
}
void loop() {
}
smartconfig 配置成功后,确实会把链接配置保存下来,但是当你运行
WiFi.begin()后如果立马使用WiFi.status() != WL_CONNECTED 的判断未必能检测到网络连通情况。
所以必须加上一个while 的循环延时。
上面有几行被注释的代码,用于擦除efrom 中保存的wifi配置信息。
ESP.eraseConfig();
delay(1000);
ESP.reset();
ESP.restart();
当然这个smartconfig 确实带来了方便,但是也有他的不足,就是如果你是要连入手机热点的时候就稍微有点麻烦,你必须另外准备一部手机来进行操作!
当然这里面是否有安全问题是不知道的!