deasdron
New member
Помогите адаптировать код под nodemcu. не работает реле и светодиод на плате
Код:
#include <ESP8266WiFi.h>
#include <ESP8266Ping.h>
const char* ssid = "ssid"; // подставить название своей сети WiFi
const char* password = "password"; //подставить пароль свой сети WiFi
//IPAddress ip(192, 168, 1, 70); //Node static IP
//IPAddress gateway(192, 168, 0, 1);
//IPAddress subnet(255, 255, 255, 0);
//const char* remote_host = "www.ya.ru"; //адрес для пинга
const IPAddress remote_ip(87, 250, 250, 242); // адрес для пинга
unsigned long previousMillis = 0;
const long interval = 300; //интервал между пингами в сек
const long T_ROUTER = 60; // время ожидания загрузки роутера в сек
const long T_RELAY = 5; // задержка от выключения реле до включения в сек
int PIN_RELAY = 12;
int PIN_LED = 13;
int COUNT_PING = 0; //количество попыток при отсутствия пинга (не задается)
int COUNT_PING_MAX = 2; //максимальное количество отсутствия пинга до перезагрузки роутера
int COUNT_WIFI = 0; //счетчик попыток подключения к WiFi
int COUNT_WIFI_MAX = 60; //300; // Таймаут до перезагрузки роутера при отсутствии WiFi в сек
void setup()
{
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_RELAY, OUTPUT);
digitalWrite(PIN_RELAY, HIGH);
digitalWrite(PIN_LED, LOW);
Serial.begin(115200);
delay(10);
}
void ConnectWIFI()
{
Serial.println("Подключаюсь к WiFi");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// WiFi.config(ip, gateway, subnet);
while (WiFi.status() != WL_CONNECTED)
{
if (COUNT_WIFI <= COUNT_WIFI_MAX)
{
COUNT_WIFI++;
}
else
{
Serial.println();
Relay(); //перезагружаемся так как нет подключения к WiFi
Serial.println("Подключаюсь к WiFi");
}
//Serial.println(WiFi.status());
digitalWrite(PIN_LED, !digitalRead(PIN_LED)); //моргаем зеленым светодиодом
delay(1000);
Serial.print(".");
}
COUNT_WIFI = 0; // сбрасываем счетчик попыток подключения к WiFi
Serial.println();
Serial.print("WiFi подключен, ip : ");
Serial.println(WiFi.localIP());
//Serial.println(WiFi.status());
digitalWrite(PIN_LED, LOW); // зажигаем зеленый светодиод
COUNT_PING = 0; // сбрасываем счетчик неуспешных пингов
}
void Relay()
{
if (digitalRead(PIN_RELAY) == HIGH)
{
digitalWrite(PIN_RELAY, LOW); //отключаем питание на розетке
Serial.println("Реле ВЫключено");
}
delay(T_RELAY*1000);
digitalWrite(PIN_RELAY, HIGH); //включаем питание на розетке
Serial.println("Реле Включено, ждем загрузки роутера");
delay(T_ROUTER*1000); // ждем загрузки роутера
COUNT_PING = 0; // сбрасываем счетчик неуспешных пингов
COUNT_WIFI = 0; // сбрасываем счетчик попыток подключения к WiFi
previousMillis = 0;
}
void Click()
{
digitalWrite(PIN_RELAY, LOW); //отключаем питание на розетке
Serial.println("Реле выключено кнопкой");
}
void loop()
{
if (WiFi.status() != WL_CONNECTED) // нет подключения к WiFi
{
ConnectWIFI(); //подключаемся к WiFi
}
unsigned long currentMillis = millis();
if (((currentMillis - previousMillis) >= interval*1000) && (digitalRead(PIN_RELAY) == HIGH) && (WiFi.status() == WL_CONNECTED))
{
previousMillis = currentMillis;
Serial.print("Попытка пинга: ");
//Serial.println(remote_host);
Serial.println(remote_ip);
//if(Ping.ping(remote_host))
if (Ping.ping(remote_ip))
{ //пинг есть
Serial.println("Пинг есть!!");
COUNT_PING = 0;// сбрасываем счетчик неуспешных пингов
} else
{ // пинга нет
Serial.print("Пинг отсутствует :( ");
COUNT_PING ++;
Serial.println(COUNT_PING);
}
}
if (COUNT_PING >= COUNT_PING_MAX) // если превышено количество попыток пинга перезагружаем роутер
{
Relay();
}
if (digitalRead(PIN_RELAY) == LOW) // нажата кнопка, перезагружаем роутер
{
Relay();
}
}