2016年6月5日 星期日

使用ESP8266偵測網路斷線後重開設備


使用ESP8266偵測網路斷線後重開設備




















**  紅色字體部分請依現場環境修改 **






/*

2016-06-05 by yulie~

使用第2腳控制繼電器時,於上傳程式當下必須將第2腳斷開,否則無法上傳程式

 */

byte Relay_0  = 14;           // 使用第14腳控制繼電器
byte wait     = 90;           //次   測到斷線後每1秒重連,超過該次數後關電重啟
byte off_time = 6;            //Sec   設備斷電秒數
byte interval = 1;            //min   檢測連現狀態間隔時間

#include <ESP8266WiFi.h>
#define SSID "****"          // 無線網路連線名稱
#define PASS "******" // 無線網路連線密碼
#define HOST "www.google.com"
#define PORT    80
byte  count = 0;

void setup() {
  Serial.begin( 115200 );
  pinMode(Relay_0, OUTPUT);  
  digitalWrite(Relay_0, LOW);  //Relay off
  delay(20);
  WiFi.mode(WIFI_STA);                          // Connecting to a WiFi network
  Serial.print("Connect to Wi-Fi :  ");  Serial.println( SSID );
  WiFi.begin( SSID, PASS );   //Connect to Wi-Fi
}

void loop() {

  while ( WiFi.status() != WL_CONNECTED )   // 持續等待並連接到指定的 WiFi SSID
  {                                         // 如果連線AP 失敗時執行這一段程式
    delay(1000);
    Serial.print( "." ); Serial.print(count);
    if (count++ >= wait) {
      digitalWrite(Relay_0, HIGH); //Relay off
      delay(1000 * off_time);
      digitalWrite(Relay_0, LOW);
      count = 0;
    }
  }

  // WiFi.printDiag(Serial); //診斷信息
  // Serial.println( "," );  Serial.println( "WiFi connected" );
  // Serial.println( "IP address: " );
  // Serial.println( WiFi.localIP() );
  // Serial.println( "" );

  WiFiClient client;                      // 設定 ESP8266 作為 Client 端
  if ( !client.connect( HOST, PORT ) )    // 檢查是否可連上前述指定的主機
  {                                       // 如果連線前述指定的主機失敗時執行這一段程式
    Serial.print( "Host connection failed :" ); Serial.println(count);
    delay(1000);
    if (count++ >= wait) {
      Serial.println( "device power off...." );
      digitalWrite(Relay_0, HIGH);        //power off
      delay(1000 * off_time);
      digitalWrite(Relay_0, LOW);         //power on
      count = 0;
      Serial.println( "device power on...." );
    }
    return;
  }
  else
  {
    Serial.println( "Check Host : online..." );
    delay(60000 * interval);              //檢查間隔(mS)
  }
}