• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Wemos D1 R1 виснет после временного промежутка.

PotatOS

New member
Доброго времени суток.

Прошил Wemos D1 R1 на подключение к точке доступа телефона и создания html страницы с двумя кнопками.
После успешной прошивки, ESP подключается и выдаёт IP-шник. При переходе можно мигать светодиодом, нажатием кнопок.

Проблема заключается в том, что после нескольких минут работы ESP виснет и перестаёт принимать команды. Также сносит страницу для управления.

Помогает нажатие кнопки reset на плате.

Ниже приведён скетч, которым прошивал. Оригинальные ssid и password заменил на заполнители.

1677172720019.png

C++:
#include <ESP8266WiFi.h>
 
const char* ssid = "Login";
const char* password = "Password";
 
int ledPin = D9;
WiFiServer server(80);
 
void setup() {
  Serial.begin(9600);
  delay(10);
 
 
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
 
  // Connect to WiFi network
  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");
 
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
 
  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("Click <a href=\"/LED=ON\">here</a> Turn relay ON<br>");
  client.println("Click <a href=\"/LED=OFF\">here</a> Turn relay OFF<br>");
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");
 
}
 

PotatOS

New member
Удаление цикла на ожидание отправки данных от клиента как-то прекратило зависание.
Либо же я недостаточно ждал.

C++:
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
Подожду минут 15, не отправляя никаких данных на плату. Обычно после такого времени она и зависает.
 

PotatOS

New member
UPD: Проблема пропала. Неужели дело действительно было в цикле?
 
Сверху Снизу