• Система автоматизации с открытым исходным кодом на базе 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
 
Сверху Снизу