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

Нужна помощь подвисает скетч

JIEXA

New member
Изменил скетч под свою задачу, но при отправке запроса через браузер виснет. Мигние светодиода сделал для контроля.
Код:
#include <ESP8266WiFi.h>
// Создаем сервер и порт для прослушки 80
WiFiServer server(80);

#ifdef ESP8266
extern "C" {
#include "user_interface.h"
}
#endif


//ssid and пароль точки доступа на ESP8266
const char *esp_ssid = "SKUD";
const char *esp_password = "12345678";

void createAccessPoint() {
  Serial.print("Configuring access point for wifi network: ");
  Serial.println(esp_ssid);
  WiFi.softAP(esp_ssid, esp_password);
  IPAddress accessIP = WiFi.softAPIP();
  Serial.print("AccessPoint IP address: ");
  Serial.println(accessIP);
  /* Go to http://192.168.4.1 in a web browser
   * connected to this access point to see it.
   */
}

void setup() {
  Serial.begin(74880);
  delay(10);
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output

      // Подготовка GPIO
  pinMode(5, OUTPUT);
  digitalWrite(5, 1);
  pinMode(4, OUTPUT);
  digitalWrite(4, 1);
  pinMode(0, OUTPUT);
  digitalWrite(0, 1);
  pinMode(2, OUTPUT);
  digitalWrite(2, 1);
  //Создание точки доступа
  createAccessPoint();
  Serial.println("Access Point On");
  // Запуск сервера
  server.begin();
  Serial.println("Server started");
  // Try pushing frequency to 80MHz.
    system_update_cpu_freq(SYS_CPU_80MHZ);
}

void loop() {
  digitalWrite(LED_BUILTIN, LOW);                               
  delay(500);                     

 
  // Проверка подключения
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Ожидание данных
  Serial.println("new client");
  while (!client.available()) {
    delay(10);
  }

  // Чтение первой строки запроса
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();

  // Работа с GPIO
  if (req.indexOf("/D1/0") != -1)
    digitalWrite(5, 0);
  else if (req.indexOf("/D1/1") != -1)
    digitalWrite(5, 1);
  else if (req.indexOf("/D2/0") != -1)
    digitalWrite(4, 0);
  else if (req.indexOf("/D2/1") != -1)
    digitalWrite(4, 1);
  else if (req.indexOf("/D3/0") != -1)
    digitalWrite(0, 0);
  else if (req.indexOf("/D3/1") != -1)
    digitalWrite(0, 1);
  else if (req.indexOf("/D4/0") != -1)
    digitalWrite(2, 0);
  else if (req.indexOf("/D4/1") != -1)
      digitalWrite(2, 1);

  else if (req.indexOf("/test") != -1) {
    Serial.println("TEST OK");
    String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nTest OK. Uptime: ";

    // Подстчет UpTime
    int  Sec   = (millis() / 1000UL) % 60;
    int  Min   = ((millis() / 1000UL) / 60UL) % 60;
    int  Hours = ((millis() / 1000UL) / 3600UL) % 24;
    int  Day   = ((millis() / 1000UL) / 3600UL / 24UL);
    s += Day;
    s += "d ";
    s += Hours;
    s += ":";
    s += Min;
    s += ":";
    s += Sec;
    s += "</html>\n";
    client.print(s);
    client.stop();
    return;
  }
  else
    // Если неверный запрос написать об ошибке
  {
    Serial.println("invalid request");
    String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nInvalid request";
    s += "</html>\n";
    client.print(s);
    client.stop();
    return;
  }

  client.flush();

  // Формирование ответа
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO set OK";
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(10);
  Serial.println("Client disonnected");
 
    digitalWrite(LED_BUILTIN, HIGH); 
    delay(500);

}
Задача стоит в подключении к точке доступа на ESP8266 без использования маршрутизатора и управлении выходами контроллера при помощи мобильника. Не могу понять почему виснет.
 

Сергей_Ф

Moderator
Команда форума
@JIEXA вроде не виснит ничего. Другое дело, что Вы хотите получить и что Вы написали делать в программе. Наверное Ваши ожидания не совпадают с Вашими командами. На чём запускаете, кстати? Уверены что память на 80 Мгц работает стабильно?
 
Последнее редактирование:

JIEXA

New member
@JIEXA вроде не виснит ничего. Другое дело, что Вы хотите получить и что Вы написали делать в программе. Наверное Ваши ожидания не совпадают с Вашими командами. На чём запускаете, кстати? Уверены что память на 80 Мгц работает стабильно?
Код:
  // Ожидание данных
  Serial.println("new client");
  while (!client.available()) {
    delay(10);
  }
Убрал этот цикл и перестало виснуть.
В порт льется эта инфа:
Код:
new client
GET /D4/1 HTTP/1.1
Client disonnected
new client

invalid request
С этим циклом виснет в этот момент:
Код:
new client
GET /D4/1 HTTP/1.1
Client disonnected
new client
При отправке команды происходит исполнение, отключение клиента и вновь его подключение. После этого все виснет.
Я недавно начал ковырять плату поэтому не все понятно. Ковыряю Wemos D1.
 
Сверху Снизу