• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Помогите адаптировать код под nodemcu

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();
  }
  }
 

deasdron

New member
С реле разобрался, надо было питание кидать на 3.3v за место 5v. Вопрос со светодиодом. Он вообще управляется?
 

CodeNameHawk

Moderator
Команда форума
С реле разобрался, надо было питание кидать на 3.3v за место 5v.
Надежней реле питать от 5 вольт.
Обычно там есть перемычка, которая подает питание на светодиод, ее надо снять и запитать оптрон от 3.3 вольт.
Так реле не даст помеху на есп и будет надежно работать.
Rele.png
 

deasdron

New member
1605532066339.jpg А если реле такого вида?
Надежней реле питать от 5 вольт.
Обычно там есть перемычка, которая подает питание на светодиод, ее надо снять и запитать оптрон от 3.3 вольт.
Так реле не даст помеху на есп и будет надежно работать.
Посмотреть вложение 10147
 
Сверху Снизу