розетка 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(); } }
удалил все что связанно с button и заработало. не верный пин кнопки, но какой это пин я не разобрался.
Иж тут, без году неделя а уже разкомандовался... А поиском, что не умеем пользоваться? Я вот доработал неделю, освободился, добрался до дачи, и на мобильном интернете за несколько минут нашел. ссылка . Оно?
Сходил по ссылке, удивился. Это сколько же надо сил и времени потратить, как надо упереться, чтобы не учиться программировать. Воистину, ESP-8266 удивительная штука - до ее появления такой хрени не было.
А что там сложного, я статью то полностью не читал. Там главное описаны все GPIO и под спойлером отличия Sonoff на ESP8286 и ESP8285, и написано, что китайцы на последней не ставили подтягивающих резисторов. И нужно у себя в настройке входа писать не просто INPUT а INPUT_PULLUP и это обязательно присутствует в кастомных прошивках. Только это и спрашивал ТС А так кнопка у ТС сидит правильно на GPIO0, но INPUT_PULLUP нет. Не знаю про эту модель, а Basic у меня засунут в подобный корпус ( розетка с кнопкой и светодиодом ) и никаких проблем с ним нет, от слова совсем. И по кнопке можно включить/выключить и голосом и через WEB страницу. Это самый простой выход, разбирайтесь пока.
Сложного, наверно, ничего. Я не представлял что под ESP столько прошивок для бездельников. И сколько, с другой стороны, надо напрягать моск чтобы из этих прошивок что-то добыть, лишённое гибкости.
Сложного ничего нет. Надо только уметь Гуглом пользоваться. Я видел и читал про прошивку esp8285 и какраз в розетке Sonoff. Возможности поискать за ТС нет я сейчас в Питере на свадьбе дочери и пишу с телефона. Может если доживу до вечера погуглю за ТС