WebServer sur ESP32 ("arduino")

WebServer sur ESP32 ("arduino") - Divers - Programmation

Marsh Posté le 15-08-2020 à 00:57:03    

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

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 15-08-2020 à 00:57:03   

Reply

Marsh Posté le 15-08-2020 à 02:59:49    

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!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-08-2020 à 07:20:53    

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 !


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 16-08-2020 à 13:41:33    

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. }


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 16-08-2020 à 16:37:37    

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

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed