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,做在线指示 }