Using the new Arduino IDE for ESP8266 and found bugs, report them here

Moderator: igrr

User avatar
By Reinosoft
#70285 Hi,

Yesterday i upgraded the ESP8266 version from 2.3.0 to 2.4.0-rc1, after that, i encountered some problems when opening larger HTML files (3939 bytes) on my phone.

I've tested it on different phones, some encounter no problems, others do.
I installed 3 browsers > Chrome , Firefox, Opera on my phone no one worked. i experienced with it almost all night :roll:
i also tried to first send a header and after that the content, but also this didn't work.
when sending some short data e.g. TEST to the browser, this does appear; but the large text doesn't.
First i thought it was a HTML problem, so i sended it as TEXT/PLAIN; this also didn't work,.

all the browsers on different phones were sometimes waiting for data; and did'nt respond on the server.client().stop() command.
other times, they did'nt receive any data and closes the connection.
(of all the times i tested, they never displayed the page).

(the OTA part did work correctly, it seems a problem in the server.send command.)
(I am sure that the page's didn't load out of the cache)
I tried it on 2 Wemos D1 boards (1 old model and 1 new rev) with the same result.

after reinstalling v2.3.0 the pages were loaded correctly on every device/browser,(so i don't think the problem is phone related)

i searched but couldn't find any post from someone with similar problems.
can someone help me to figure out the problem??

Regards,

Reinald

(this was the code i was testing on)
Code: Select all#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>

const char* ssid = "Gajenixan";
const char* password = "the mirror has also a backside";

ESP8266WebServer server(80);

const char* www_username = "admin";
const char* www_password = "1234";

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  if(WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("WiFi Connect Failed! Rebooting...");
    delay(1000);
    ESP.restart();
  }
  ArduinoOTA.begin();

  server.on("/", [](){
    if(!server.authenticate(www_username, www_password))
      return server.requestAuthentication();
  si();
  //  server.send(200, "text/plain", "Login OK");
  });
  server.begin();

  Serial.print("Open http://");
  Serial.print(WiFi.localIP());
  Serial.println("/ in your browser to see it working");
}
void si() {
  String d = "<HTML><HEAD><TITLE>testproj</TITLE></HEAD><BODY><script>document.body.style.zoom='250%'; function fn_submit(txtValue){MyTextBox = document.getElementById('txt_FORM');MyTextBox.value = txtValue;document.form1.submit();}</script><TABLE BORDER = 0><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=1&O=-35'>Spotjes Schuur</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=1&O=-37'>WCD Wasmachine</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=1&O=-39'>Buitenlamp</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=1&O=-43'>TL Schuur</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=1&O=-23'>Lamp Logeerkamer</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=1&O=-25'>Lamp WC</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=1&O=-27'>TL Werkplaats</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=1&O=-29'>WCD Werkplaats</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=1&O=-31'>WCD PC Overloop</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-23'>Televisie</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-25'>Lamp Zitkamer</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-27'>WCD Raam Voor</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-29'>WCD Schoorsteen</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-31'>Lamp Slaapkamer</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-33'>WCD Radio</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-35'>Lamp Overloop</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-37'>Spotjes Hal</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-39'>Lamp Douche</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-47'>Tuin Achter Boven</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-49'>Tuin Achter Onder</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=2&O=-51'>Tuin Voorzijde</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=3&O=-23'>Sta Lamp Kamer</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=3&O=-25'>Lamp Eettafel</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=3&O=-27'>Lamp Keuken</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=3&O=-29'>Afzuigkap</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=3&O=-37'>Magnetron</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=3&O=-39'>WCD Keuken L+R</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=3&O=-41'>WCD Keuken M</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=3&O=-43'>WCD Overloop</A></TD></TR><TR><TD><IMG SRC='/IMG/io_uit.png'></TD><TD><A HREF='/192234.asp?W=-1&R=3&O=-45'>Vaatwasser</A></TD></TR><TR><TD><IMG SRC='/IMG/door.png'></TD><TD><A HREF='/192234.asp?W=0&R=0&O=30'>Achterdeur</A></TD></TR></TABLE></BODY></HTML>";
    server.send(200, "text/plain", d);
}
void loop() {
  ArduinoOTA.handle();
  server.handleClient();
}
User avatar
By brunofr
#70898 Hi,
I am seeing the very same problem with page not loading when using code versions 2.4.0-rc1 or rc2. There is no problem with version 2.3.0.
The problem exists when the page is accessed by mobile device but everything is fine when the page is accessed by a navigator on a PC.
Interesting enough my page has a call to load a XML file and there the loading of the XML file runs just fine.

