Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1715 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  WebServer sur ESP32 ("arduino")

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

WebServer sur ESP32 ("arduino")

n°2359964
Lt Ripley
Mais ?!!
Posté le 15-08-2020 à 00:57:03  profilanswer
 

Bonjour !
 
Pour mon petit bricolage qui fonctionne bien (pêne motorisé("serrure" )), avec badge RFID etc, je veux maintenant pouvoir tenir un journal de ce qu'il se passe (ouverture à telle heure etc) sur une page Web sur l'ESP
 
Je me connecte en wifi sur ma box.
 
Maintenant j'ai un soucis avec WebServer.  Quand je fais server->on("/", handleRoot) ligne 64 j'ai cette erreur (sur on) :   aucune instance de fonction surchargée "WebServer::on" ne correspond à la liste d'arguments -- les types d'arguments sont : (const char [2], void ()) -- le type d'objet est : WebServer
 
Et cette erreur sur handleRoot :  invalid use of non-static member function
 
Et même erreur sur handleNotFound (ligne 65)
 
Sur le github je vois ça
void on(const Uri &uri, THandlerFunction handler);
  void on(const Uri &uri, HTTPMethod method, THandlerFunction fn);
  void on(const Uri &uri, HTTPMethod method, THandlerFunction fn, THandlerFunction ufn);

 
Voici mon code
 
Mon .cpp

Code :
  1. #include <WebServer1.h>  // mon mien (mon objet, ma classe)
  2. #include <WiFi.h>
  3. #include <WebServer.h>  // lib "officielle"
  4. //using namespace std;
  5. WebServer1::WebServer1() {  //constructeur
  6. ssid="monReseau";
  7. password="password";
  8. passString=String(password);    // debug sortie serie
  9. ssidString=String(ssid);        //
  10. server = new WebServer(80);
  11. }
  12. void WebServer1::handleRoot() {
  13. String page = "<!DOCTYPE html>";
  14. page += "<html lang='fr'>";
  15.     page += "<head>";
  16.         page += "<title>Serveur ESP32</title>";
  17.         page += "<meta http-equiv='refresh' content='60' name='viewport' content='width=device-width, initial-scale=1' charset='UTF-8' />";
  18.     page += "</head>";
  19.     page += "<body>";
  20.         page += "<h1>Serveur</h1>";
  21.         page += "<p>Ce serveur est heberge sur un ESP32</p>";
  22.         page += "<i>Cree par Harvey</i>";
  23.     page += "</body>";
  24.     page += "</html>";
  25.     server->send(200, "text/html", page);
  26. }
  27. void WebServer1::handleNotFound() {
  28.     server->send(404, "text/plain", "404: Not found!" );
  29. }
  30. void WebServer1::init() {
  31.     WiFi.begin(ssid, password);
  32.     Serial.print("Tentative de connexion..."+ ssidString); // + *ssid);
  33.     while(WiFi.status() != WL_CONNECTED)
  34.     {
  35.         Serial.print("." );
  36.         delay(100);
  37.     }
  38.     Serial.println("\n" );
  39.     Serial.println("Connexion etablie!" );
  40.     Serial.println("Adresse IP: " );
  41.     Serial.println(WiFi.localIP());
  42.     server->on("/", handleRoot);
  43.     server->onNotFound(handleNotFound);
  44.     server->begin();
  45.     Serial.println("Serveur Web actif" );
  46.     while(true) {
  47.         server->handleClient();
  48.     }
  49. }


 
 
Mon .h

Code :
  1. #ifndef WEBSERVER1
  2. #define WEBSERVER1
  3. #include <WiFi.h>
  4. #include <WebServer.h>
  5. class WebServer1
  6. {
  7.     public:
  8.     WebServer1();  // constructeur
  9.     void init();
  10.     void handleRoot();
  11.     void handleNotFound();
  12.     WebServer *server;
  13.     private:
  14.     const char* ssid; // = "FonfanoBoxTP-L-5";
  15.     const char* password; // = "00009217tigresse00009217";
  16.     String ssidString;
  17.     String passString;
  18. };
  19. #endif


 
