ESP8266 airkiss Arduino IED配网 源码



     改写光合未来N1模块过程中网上找的N多Airkiss 配网程序,遇到各种坑,现把可以正常使用的代码分享出来。目前实现功能 

       1.使用乐鑫官方公众号AIRKISS或第三方网页AIRKISS配网(有时会不稳定) 

       2.使用乐鑫ESPTOUCH软件配网(成功率很高,推荐) 

       3.自动保存已配网AP信息,开机自动连接,超过20次连接失败则自动进入配网模式 

       4.单LED指示灯指示网络状态,慢闪:WIFI连接中 快闪:配网模式 10秒闪0.1秒:待机指示 


代码如下:


#include <ESP8266WiFi.h>
#include <Ticker.h> Ticker flipper;//定义定时器


#define PIN_LED 12           //指示灯位于GPIO12

int wifi_flg = 0;//WIFI状态标志   0 未连接 1 连接中  2 配网中  3 MQTT已连接

bool autoConfig()
{
  WiFi.begin();
  for (int i = 0; i < 20; i++)
  {
    int wstatus = WiFi.status();
    if (wstatus == 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);
      
        //每隔5s 翻转一下led状态,开始连网模式,慢闪
        //   flipper.attach(5, flip2); 
      flipper.detach();//定时器停止
      digitalWrite(PIN_LED,LOW);//初始LED灯置为低电平,HIGH表示点亮,LOW表示点不亮
      return true;
      //break;
    }
    else
    {
      Serial.print("AutoConfig Waiting......");
      
    // Serial.printf("PSW:%s\r\n", i);
      Serial.println(wstatus);
      delay(1000);
    }
  }
  Serial.println("AutoConfig Faild!" );
  return false;
  //WiFi.printDiag(Serial);
}


void smartConfig()
{
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig");
  WiFi.beginSmartConfig();
  while (1)
  {
    Serial.print(".");
    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());
      WiFi.setAutoConnect(true);  // 设置自动连接

       //每隔0.5s 翻转一下led状态,开始连网模式,慢闪
           flipper.attach(0.5, flip); 
      break;
    }
    delay(1000); // 这个地方一定要加延时,否则极易崩溃重启
  }
}

void setup()
{
  pinMode(PIN_LED, OUTPUT); //初始化PIN_LED引脚模式为输出
  digitalWrite(PIN_LED,HIGH);//初始LED灯置为低电平,HIGH表示点亮,LOW表示点不亮  
  Serial.begin(115200);

  //每隔0.5s 翻转一下led状态,开始连网模式,慢闪
           flipper.attach(0.5, flip); 

  

  if (!autoConfig())
  {
    Serial.println("Start module");

 
  //每隔0.1s 翻转一下led状态,开始连网模式,慢闪
           flipper.attach(0.1, flip); 
    
    smartConfig();
  
}

  //连接成功,打印WIFI信息
  Serial.println("");
  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());
}

void flip() {
  //定时器函数 灯亮灭 一半时间
  
  
  int state = digitalRead(PIN_LED);  // get the current state of GPIO1 pin
  digitalWrite(PIN_LED, !state);     // set pin to the opposite state

}




void led_ms(int i) {
  //LED亮i MS
  
    digitalWrite(PIN_LED,HIGH);//初始LED灯置为低电平,HIGH表示点亮,LOW表示点不亮  
    delay(i);
    digitalWrite(PIN_LED,LOW);//初始LED灯置为低电平,HIGH表示点亮,LOW表示点不亮  

}



void loop() {

    
    Serial.println(WiFi.SSID());
    Serial.println(WiFi.localIP());
    
    delay(10000);// 延时10秒
    led_ms(100);//亮灯100MS,做在线指示
  
  }