I am not sure how this can be debugged and any suggestion would be very welcome.

Below the code I used for the test:
Code: Select all#define SERIAL_SPEED 74880
/*
 *  2.3.0
Sketch uses 258245 bytes (24%) of program storage space. Maximum is 1044464 bytes.
Global variables use 44336 bytes (54%) of dynamic memory, leaving 37584 bytes for local variables. Maximum is 81920 bytes.
ESP ChipId: 19485F
ESP CpuFreqMHz: 80
ESP FreeHeap:34.77KB
ESP SketchSize:256.27KB
ESP FreeSketchSpace:764.00KB
ESP SdkVersion: 1.5.3(aec24ac9)

 * 2.4.0-RC2
Sketch uses 295507 bytes (28%) of program storage space. Maximum is 1044464 bytes.
Global variables use 45860 bytes (55%) of dynamic memory, leaving 36060 bytes for local variables. Maximum is 81920 bytes.
ESP configuration data:
ESP ChipId: 19485F
ESP CpuFreqMHz: 80
ESP FreeHeap:32.34KB
ESP SketchSize:292.64KB
ESP FreeSketchSpace:728.00KB
ESP SdkVersion: 2.1.0(7106d38)
*/


#define LED LED_BUILTIN
#define LED_ON LOW
#define LED_OFF HIGH


/*===================================================================================
  GENERIC INCLUDES
  ===================================================================================*/
extern "C" {
#include<user_interface.h>
}
#include "Arduino.h"

/*===================================================================================
  INCLUDES POUR LES FONCTIONS WIFI
===================================================================================*/
#include <ESP8266WiFi.h>

/*===================================================================================
 INCLUDES POUR LE SERVEUR WEB
===================================================================================*/
#include <ESP8266WebServer.h>

// Definitons SSID et PWD en mode softAP
char          *softAP_SSID = "ESP-softAP";;
char          *softAP_Password = "0123456789";

IPAddress       softAP_IP(1,1,1,1);
IPAddress       softAP_gw(1,1,1,1);
IPAddress       softAP_subnet(255,255,255,0);

/*===================================================================================
  DEFINITIONS & INCLUDES POUR LE SERVEUR WEB (MODULE EN MODE SOFTAP)
  ===================================================================================*/
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

ESP8266WebServer    Web_Server(80);
String             Web_Page_Content;
int             Web_Status_Code;


void Blink_LED(byte Flash_Count, int Duration_On, int Duration_Off);

/************************************************************************************************************************
******                      ********************************************************************************************* 
****** BEGIN ESP8266 SETUP  *********************************************************************************************
******                      *********************************************************************************************
*************************************************************************************************************************/
void setup()
{
   Serial.begin(SERIAL_SPEED);
   Serial.println();

  Print_ESP_Configuration();
   
   pinMode(LED, OUTPUT);
   digitalWrite(LED, HIGH);
   
//**************************************************************
// BEGIN WIFI MODULE SETUP
//
   Init_WiFi();
   printWifiStatus();
//
// END WIFI MODULE SETUP
//**************************************************************
}
/************************************************************************************************************************
****** END OF ESP8266 SETUP  ********************************************************************************************
*************************************************************************************************************************/


/************************************************************************************************************************
******                ***************************************************************************************************   
******  ESP8266 LOOP  ***************************************************************************************************   
******                ***************************************************************************************************   
*************************************************************************************************************************/

void loop() {
      Web_Server.handleClient();

}

/************************************************************************************************************************
******                 ************************************************************************************************** 
******  SECTION WIFI   **************************************************************************************************
******                 ************************************************************************************************** 
*************************************************************************************************************************/


