Помогите адаптировать скетч от esp8266 к esp8285

Тема в разделе "Arduino & Shields", создана пользователем kent2, 15 авг 2021.

  1. kent2

    kent2 Нуб

    розетка sonoff s26 на esp8285 не хватает знаний перенести скетч на нее от s20 заливал скетч, реле щелкает постоянно.
    Код (C++):
    #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 PIN_BUTTON = 0;
    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);
    pinMode(PIN_BUTTON, INPUT);
    digitalWrite(PIN_RELAY, HIGH);
    digitalWrite(PIN_LED, LOW);
    Serial.begin(115200);
    delay(10);
    attachInterrupt(PIN_BUTTON, Click, FALLING);
    }

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

    kent2 Нуб

    удалил все что связанно с button и заработало. не верный пин кнопки, но какой это пин я не разобрался.
     
  3. kent2

    kent2 Нуб

    форум мертвый. удаляйте тему.
     
  4. SergeiL

    SergeiL Оракул Модератор

    Иж тут, без году неделя а уже разкомандовался... :mad:
    А поиском, что не умеем пользоваться?
    Я вот доработал неделю, освободился, добрался до дачи, и на мобильном интернете за несколько минут нашел. ссылка . Оно?
     
    Andrey12 нравится это.
  5. kent2

    kent2 Нуб

    удали тему. у меня глаза плачут
     
  6. ИгорьК

    ИгорьК Гуру

    Сходил по ссылке, удивился. Это сколько же надо сил и времени потратить, как надо упереться, чтобы не учиться программировать.
    Воистину, ESP-8266 удивительная штука - до ее появления такой хрени не было.
     
    Andrey12 и SergeiL нравится это.
  7. SergeiL

    SergeiL Оракул Модератор

    А что там сложного, я статью то полностью не читал. :)

    Там главное описаны все GPIO и под спойлером отличия Sonoff на ESP8286 и ESP8285, и написано, что китайцы на последней не ставили подтягивающих резисторов. И нужно у себя в настройке входа писать не просто INPUT а INPUT_PULLUP и это обязательно присутствует в кастомных прошивках.

    Только это и спрашивал ТС
    А так кнопка у ТС сидит правильно на GPIO0, но INPUT_PULLUP нет.

    Не знаю про эту модель, а Basic у меня засунут в подобный корпус ( розетка с кнопкой и светодиодом ) и никаких проблем с ним нет, от слова совсем. И по кнопке можно включить/выключить и голосом и через WEB страницу.

    Это самый простой выход, разбирайтесь пока.
     
    Andrey12 и arkadyf нравится это.
  8. ИгорьК

    ИгорьК Гуру

    Сложного, наверно, ничего. Я не представлял что под ESP столько прошивок для бездельников. И сколько, с другой стороны, надо напрягать моск чтобы из этих прошивок что-то добыть, лишённое гибкости.
     
  9. Airbus

    Airbus Радиохулиган Модератор

    Сложного ничего нет. Надо только уметь Гуглом пользоваться. Я видел и читал про прошивку esp8285 и какраз в розетке Sonoff. Возможности поискать за ТС нет я сейчас в Питере на свадьбе дочери и пишу с телефона. Может если доживу до вечера погуглю за ТС