noam76 | Bonjour a tous,
J'utilise une ESP8266 Nodemcu, mon code avec l'arduino ide 1.8.5
Je connais quelques code C qui m'a bien aidé pour l'arduino, comme je ne suis pas programmeur j'ai des difficulté de comprendre certaine explication.
Après plusieurs jours de recherche sur le Net et d'avoir essayé plusieurs codes que j'ai trouvé en ligne cela ne marche pas, ,c'est pour ça que je viens a votre aide
je cherche a comprendre comment faire et bien sur d'arriver a le faire
Mes fichiers HTML, CSS sont stocké sur le SPIFFS, (après plusieurs jours de recherche j'ai réussi ), j'arrive bien a afficher ma page web en accédant a l'ip du ESP reçu par mon routeur.
J'utilise la librairie ESP8266WebServer.h.
Je cherche a envoyer 4 données de type INT vers ma page WEB.
J'ai regarder plusieurs exemple ils n'utilisent pas le même libraire que moi, d’après ce que j'ai compris il faut utiliser du XML coté ESP8266 et du cote HTML envoyer un HTTP vers l'esp pour qu'il envoie les données, ça c'est la théorie, en pratique alors comment faire
mon code est le suivant
Code :
- #include <ESP8266WiFi.h>
- #include <WiFiClient.h>
- #include <ESP8266WebServer.h>
- #include <ESP8266mDNS.h>
- #include <FS.h>
- const char *host = "serverweb1";
- const char* ssid = "Mon SSID";
- const char* password = "MON PASS";
- const String DISPLAY_DATA_HTML = "/html/display_data.html";
- const char *configUsername = "admin";
- const char *configPwd = "admin";
- ESP8266WebServer server(80);
- int data1;
- String XML; // pour envoyer le code XML a ma page web
- void handleRoot() {
- server.send(200, "text/plain", "Welcome to my Irrigation System!" );
- }
- void DisplayData()
- {
- String form = "";
- File f = SPIFFS.open(DISPLAY_DATA_HTML, "r" );
- if (!f)
- {Serial.println("Can't open update html file" );
- server.send(404, "text/html", "File not found" );
- }
- else
- {char buf[1024];
- int siz = f.size();
- while(siz > 0)
- {size_t len = std::min((int)(sizeof(buf) - 1), siz);
- f.read((uint8_t *)buf, len);
- buf[len] = 0;
- form += buf;
- siz -= sizeof(buf) - 1;
- }
- f.close();
- server.send(200, "text/html", form);
- }
- }
- // code XML que j'essaye, je ne sais pas si c'est correct
- void handleXML()
- {XML="<?xml version='1.0'?>";
- XML+="<response>";
- XML+="data1";
- XML+="</response>";
- server.send(200,"text/xml",XML);
- }
- void setup(void)
- {Serial.begin(115200);
- Serial.println("..." );
- Serial.println("Mounting FS..." );
- if (!SPIFFS.begin())
- {Serial.println("Failed to mount file system" );
- return;
- }
- WiFi.begin(ssid, password);
- Serial.println("" );
- // Wait for connection
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print("." );
- }
- Serial.println("" );
- Serial.print("Connected to " );
- Serial.println(ssid);
- Serial.print("IP address: " );
- Serial.println(WiFi.localIP());
- if (MDNS.begin("esp8266" ))
- {Serial.println("MDNS responder started" );
- }
- server.on("/", handleRoot);
- server.on("/display_data", [&](){
- if(!server.authenticate(configUsername, configPwd))
- {return server.requestAuthentication();
- }else
- {DisplayData(); // display the page
- }
- });
- server.on("/reqEtatVariables",handleXML);
- server.serveStatic("/css", SPIFFS, "/html/css" );
- server.serveStatic("/display_data.html", SPIFFS, "/html/display_data.html" );
- server.begin();
- Serial.println("HTTP server started" );
- if (!MDNS.begin(host))
- {Serial.println("Error setting up MDNS responder!" );
- while(1)
- {delay(1000);
- }
- }
- Serial.println("mDNS responder started" );
- // Add service to MDNS-SD
- MDNS.addService("http", "tcp", 80);
- }
- void loop(void)
- {server.handleClient();
- data1 = variable INT qui change;
- }
|
mon code HTML
Code :
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <script>
- function obtenirVariables()
- {
- var uniqueURL = "reqEtatVariables" + "&aleatoire=" + Math.trunc(Math.random() * 1000000);
- var request = new XMLHttpRequest(); // http://www.toutjavascript.com/refe [...] equest.php
- // la fonction à appeler lors d'un changement d'avancement de la requête AJAX
- request.onreadystatechange = function()
- {
- if (request.readyState == 4)
- {
- // Indicateur de l'avancement de l'appel AJAX == 4 => Données complètement accessibles
- if (request.status == 200)
- {
- // Code retour du serveur après l'appel AJAX == 200 => OK, tout s'est bien passé
- xmlResponse=request.responseXML;
- xmldoc = xmlResponse.getElementsByTagName('response');
- message = xmldoc[0].firstChild.nodeValue;
- document.getElementById('runtime').innerHTML=message;
- }
- }
- }
- request.open("GET", uniqueURL , true); // ici on envoie la requête GET sur l'URL /reqEtatVariables
- request.send(null);
- setTimeout("obtenirVariables()", 1000); // on rappelle obtenirVariables() dans 1s
- }
- </script>
- <link href="css/style.css" rel="stylesheet">
- </head>
- <body onload="obtenirVariables()">
- <div id="header">
- <div id="header-top">
- <h2>Recuperation du Data depuis le ESP</h2>
- </div> <!-- close div header-top -->
- <div id="header-bottom">
- <nav id="menu">
- CODE DE MON MENU
- </nav>
- </div> <!-- close div header-bottom -->
- </div> <!-- close div header -->
- </header>
- <p id="runtime"></p> cela devrais afficher le data dans ma page, ça le fais pas
- </body>
- </html>
|
Dans mes codes il y a un envoie d'une variable INT, si ça marchera avec une, ça marchera aussi avec 4
Merci pour tous ceux qui m'aide, me guide, m'explique, bien sur je cherche a comprendre comment faire et bien sur d'arriver a le faire Message édité par noam76 le 23-12-2017 à 20:19:57
|