РЕШЕНО Esp8266 не понятная ошибка

Тема в разделе "ESP8266, ESP32", создана пользователем Vovka, 28 авг 2020.

  1. Vovka

    Vovka Гик

    Вот сам скетч:
    Код (C++):

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

    IPAddress apIP(192, 168, 1, 222);
    String _ssidAP  = "WiFi_TEST";
    String _passwordAP = "";
    ESP8266WebServer HTTP(80);

    #include "HTTP_init.h"

    void setup()
    {
      Serial.begin(115200);
       Serial.println("");
      Serial.println("WiFi connect...");

      WiFi.mode(WIFI_AP);
      WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
      WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str());
     
      HTTP_init();
      Serial.println("WiFi connected!");
    }

    void loop()
    {
      HTTP.handleClient();
      delay(1);
    }
     
    Код (C++):
    void handleRoot();
    void handleOut();

    void handleNotFound(){
      String message = "File Not Found\n\n";
      message += "URI: ";
      message += HTTP.uri();
      message += "\nMethod: ";
      message += (HTTP.method() == HTTP_GET)?"GET":"POST";
      message += "\nArguments: ";
      message += HTTP.args(); // кол-во аргументов после '?'
      message += "\n";
      for (uint8_t i=0; i<HTTP.args(); i++){
        message += " " + HTTP.argName(i) + ": " + HTTP.arg(i) + "\n";
      }
      HTTP.send(404, "text/plain", message);
    }

    void HTTP_init(void) {
      HTTP.onNotFound(handleNotFound);
      HTTP.on("/", handleRoot);
      HTTP.on("/out", handleOut);
      HTTP.begin();
    }

    const char _htm_1[] PROGMEM = R"rawliteral(
    <!DOCTYPE HTML><html><head>
    <meta http-equiv="
    Content-Type" content="text/html; charset=utf-8">
    <title></title>
    <script language="
    javascript">
    function outs(){
        var xhttp=new XMLHttpRequest();
        xhttp.open("
    GET","/out?t=Test 123",true);xhttp.send();
    }
    </script>
    </head>
    <body>
    <br><br><br>
    <center><input type="
    submit" onClick="outs();" value="&nbsp;SEND&nbsp;&nbsp;&nbsp;'Test 123'&nbsp;"></center>
    </body></html>
    )rawliteral"
    ;

    void handleRoot()
    {
        String s;
        Serial.println( "Get start HTML" );
        s=FPSTR(_htm_1);
        HTTP.send(200, "text/html", s );
    }

    void handleOut()
    {
        String t = HTTP.arg("t");
        Serial.println( "handleOut(): " );
        Serial.println( t );
    }

    Перед заливкой прошивки, есп обнуляю нулевой прошивкой.
    Нажимаю кнопку сброса и один раз нажимаю кнопку на страничке в браузере.
    Всегда получаю вот такое:
    WiFi connect...
    WiFi connected!
    handleOut():
    Test 123
    handleOut():
    Test 123
    handleOut():
    Test 123
    handleOut():
    Test 123
    handleOut():
    Test 123
    handleOut():
    Test 123
    handleOut():
    Test 123
    handleOut():
    Test 123
    handleOut():
    Test 123
    Не пойму, почему одно нажатие на кнопку на страничке вызывает 9 вызовов функции handleOut()?
    Arduino IDE v1.8.13
     
  2. Vovka

    Vovka Гик

    Проверил на Visual Studio 2012 + vMicro - та же история :(
     
  3. ИгорьК

    ИгорьК Гуру

    У вас там связка: html код input вызывает JavaScript браузерный. В связке и кроется проблема. Ардуино среда здесь не при чем.
    Надо открывать книги по этим явлениям и пытаться понять как они работаютают.
     
    Vovka нравится это.
  4. Vovka

    Vovka Гик

    Точно! Меня с толку сбил отладчик в браузере - показывал только один запрос!