Время ожидания веб-сервера nodemcu ESP8266 истекло

Я новичок в использовании модуля NodeMCU ESP8266 12E. Я использую его в arduino-IDE. У меня есть простой скетч, который управляет светодиодом по локальной сети. Он отлично работает, когда я запускаю сервер на устройстве. Однако через около 10 минут браузер больше не может обмениваться данными с устройством, похоже, что сервер закрыт. Я попытался прошить модуль после этого видео, потому что прочитал, что мне следует попробовать обновить прошивку. Я установил nodemcu_float_0.9.6-dev_20150704. Тем не менее проблема сохраняется.

Вот код.

#include <ESP8266WiFi.h>
const char* ssid = "mynetwork";
const char* password = "mypassword";
int ledPin = 13;
WiFiServer server(80);
void setup() {
  Serial.begin(115200);
  delay(10);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  server.begin();
  Serial.println("Server started");
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}
void loop() {
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1)  {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1)  {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }
// Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>"); 
  client.print("Led pin is now: ");

  if(value == HIGH) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");
  client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");  
  client.println("</html>");

  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}

Почему истекает время ожидания или внезапно закрывается? Я хочу, чтобы сервер работал 24/7, и мой план состоит в том, чтобы создать приложение для Android, чтобы включать / выключать вентиляторы, свет, насосы и т. Д. Через Интернет.

Пожалуйста, порекомендуйте.


person Faiyet    schedule 21.09.2016    source источник
comment
0.9.6 старая и глючная. Используйте прошивку с сайта nodemcu-build.com.   -  person gre_gor    schedule 21.09.2016
comment
Спасибо за ссылку... выбрать модули довольно сложно, тем более, что я не разбираюсь во всех них.   -  person Faiyet    schedule 21.09.2016
comment
Перепрошивка прошивки NodeMCU не принесет вам никакой пользы — вы не используете их прошивку, когда используете Arduino SDK. На самом деле, каждый раз, когда вы прошиваете свой код выше, он стирает любую прошивку на чипе.   -  person Dawn Minion    schedule 21.09.2016


Ответы (1)


Ваш код поддерживает WiFiClient только в течение времени, необходимого для выполнения окончательной задержки/последовательной печати. ​​После этого WiFiClient будет уничтожен, и никакие данные не будут переданы клиенту. Похоже, первые десять минут у вас все работает нормально, но я бы не ожидал, что так будет всегда.

Кроме того, можете ли вы включить ведение журнала отладки и опубликовать результаты здесь? В SDK есть функция Serial.setDebugOutput(true/false) для этого. Он будет включать дополнительную информацию, которая может помочь.

Наконец, рассматривали ли вы возможность использования классов ESP8266WebServer, включенных в ESP Arduino SDK? Он уже реализует хорошо протестированный и функциональный веб-сервер, который кажется именно тем, что вам нужно, и может избавить вас от разочарования при разработке собственного.

person Dawn Minion    schedule 21.09.2016