ESP8266 - Arduino IDE - прошу совета с локальной Web-страницей для сохранения разных настроек.

Тема в разделе "ESP8266, ESP32", создана пользователем Gomez, 21 сен 2018.

  1. Gomez

    Gomez Гик

    С пятницей!
    В общем, захотел прикрутить какую-то веб-морду для сохранения и изменения некоторых значений.
    Нашел пример индийского погромиста и немного изменил его. (не нашел другого понятного скрипта, который не лезет в сеть (куча примеров, но всем же нужно заходить в веб-морду через интернет... :mad:), а молча создает точку доступа и страницу, на которой можно что-то делать)
    И вот как бы работает, но если усложнять, виснет. (Данный скрипт работает)
    И при отправке по submit почему-то на секунду в броузере мелькает "страница недоступна".

    Подобный скетч (о, вспомнил слово) имеет право на существование, или индийский подход неверен в корне? :)

    Код (C++):

    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>
    #include <ESP8266WebServer.h>

    const char *ssid = "WeatherBox";

    ESP8266WebServer server(80);

    const String HTTP_HEAD           = "<!DOCTYPE html><html lang=\"en\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/><title>Test</title>";
    const String HTTP_STYLE  = "<style>.c{text-align: center;} div,input{padding:5px;font-size:1em;}  input{width:90%;}  body{text-align: center;font-family:verdana;} button{border:0;border-radius:0.6rem;background-color:#1fb3ec;color:#fdd;line-height:2.4rem;font-size:1.2rem;width:100%;} .q{float: right;width: 64px;text-align: right;} .button2 {background-color: #008CBA;} .button3 {background-color: #f44336;} .button4 {background-color: #e7e7e7; color: black;} .button5 {background-color: #555555;} .button6 {background-color: #4CAF50;} </style>";
    //const String HTTP_SCRIPT        = "<script>function c(l){document.getElementById('s').value=l.innerText||l.textContent;document.getElementById('p').focus();}</script>";
    const String HTTP_HEAD_END      = "</head><body><div style='text-align:left;display:inline-block;min-width:260px;'>";

    const String HOMEPAGE = "<form method=\"get\"><input type=\"text\" name=\"test\"/><br /><input type=\"submit\" /></form><br />    ";


    /* Just a little test message.  Go to http://192.168.4.1 in a web browser
    * connected to this access point to see it.
    */

    void handleRoot() {
    String s =HTTP_HEAD;
           s += HTTP_STYLE;
          //s += HTTP_SCRIPT;
          s += HTTP_HEAD_END;
          s += "<H3>Settings</H3>";
          s+=HOMEPAGE;
      if (server.arg("test")== "2"){
        s += "<H4>Two</H4>";
      } else {
        s += "<H4>Not two</H4>";
      }
          server.send(200, "text/html", s);
    }

    void setup() {
      delay(1000);
      Serial.begin(115200);
      Serial.println();
      Serial.print("Configuring access point...");
      //WiFi.softAP(ssid, password);
      WiFi.softAP(ssid);

      IPAddress myIP = WiFi.softAPIP();
      Serial.print("AP IP address: ");
      Serial.println(myIP);
      server.on("/", handleRoot);
     
      server.begin();
      Serial.println("HTTP server started");
    }

    void loop() {
      server.handleClient();
    }
     
  2. Vovka

    Vovka Нерд

    в основном цикле не слишком ли часто долбит?
     
  3. Gomez

    Gomez Гик

    В смысле, server.handleClient();?
    Ну во всех к примерах к библиотеке это его обычное применение.
    Для какого-то особого колдунства иногда ставят delay(1);
    Но это не сильно помогает. :)
     
  4. Vovka

    Vovka Нерд

    Так в примерах никогда не заморачиваются на эту тему: на то он и пример, чтобы показать чего и как...
    delay(1); - это тоже для примеров, правильно делать таймер-счетчик с флагом и по нему опрашивать, чтобы цикл не тормозить!
     
  5. Gomez

    Gomez Гик

    Не могли бы указать на какой нибудь пример? Ничего подобного не нашел.