请教大佬,我使用的ESP8266,使用SmartConfig,自动配网后,为什么断电重启,每次都需要重新配网。
#define BLINKER_WIFI
#define BLINKER_ALIGENIE_LIGHT //天猫精灵
#define BLINKER_MIOT_LIGHT //小爱同学
#define BLINKER_DUEROS_LIGHT //小度
#include <Blinker.h>
#include <Wire.h>
#include <ESP8266WiFi.h> //WIFI库,配网必需
char auth[] = "*************"; //设备key,打开点灯app,添加设备,选择arduino设备,选择wifi接入,这里就会获得一个密钥,把密钥填写在这里。
bool WIFI_Status = true; //WIFI状态标志位
int count=0;
void smartConfig()//配网函数
{
WiFi.mode(WIFI_STA); //使用wifi的STA模式
Serial.println("\r\nWait for Smartconfig...");//串口打印
WiFi.beginSmartConfig(); //等待手机端发出的名称与密码
while (1) //死循环,等待获取到wifi名称和密码
{
//等待过程中一秒打印一个.
Serial.print(".");
delay(1000);
if (WiFi.smartConfigDone())//获取到之后退出等待
{
Serial.println("SmartConfig Success");
//打印获取到的wifi名称和密码
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
WiFi.setAutoConnect(true); // 设置自动连接,这个语句是最重要的语句
break;
}
}
}
void WIFI_Init()
{
Serial.println("\r\n正在连接");
//当设备没有联网的情况下,执行下面的操作
while(WiFi.status()!=WL_CONNECTED)
{
//WiFi.begin(WiFi.SSID().c_str(), WiFi.psk().c_str());
if(WIFI_Status)//WIFI_Status为真,尝试使用flash里面的信息去 连接路由器
{
Serial.print(".");
delay(1000);
count++;
if(count>=5)
{
WIFI_Status = false;
Serial.println("WiFi连接失败,请用手机进行配网");
}
}
else//使用flash中的信息去连接wifi失败,执行
{
smartConfig(); //smartConfig技术配网
}
}
//串口打印连接成功的IP地址
Serial.println("连接成功");
Serial.print("IP:");
Serial.println(WiFi.localIP());
}
void setup()
{
// 初始化串口
Serial.begin(115200);
// 初始化blinker
WIFI_Init();//调用WIFI函数
Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());//运行blinker
}
void loop()
{
Blinker.run();//语句负责处理Blinker收到的数据,每次运行都会将设备收到的数据进行一次解析。
//在使用WiFi接入时,该语句也负责保持网络连接
}
|