//**********************************************************************************************
//
//   Init WiFi en mode STATION ou AP
//
//**********************************************************************************************
void Init_WiFi()
{

//   Serial.setDebugOutput(WiFi_DebugOutput); 
    Serial.setDebugOutput(true); 

   
   WiFi.persistent(false);
   WiFi.mode(WIFI_OFF);   // this is a temporary line, to be removed after SDK update to 1.5.4
   
   WiFi.softAPdisconnect(true);   
   WiFi.disconnect(1);
   delay(500);      
      

   //*******************************************************
   // Init en mode softAP si pas de connexion en mode AP
   //
   Serial.printf("Trying to start ESP in softAP mode for SSID %s / PWD: %s\n", softAP_SSID, softAP_Password);

   WiFi.mode(WIFI_AP);
   delay(50);
   WiFi.softAPConfig(softAP_IP, softAP_gw, softAP_subnet);
   delay(50);
   WiFi.softAP(softAP_SSID,softAP_Password);
   delay(50);
   Serial.println("");

   Serial.print("Local IP: ");
   Serial.println(WiFi.localIP());
   Serial.print("SoftAP IP: ");
   Serial.println(WiFi.softAPIP());
   //******************************************
   // 2 flashs : démarrage en mode SOFTAP
   Blink_LED(2,10,500);
   Serial.printf("ESP started in softAP mode for SSID %s\n", softAP_SSID);
   delay(1000);

   //*******************************************************
   // Start the server
   //
   Serial.println("Starting Web server");
   Web_Server.on ( "/", Web_Handle_Root);
   Web_Server.on("/XML_Vario",Web_Handle_XML_Vario);
   Web_Server.begin(); 
   // web services

   Serial.printf("Now running Web server at IP %s\n", WiFi.softAPIP().toString().c_str());

   Serial.println("WiFi init complete");

   // Disable power saving
   wifi_set_sleep_type(NONE_SLEEP_T);   
}

void Web_Handle_Root()
{
   Web_Server.send ( 200, "text/html", Web_Page_Root());   
}