Qu'en pensez vous ?
 
Merci d'avance pour votre aide !


Message édité par Lt Ripley le 15-08-2020 à 01:01:21

---------------
Mon app android  |  Viens coder  |  Mon topal de vente
mood
Publicité
Posté le 15-08-2020 à 00:57:03  profilanswer
 

n°2359966
gilou
Modérateur
Modzilla
Posté le 15-08-2020 à 02:59:49  profilanswer
 

Si j'ai bien pigé ce que j'ai lu sur le web, il faut passer par un lambda :
server->on("/", handleRoot); a remplacer par server->on("/", [this](){ handleRoot(); });
cf https://stackoverflow.com/questions [...] ction-type
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --
n°2359967
Lt Ripley
Mais ?!!
Posté le 15-08-2020 à 07:20:53  profilanswer
 

C'est bien ça, j'ai plus d'erreur du tout.
 
J'accède à ma page hébergée sur mon ESP32 !
 
Je vais me renseigner un peu sur les lambda que je ne connais pas
 
Merci beaucoup !


---------------
Mon app android  |  Viens coder  |  Mon topal de vente
n°2360004
Lt Ripley
Mais ?!!
Posté le 16-08-2020 à 13:41:33  profilanswer
 

Nouveau truc qui m'arrive
 
Quand je crée un objet WebServer1 (monServer) je lui passe mon objet ServosDriver (SD) fraîchement créé en paramètre (pour pouvoir modifier un booleen et utiliser des methodes).  Ensuite je fais "ServosDriverLocal = ServosDriver" (SD2 = SD) dans mon constructeur pour pouvoir l'utiliser
 
Mais quand je modifie mon booleen dans SD2 celui d'origine n'est pas modifié, et vice versa, ils sont indépendants.
 
J'essaye avec une reference (& ) mais j'y arrive pas non plus
 
Si vous pouvez m'aider c'est cool
 
Voici mon code : (WebServer1 c'est une classe a moi, WebServer c'est une librairie)
 
 
main.cpp
 

Code :
  1. ServosDriver servosDrive;
  2. WebServer1 monServer(servosDrive);


 
WebServer1.h
 

Code :
  1. class WebServer1
  2. {
  3.     public:
  4.     WebServer1();                   // constructeur
  5.     WebServer1(ServosDriver SD);    // constructeur
  6.     //WebServer1(ServosDriver& SDRef);// constructeur
  7.    
  8.     ServosDriver SD2;


 
Et WebServer1.cpp
 

Code :
  1. WebServer1::WebServer1(ServosDriver SD) {  //constructeur
  2. SD2 = SD;
  3. }


---------------
Mon app android  |  Viens coder  |  Mon topal de vente
n°2360010
Lt Ripley
Mais ?!!
Posté le 16-08-2020 à 16:37:37  profilanswer
 

J'y suis arrivé avec un pointeur ! :love:
 
Edit :
 
Dans le main :
ServosDriver servosDrive;
ServosDriver *SD_PTR = &servosDrive;
WebServer1 monServer(SD_PTR);
 
Je déclare un pointeur SD_PTR2  dans mon WebServer1 puis je fais SD_PTR2 = SD_PTR dans le constructeur
 
Et j'accède au variables et méthodes, depuis monServeur avec -> au lieu de . ( SD_PTR2->textEtatPene au lieu de SD2.textEtatPene initialement)


Message édité par Lt Ripley le 17-08-2020 à 11:13:07

---------------
Mon app android  |  Viens coder  |  Mon topal de vente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  WebServer sur ESP32 ("arduino")

 

Sujets relatifs
Problème inclusion librairie arduinoDemande d'aide pour un proramme de verrouillage arduino
carte maritime arduino[HTML/PHP] Redirection via Arduino
Programmer un lecteur code barre arduinoarduino + pn532 i2c + libnfc
Besoin d'aide Programmation Arduino UrgentIdentifier un badge RFID avec Arduino
probleme programme arduino shield infrarouge ap.photo canon eos 500dProgrammation robot arduino
Plus de sujets relatifs à : WebServer sur ESP32 ("arduino")


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR