ESP8266使用:

#include <ESP8266WiFi.h>

ESP32使用:

#include <WiFi.h>

SmartConfig的配置:

void SmartConfig()
{
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig...");
  WiFi.beginSmartConfig();
  while (1)
  {
    Serial.print(".");
    delay(500);                   // 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());
      break;
    }
  }
}

上电时自动重连:

bool AutoConfig()
{
    WiFi.begin();
    //如果觉得时间太长可改
    for (int i = 0; i < 20; i++)
    {
        int wstatus = WiFi.status();
        if (wstatus == WL_CONNECTED)
        {
            Serial.println("WIFI SmartConfig Success");
            Serial.printf("SSID:%s", WiFi.SSID().c_str());
            Serial.printf(", PSW:%s\r\n", WiFi.psk().c_str());
            Serial.print("LocalIP:");
            Serial.print(WiFi.localIP());
            Serial.print(" ,GateIP:");
            Serial.println(WiFi.gatewayIP());
            return true;
        }
        else
        {
            Serial.print("WIFI AutoConfig Waiting......");
            Serial.println(wstatus);
            delay(1000);
        }
    }
    Serial.println("WIFI AutoConfig Faild!" );
    return false;
}

setup( )函数中启用:

void setup() {
  Serial.begin(115200);
  delay(100);
  if (!AutoConfig())
  {
      SmartConfig();
  }
}
![微信扫码配网EspTouch][1]

通过SmartConfig一键配网后,如更换路由怎样重新配置
1.每次程序启动后,直接进入SmartConfig配置,设置超时时间,一旦超时则退出SmartConfig配置,在此时间段内可进行配置

#include <ESP8266WiFi.h>
  void SmartConfig()
{
    int TimerOverCount=0;
    WiFi.mode(WIFI_STA);
    Serial.println("WIFI Wait for Smartconfig");
    WiFi.beginSmartConfig();
       while (1)
    {
        Serial.printf(".%d",TimerOverCount);
        if (WiFi.smartConfigDone())
        {
         Serial.println("WIFI SmartConfig Success");
        Serial.printf("SSID:%s", WiFi.SSID().c_str());
        Serial.printf(", PSW:%s\r\n", WiFi.psk().c_str());
        Serial.print("LocalIP:");
        Serial.print(WiFi.localIP());
        Serial.print(" ,GateIP:");
        Serial.println(WiFi.gatewayIP());
        WiFi.setAutoConnect(true);  // 设置自动连接
        break;
        }
        if(TimerOverCount>=15)
         {
           WiFi.stopSmartConfig();
           WiFi.begin();
           break;
         }
         TimerOverCount ++;
        delay(1000);
      }
}
void setup(void)
{
  // Start Serial
  Serial.begin(115200);
  delay(100);
  SmartConfig();
  } 

来源 https://www.zhangtaidong.cn/archives/124/