Pan
Published © GPL3+

Arduino: 自動WIFI重置器 Automatic WIFI reseter (Auto AP reseter)

因特別需求家中裝了很多無線設備,也不知道為什麼家中的中華電信數據機三不五時就會斷線,斷電再重新通電後又會恢復正常。又因為家裡不是隨時都有人可以幫忙處理,於是冒出了這個想法,要是有個設備可以自動偵測我的無線網路連線,當網路斷線時自動把AP的電源切斷,過個幾秒在通電,這樣就不用...

IntermediateFull instructions provided3 hours266
Arduino: 自動WIFI重置器 Automatic WIFI reseter (Auto AP reseter)

Things used in this project

Hardware components

Wemos D1 Mini
Espressif Wemos D1 Mini
×1
Relay (generic)
×1

Story

Read more

Code

AP Reseter

Arduino
 #include <ESP8266WiFi.h>  
 #include <ESP8266Ping.h>  
   
 const char* ssid   = "yourwifissid";  
 const char* password  = "yourpassword";  
 const char* remote_host = "www.google.com";  
   
 #define MinutesToCheck   10     // set x minutes to check internet access  
 #define TimesForRecheck   3      // retry x times to determine if wifi disconnected  
 #define RelayPin      D4     // Relay control pin  
   
 //-------------------------------------------------  
 // Connect to WIFI  
 //-------------------------------------------------  
 void ConnectWifi() {  
  int retry_times = 0;  
    
  Serial.println("Connecting to WiFi");  
  WiFi.disconnect();  
  delay(1000);  
  WiFi.begin(ssid, password);  
  delay(500);  
    
  while (WiFi.status() != WL_CONNECTED) {  
   Serial.print(".");  
   retry_times =retry_times + 1;  
   if (retry_times >= 60) {  
    WiFi.begin(ssid, password);  
    retry_times = 0;  
   }  
   delay(500);  
  }  
   
  Serial.println();  
  Serial.print("WiFi connected with ip ");  
  Serial.println(WiFi.localIP());  
    
 }  
   
 //-------------------------------------------------  
 // Ping WIFI  
 //-------------------------------------------------  
 boolean PingWifi() {  
  Serial.print("Pinging host ");  
  Serial.print(remote_host);  
   
  if(Ping.ping(remote_host)) {  
   Serial.println(" ... Success!!");  
   return true;  
  } else {  
   Serial.println(" ... Error :(");  
   return false;  
  }  
 }  
   
 //-------------------------------------------------  
 // Reset Relay  
 //-------------------------------------------------  
 void ResetRelay() {  
  Serial.println("Reseting AP power");  
  digitalWrite(RelayPin, HIGH);   // cut off relay  
  delay(10000);           // wait for 10 seconds  
  digitalWrite(RelayPin, LOW);   // restore relay  
 }  
   
 //-------------------------------------------------  
 // DelayOneMinute  
 //-------------------------------------------------  
 void DelayOneMinute() {  
  for (int i=0; i < 60; i++)  
  {  
   delay(1000);         // waits for a second  
  }  
 }  
   
 //-------------------------------------------------  
 // setup  
 //-------------------------------------------------  
 void setup() {  
  Serial.begin(115200);  
  delay(10);  
    
  pinMode(RelayPin, OUTPUT);   // sets the digital pin as output  
  digitalWrite(RelayPin, LOW);  // default LOW  

  // Set ESP8266 in station mode to hide broadcasted SSID: AI-THINKER_XXXXXX
  WiFi.mode(WIFI_STA);
   
  Serial.println("Wait for 2 mins AP initial time");  
  DelayOneMinute();        // wait for AP restart  
  DelayOneMinute();        // wait for AP restart  
  ConnectWifi();  
  PingWifi();  
 }  
   
 //-------------------------------------------------  
 // Main  
 //-------------------------------------------------  
 void loop() {  
  for (int i=0; i < MinutesToCheck; i++) {  // waits for x minutes  
   Serial.print(MinutesToCheck-i);  
   Serial.println(" minutes to ping");  
   DelayOneMinute();  
  }  
   
  for (int i=0; i < TimesForRecheck; i++) {  
   Serial.println("Checking WIFI status...");  
   if (WiFi.status() == WL_CONNECTED) {  
    Serial.println("WIFI connected");  
    if (PingWifi()) {  
     break;  
    }  
   }  
   if (i == TimesForRecheck-1) {   // ping failed x times, reset AP power  
    ResetRelay();  
    Serial.println("Wait for 2 mins AP initial time");  
    DelayOneMinute();        // wait for AP restart  
    DelayOneMinute();        // wait for AP restart  
    ConnectWifi();  
    break;  
   }  
   Serial.println("WIFI disconnected, wait 5 sec to retry");  
   delay(5000);           // wait for re-ping again  
  }  
 }  

Github

https://github.com/dancol90/ESP8266Ping

Credits

Pan

Pan

0 projects • 0 followers

Comments