//**********************************************************************************************
//
//   Préparation de la page Web racine
//
//**********************************************************************************************
String Web_Page_Root()
{
   Web_Page_Content = "<!DOCTYPE html>\n<html lang=fr-FR>\n";
   Web_Page_Content += "<head>\n";
   Web_Page_Content += "<title>ESP module</title>\n";   
   Web_Page_Content += "<meta name='viewport' content='width=device-width, initial-scale=1.0, shrink-to-fit=no'>\n";

   Web_Page_Content += Web_Style();
   Web_Page_Content += Javascript_Ajax();
   Web_Page_Content += "</head>\n";
   Web_Page_Content += "<body onload='process()'>\n";
   
   Web_Page_Content += "<p><div id='test'></div><br>";

   Web_Page_Content += "<table  width='100%' border='1'>\n<tr class='bold'><td>Module : <div id='module_name'></div></td>\n<td align='right'><div id='runtime'></div></td></tr>\n";
   Web_Page_Content += "<tr><td id='vario_color' colspan='2'><br><br><br><br></td></tr></table>\n";

   // Table principale altitude/vario
   Web_Page_Content += "<center>\n";
   Web_Page_Content += "<table width='100%' border='0'>\n";
   Web_Page_Content += "<tr><td><hr></td><td><hr></td></tr>\n";
   Web_Page_Content += "<tr class='bold' align='center'><td width='60%'>Altitude (m)</td><td>Vario (m/s)</td></tr>\n";
   Web_Page_Content += "<tr><td><hr></td><td><hr></td></tr>\n";
   Web_Page_Content += "<tr class='bold'><td class='Huge_Text' align='right'><div id='altitude'></div></td>";
   Web_Page_Content += "<td class='Big_Text' valign='top' align='right'><div id='vario'></div></td></tr>\n";

   Web_Page_Content += "<tr>\n";
   // Table altitude min/max
   Web_Page_Content += "<td>\n<table align='left' border='1'>\n";
   Web_Page_Content += "<tr class='bold'><td  width='24%'>Min&nbsp;&nbsp;&nbsp;&nbsp;</td><td><div id='altitude_min'></div></td></tr>";
   Web_Page_Content += "<tr class='bold'><td>Max&nbsp;&nbsp;&nbsp;&nbsp;</td><td><div id='altitude_max'></div></td></tr>\n";
   Web_Page_Content += "</table>\n</td>\n";
   // Table vario min/max
   Web_Page_Content += "<td>\n<table align='left' width='100%' border='1'>\n";
    Web_Page_Content += "<tr class='bold'><td width='24%'>Min&nbsp;&nbsp;</td><td width='*'><div id='vario_min'></div></td></tr>";
    Web_Page_Content += "<tr class='bold'><td>Max&nbsp;&nbsp;</td><td width='*'><div id='vario_max'></div></td></tr>";
   Web_Page_Content += "</table></td>\n</tr>\n";

   Web_Page_Content += "<tr><td><hr></td><td><hr></td></tr>\n";
   Web_Page_Content += "<tr class='bold' align='center'>\n";
   Web_Page_Content +=   "<td>Temperature</td><td>P (mBar)</td></tr>\n";
   Web_Page_Content += "<tr><td><hr></td><td><hr></td></tr>\n";
   Web_Page_Content += "<tr class='bold' align='center'>\n";
   Web_Page_Content += "<td>\n";
   Web_Page_Content += "<table>\n";
   Web_Page_Content +=   "<tr class='bold'>\n";
   Web_Page_Content +=  "<td align='left'>Min&nbsp;&nbsp;&nbsp;&nbsp;</td><td align='center'>&deg;C</td><td align='right'>&nbsp;&nbsp;&nbsp;&nbsp;Max</td>\n</tr>\n";
   Web_Page_Content += "<tr class='bold' >\n";
   Web_Page_Content +=  "<td align='left'><div id='temperature_min'></div></td><td align='center'><div id='temperature'></div></td><td align='right'><div id='temperature_max'></div></td>\n</tr>\n</table>\n";
   Web_Page_Content += "</td>\n";
   Web_Page_Content += "<td valign='top'><div id='pressure'></div></td>\n";
   Web_Page_Content += "</tr>\n";
   Web_Page_Content += "<tr><td><hr></td><td><hr></td></tr>\n";
   Web_Page_Content += "</table>\n</center>\n";

   // Bouton Beep On/Off
   Web_Page_Content += "<p><center><button id='beep' onclick='Toggle_Beep()'>Beep On</button></center>"; 

   Web_Page_Content += "</body></html>";

 //Serial.println(Web_Page_Content);

   return (Web_Page_Content);
}

//**********************************************************************************************
//
//   CSS des pages Web
//
//**********************************************************************************************
String Web_Style()
{
   String Str = "<style>\r\n \
  body {background-color:#000000; font-family:Arial,Helvetica,Sans-Serif; Color:white; min-width:480px}\n \
   img {max-width:100%}  \n \
   .tabs {padding: 10px 2em} \r\n \
   table { border-spacing: 0px; border-collapse: collapse; }\n \
   tr.bold {font-family: verdana; font-size: 20px; font-weight: bold;}\n \
   td.bold {font-family: verdana; font-size: 20px; font-weight: bold; }\n \
   .Small_Text {font-family: Courier; font-size:100%; font-weight: bold;}\n \
   .Big_Text {font-family: Courier; font-size:300%; font-weight: bold;}\n \
   .Huge_Text {font-family: Courier; font-size:500%; font-weight: bold;}\n \
   fieldset {font-family: Inconsolata; font-size:150%;font-weight: bold;}\n \
   #p01 {font-family: verdana; font-size:20px; font-weight: bold; color: blue;}\n \
   p { font-family: verdana; font-size: 20px;}\n \
</style>\n";
   return (Str);
}


