• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос NodeMcu падает вебсервер

FinalWare

New member
Сабж, если не заходить на веб сервер поднятый на nodemcu в течении примерно часа то в начале он подглючиывает ( грузит от 2х до 10 сек) а если не заходить дольше то и вовсе потом не отзывается, при этом от wifi не отключает и пингуется.
как быть ?
 

CodeNameHawk

Moderator
Команда форума
Ответ очевиден найти и исправить ошибки в коде, а вот в сервере или у вас покажет отладка.
 

FinalWare

New member
Ответ очевиден найти и исправить ошибки в коде, а вот в сервере или у вас покажет отладка.
Код:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
extern "C" {
#include "user_interface.h"
}
const char* ssid = "****";
const char* password = "****";

ESP8266WebServer server(80);


const int Relay1 = 12;
const int Relay2 = 13;

int stat = 1;





void handleRoot() {

  String s = "<!DOCTYPE HTML>\r\n<html><title>Audio Switch</title><style>body {text-decoration:none;color:#FFF;background-color: #541f1f;max-width: 800px;margin: 0 auto;}a {color:#FFF;text-decoration:none;padding: 5px 5px;}.active {color:red;}.button{text-align: center;margin: 0 auto;padding: 24% 10%;background-color: #192121;width: 67%;font-size: 50px;}</style>";
s += "<body>";
s += "  <a href='/stat/1'><div class='";
  if(stat == 1){
s += "active ";
}
s += "button' >PC</div></a>";
s += " <a href='/stat/2' ><div class='";
   if(stat == 2){
s += "active ";
}
s += "button' >Bluetooth</div></a>";
s += " <a href='/stat/0' ><div class='";
//  if(stat == 0){
// s += "active ";
//}
// s += "button'>OFF</div></a>";
s += "</body>";
 
  s += "</html>\n";
 
  server.send(200, "text/html", s);
  Serial.print("END SEND");
 
}



void setup(void){
 
pinMode(Relay2, OUTPUT);
pinMode(Relay1, OUTPUT);
digitalWrite(Relay2, 1);
digitalWrite(Relay1, 1);
  Serial.begin(115200);
WiFi.mode(WIFI_AP_STA);
  WiFi.hostname("AudioSwitch");
  wifi_set_sleep_type(NONE_SLEEP_T);
  wifi_station_set_reconnect_policy(true);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
 
  server.on("/", handleRoot);
  server.on("/stat/1", [](){
    stat = 1;
    digitalWrite(Relay2, 1);
digitalWrite(Relay1, 1);

handleRoot();
  });
  server.on("/stat/2", [](){
    stat = 2;
  
    digitalWrite(Relay2, 0);
digitalWrite(Relay1, 0);

handleRoot();
  });

    server.on("/hidden/2", [](){
    stat = 2;
    digitalWrite(Relay2, 0);
digitalWrite(Relay1, 0);

  });
      server.on("/hidden/1", [](){
    stat = 1;
    digitalWrite(Relay2, 1);
digitalWrite(Relay1, 1);

  });

  server.on("/status", [](){
  
    server.send(200, "text/plain", String(stat));

  });

  server.onNotFound(handleRoot);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void){

  server.handleClient();
}
Вот :)
Все проверенно не один раз)
 

FinalWare

New member
Ну и сколько свободной памяти при запуске, сколько после часа работы и сколько когда не работает?

У вас нет комментариев, кто что делает и что должно получиться хз.
Скетч управляет двумя реле для переключения аудиовходов
41280 озу свободно.
 

pvvx

Активный участник сообщества
работает уже примерно час утечки нет, отключается то от вифи то просто тушит вебсервер. Такие приколы появляются спустя часов 5-6
Может путаница?
Точно "пингуется", а сервер (сокет-порт 80) не отвечает?
В WiFi стандарте есть время всяких тай-аутов выкидывания клиента, если с ним не идет диалог какое-то установленное время (не передаются-принимаются пакеты на него - (4) Disassociated due to inactivity, ...), происходит смена ключей WPA (обычно срок устанавливается на роутере, но ESP8266 не со всеми роутерами дружит), банальный уход из зоны покрытия роутера и возврат (или длительная помеха в эфире/ потеря нескольких beacon) так-же плохо отрабатывается при включенном WPA (роутер должен сменить внутренний ключик соединения, а ESP "профукивает" это), ...
Смотрите UART лог на номера событий по WiFi - часть номерков можно найти тут

Для примера - "обратное явление" - AP ESP8266 выкидывает других клиентов, если нет транзакций, при этом счет тайм-аута болтается 19..45 сек...

Если что-то с сокетом (сервером) на ESP, то тяните лог с Wireshark...
Запускаете эксплорер на компе, подключаете Wireshark к сети где сидит ESP, вставляете фильтр типа [inline]ip.addr == 192.168.1.225[/inline] (IP ESP), пингуете и обращаетесь из эксплорера к ESP, и далее, лог/картинку в студию… Только тогда может быть уточнен диагноз и найден “больной”.
 
Последнее редактирование:
Сверху Снизу