分享

【补坑】ESP8266的SmartConfig功能

 金刚光 2018-08-30

        在制作WIFI天气显示屏时,曾经挖了一个坑,是关于ESP8266 SmartConfig功能的,昨天一个观众向我提起了这个,我决定做一个专栏讲解一下喵~

Q:有人也许会问SmartConfig是干啥的喵?

A:SmartConfig是安信可公司开发的利用手机配置ESP8266连接WIFI的一个物联网设备标配功能。

Q:ESP8266怎么玩?

A:ESP8266基础教程

好了下面进入正题,今天主要要讲两个库<ESP8266WiFi.h>和<ESP8266WiFiMulti.h>

1.0    SmartConfig函数

        WiFi.beginSmartConfig();    //开启SmartConfig功能(bool)

        WiFi.smartConfigDone();    //检测SmartConfig配置状态(bool)

在正常情况下,我们一般只使用这两个函数喵

1.1    例程讲解

        仔细观察这个例程可以发现,我们需要在初始化时定义WIFI模式为STA或者AP+STA模式,随后启动SmartConfig,通过while等待SmartConfig配置完成,完成后SmartConfig自动配置WIFI并连接,随后串口输出SSID和密码,当然,不需要可以删掉的喵~

1.2    手机端APP

APP默认使用安信可公司官方APP

https://github.com/EspressifApp/EsptouchForAndroid

在目录    EsptouchForAndroid/releases/apk/中

1.3   点明关键

        SmartConfig功能很是方便,但是有一个问题,就是WIFI配置不能掉电保存,难道我们必须每次开启设备都要用手机配置一次?

 答案是NO,所以我们就需要用到下面这个库

2.0    ESP8266WiFiMulti.h

        ESP8266WiFiMulti.h这个库是一个用来为esp8266配置多个WIFI的工具,使用这个库可以为ESP8266添加多个可连接SSID,让ESP8266自行选择WIFI连接,并且WIFI配置是自动保存在EEPROM中的,可以掉电保存,非常适合用来解决SmartConfig的这一问题。

2.1    <ESP8266WiFiMulti.h>    函数详解

        wifiMulti.run();    //从EEPROM中读取配置并连接(bool)

        wifiMulti.addAP(SSID,PASSWORD);    //添加WIFI热点信息并自动保存

2.2    <ESP8266WiFiMulti.h>    函数例程(原创)

#include <ESP8266WiFi.h>

#include <ESP8266WiFiMulti.h>

ESP8266WiFiMulti wifiMulti;

void smartConfig()    {

      WiFi.mode(WIFI_STA);

      Serial.println("\r\nWait for Smartconfig");

      WiFi.beginSmartConfig();

      while (!WiFi.smartConfigDone()) {

            Serial.print(".");

            delay(500);

          }

      Serial.println("SmartConfig Success");

      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());

      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());

      wifiMulti.addAP(WiFi.SSID().c_str(),WiFi.psk().c_str());

}

void setup() {

  Serial.begin(115200);

  delay(1000);

  Serial.println();

  Serial.println("Start module");

  wifiMulti.run();

  delay(1000);

  if (wifiMulti.run() == WL_CONNECTED) {

        Serial.println("");

        Serial.println("WiFi connected");

        Serial.println("IP address: ");

        Serial.println(WiFi.localIP());

      }

  else if (wifiMulti.run() != WL_CONNECTED) {

        Serial.println("WiFi not connected!");

        smartConfig();

       }

}


void loop(){

}

2.3    例程详解

基础代码与SmartConfig部分相同,在Setup部分添加了自动连接和检测连接状态的功能,如果检测到连接失败,则自动进入SmartConfig模式,SmaetConfig函数中添加wifiMulti.addAP()用于保存获取的WIFI,便于下次上电连接。

2.4    运行效果

手机配置后重启设备自动连接

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多