//**********************************************************************************************
//
//   Javascript - Fonction AJAX
//
//**********************************************************************************************
String Javascript_Ajax()
{
   String JS = "<script type='text/javascript'>\n"; 
   JS += "var Beep_Frequency;\n";
   JS += "var Vario;\n";
   JS += "var Beep_Control = false;\n";
   JS += "var xhr=getxhrRequest();\n";
   JS += "var context = new (window.AudioContext || window.webkitAudioContext)();\n\n";

   //******************************************
   // Javascript - Générateur de son pour le beep du vario
   //
   JS += "function Beep_Sound(){\n";
   JS += "  const Tone_Base = 440;\n";
   JS += "  const Vario_Sensitivity = 0.2;\n";
   JS += "  var Beep_Duration = 0.2;\n";
   JS += "  var Oscillator = context.createOscillator(); // instantiate an oscillator\n\n";
   JS += "  if (Math.abs(Vario) <= Vario_Sensitivity)  {\n";
   JS += "    Beep_Frequency = Tone_Base;\n";
   JS += "  } else {\n";
   JS += "    Beep_Frequency = Tone_Base + Vario * 30;\n";
   JS += "    Beep_Frequency = Math.max(20, Math.min(Beep_Frequency, 2000));\n";
   JS += "   Beep_Duration = 0.1;\n";
   JS += "  }\n";
   JS += "  Oscillator.type = 'square'; // 'sine' is the default - also square, sawtooth, triangle\n";
   JS += "  Oscillator.frequency.value = Beep_Frequency;\n";
   JS += "  Oscillator.connect(context.destination); // connect it to the destination\n";
   JS += "  Oscillator.start(); // start the oscillator\n";
   JS += "  Oscillator.stop(context.currentTime + Beep_Duration); // stop after the current time + x\n";   
   JS += "}\n\n";   

   //******************************************
   // Javascript -  Marche/arrêt du beep du vario
   //
   JS += "function Toggle_Beep() {\n";
   JS += "    if (Beep_Control == false) {\n";
   JS += "      Beep_Control = true;\n";
   JS += "    document.getElementById('beep').innerHTML  = 'Beep Off';\n";
   JS += "  } else {\n";
   JS += "    Beep_Control = false;\n";
   JS += "    document.getElementById('beep').innerHTML  = 'Beep On';\n";
   JS += "  }\n";
   JS += "}\n\n";
        
   //******************************************
   // Javascript - Création de l'objet xhrRequest
   //
    JS += "function getxhrRequest() {\n";
    JS += "  var xhr = null;\n";
    JS += "  if (window.XMLHttpRequest || window.ActiveXObject) {\n";
    JS += "     if (window.ActiveXObject) {\n";
    JS += "        try { xhr = new ActiveXObject('Msxml2.XMLHTTP');\n";
    JS += "        } catch(e) {\n";
    JS += "        xhr = new ActiveXObject('Microsoft.XMLHTTP'); }\n";
    JS += "     } else {\n";
    JS += "         xhr = new XMLHttpRequest(); \n";
    JS += "     }\n";
    JS += "     } else {\n";
    JS += "        alert('Object XMLHttpRequest not supported.');\n";
    JS += "       return null;\n";
    JS += "   }\n";
    JS += "   return xhr;\n";
    JS += "}\n\n";
   
   //******************************************
   // Javascript - Init pour le ré-affichage des données vario 1 fois par seconde
   //
   JS += "function process(){\n";
   JS += "  if(xhr.readyState==0 || xhr.readyState==4){\n";
   JS += "    xhr.open('GET','XML_Vario',true);\n";
   JS += "    xhr.onreadystatechange=handleServerResponse;\n";
   JS += "    xhr.send(null);\n";
   JS += "  }\n";
   JS += "  setTimeout('process()',1000);\n";
   JS += "}\n\n";

   //******************************************
   // Javascript - lecture de la réponse (XML) et affichage des données vario
   //
   JS += "function handleServerResponse(){\n";
   JS += "  if(xhr.readyState==4 && xhr.status==200){\n";
   JS += "    xmlResponse=xhr.responseXML;\n";
   
   JS += "    xmldoc = xmlResponse.getElementsByTagName('response');\n";
   JS += "    message = xmldoc[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('runtime').innerHTML=message;\n";
   JS += "    message = xmlResponse.getElementsByTagName('module_name')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('module_name').innerHTML = message;\n";
 
   // Altitude
   JS += "    message = xmlResponse.getElementsByTagName('altitude')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('altitude').innerHTML = message;\n";
   JS += "    message = xmlResponse.getElementsByTagName('altitude_min')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('altitude_min').innerHTML  = message;\n";
   JS += "    message = xmlResponse.getElementsByTagName('altitude_max')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('altitude_max').innerHTML  = message;\n";
   // Vario
   JS += "    Vario = xmlResponse.getElementsByTagName('vario_value')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('vario').innerHTML = Vario;\n";
   JS += "    message = xmlResponse.getElementsByTagName('vario_min')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('vario_min').innerHTML  = message;\n";
   JS += "    message = xmlResponse.getElementsByTagName('vario_max')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('vario_max').innerHTML  = message;\n";
   JS += "    message = xmlResponse.getElementsByTagName('vario_color')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('vario_color').style.backgroundColor = message;\n";
   //JS += "    document.getElementById('tablevario').style.backgroundColor = message;\n";
 
   // Temperature
   JS += "    message = xmlResponse.getElementsByTagName('temperature')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('temperature').innerHTML  = message;\n";
   JS += "    message = xmlResponse.getElementsByTagName('temperature_min')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('temperature_min').innerHTML  = message;\n";
   JS += "    message = xmlResponse.getElementsByTagName('temperature_max')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('temperature_max').innerHTML  = message;\n";
   // Pression
   JS += "    message = xmlResponse.getElementsByTagName('pressure')[0].firstChild.nodeValue;\n";
   JS += "    document.getElementById('pressure').innerHTML  = message;\n";
   // Beep
   JS += "  if (Beep_Control) Beep_Sound();\n";
   JS += "  }\n";
   JS += "}\n";
   JS += "</script>\n";

   return(JS);
}

//**********************************************************************************************
//
//   Javascript - Création du fichier XML
//
//**********************************************************************************************
String XML_Vario;
void Build_XML_Vario()
{
   
   //******************************************
   // Construcion du fichier XML
   //   
   XML_Vario = "<?xml version='1.0' encoding='utf-8'?>\n";
   XML_Vario += "<xml>\n";
   XML_Vario += "<response>00:00:00</response>\n";

   //******************************************
   // Données module Vario
   XML_Vario += "<vario>\n";
   XML_Vario += "<module_name>Test</module_name>\n";
   XML_Vario += "<altitude>0</altitude>\n";
   XML_Vario += "<altitude_min>0</altitude_min>\n";
   XML_Vario += "<altitude_max>0</altitude_max>\n";
   XML_Vario += "<vario_value>0</vario_value>\n";
   XML_Vario += "<vario_min>0</vario_min>\n";
   XML_Vario += "<vario_max>0</vario_max>\n";
   XML_Vario += "<vario_color>#000000</vario_color>\n";
   XML_Vario += "<temperature>0</temperature>\n";
   XML_Vario += "<temperature_min>0</temperature_min>\n";
   XML_Vario += "<temperature_max>0</temperature_max>\n";
   XML_Vario += "<pressure>0</pressure>\n";
   XML_Vario += "</vario>\n";
 
   XML_Vario += "</xml>";
}

//**********************************************************************************************
//
//   Retourne les données vario en réponse à la requète AJAX
//
//**********************************************************************************************
void Web_Handle_XML_Vario()
{
  Build_XML_Vario();
  Web_Server.send(200,"text/xml",XML_Vario);
}






//**********************************************************************************************
//
//  Clignotement de la led
//
//**********************************************************************************************
void Blink_LED(byte Flash_Count = 1, int Duration_On = 10, int Duration_Off = 200)
{
   for (byte i = 0; i < Flash_Count; ++i)
   {
      digitalWrite(LED, LED_ON);
      delay(Duration_On);
      digitalWrite(LED, LED_OFF);
      delay(Duration_Off);
   }
}

//**********************************************************************************************
//
//  Formattage en B, KB ou MB d'unePrint ESP configuration data
//
//**********************************************************************************************
String Format_Bytes(size_t Bytes)
{
  if (Bytes < 1024) return String(Bytes)+"B";
  else if(Bytes < (1024 * 1024)) return String(Bytes/1024.0)+"KB";
  else if(Bytes < (1024 * 1024 * 1024)) return String(Bytes/1024.0/1024.0)+"MB";
  else return String(Bytes/1024.0/1024.0/1024.0)+"GB";
}


//**********************************************************************************************
//
//  Print ESP configuration data
//
//**********************************************************************************************
void Print_ESP_Configuration()
{
  Serial.println("ESP configuration data:");
  Serial.printf("ESP ChipId: %6X\n", ESP.getChipId());
  Serial.print("ESP CpuFreqMHz: ");   Serial.println(ESP.getCpuFreqMHz());
  Serial.print("ESP FreeHeap:");      Serial.println(Format_Bytes(ESP.getFreeHeap()));
  Serial.print("ESP SketchSize:");    Serial.println(Format_Bytes(ESP.getSketchSize()));
  Serial.print("ESP FreeSketchSpace:"); Serial.println(Format_Bytes(ESP.getFreeSketchSpace()));
  Serial.print("ESP SdkVersion: ");   Serial.println(ESP.getSdkVersion());
  Serial.print("ESP FlashChipSpeed: "); Serial.println(ESP.getFlashChipSpeed());
  Serial.print("ESP FlashChipMode: ");  Serial.println(ESP.getFlashChipMode());
  Serial.print("ESP FlashChipRealSize: ");Serial.println(Format_Bytes(ESP.getFlashChipRealSize()));
  Serial.print("ESP FlashChipSize: ");  Serial.println(Format_Bytes(ESP.getFlashChipSize()));
  }

//**********************************************************************************************
//
//  Print WiFi connection status
//
//**********************************************************************************************
void printWifiStatus()
{
  Serial.print("\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n");
  Serial.printf("     Status report for ESP chipID %6X\n", ESP.getChipId());
  Serial.println(">> WiFi status");
  /* WiFi.status() values
  WL_IDLE_STATUS = 0, WL_NO_SSID_AVAIL = 1, WL_SCAN_COMPLETED = 2, WL_CONNECTED = 3
  WL_CONNECT_FAILED = 4, WL_CONNECTION_LOST = 5, WL_DISCONNECTED = 6, WL_NO_SHIELD = 255  */
  Serial.printf(" Status: %d\n", WiFi.status());
  /* WiFi mode. 1: STA, 2: AP, 3: STA+AP */
  const char* WiFi_Modes[] = {"NULL", "STA", "AP", "STA+AP"}; 
  Serial.printf(" WiFi Mode: %s\n",WiFi_Modes[WiFi.getMode()]);
  Serial.printf(" SSID: %s\n",WiFi.SSID().c_str());
  Serial.printf(" RSSI: %idBm\n",WiFi.RSSI());

  Serial.println(">> IP addresses");
  Serial.printf(" softAP...%s\n",WiFi.softAPIP().toString().c_str());
  Serial.printf(" AP.......%s\n",WiFi.localIP().toString().c_str());
  Serial.printf(" Gateway..%s\n",WiFi.gatewayIP().toString().c_str()); 


  Serial.println(">> MAC addresses");
  Serial.printf(" STA......%s\n", WiFi.macAddress().c_str());
  Serial.printf(" AP.......%s\n", WiFi.softAPmacAddress().c_str());
  Serial.printf(" BSSID....%s\n", WiFi.BSSIDstr().c_str());

  Serial.print(">> WiFi.printDiag report\n");
  WiFi.printDiag(Serial);
  Serial.print("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n");
  Serial.println();

}


Thanks
Bruno
User avatar
By brunofr
#71050 Hi
Made little progress on this issue.. l see web pages can be loaded when the size of the pages is less or equal to 1460 bytes (HTTP_DOWNLOAD_UNIT_SIZE). There are changes in ESP8622WebServer.cpp dealing with chunked contents but I cannot see this happening.
Could this be the effect of different headers sent to the client with 2.3.0 or 2.4.0 ?
Thanks
Bruno