Buenas tardes a todos, primero que nada gracias por vuestra atención.
Mi problema es referente a la creación de una clase para ESP32 con el Ide de Arduino. Mi clase se basa en la gestión de un pin a través de un botón que creé en html( Me base en este proyecto Enlace).
En mi clase, declaro una clase dinámica que me permite la gestión del servidor web, cuyo nombre es "AsyncWebServer" de la librería con el mismo nombre. Pero el problema está en que cuando llamo la función "on", esta le pasa por referencia una función lambda veis abajo.
Dentro de la función MyServer->on,en el método de mi clase 'BarrierWebPage', el tercer parámetro es una función lambda. El problema está que al utilizar mi otro método BarrierControl() dentro de la función lambda, me pone: 'this' was not capture for this lambda function.
PD: He probado el programa de la página del enlace que he puesto arriba y funciona perfecto. Además si comento dichas funciones que me dan el problema al compilar, compila y la página funciona perfectamente. Solo que obviamente, el pin no se ve afectado.
PD: He eliminado la variable que contenía todo el código html, para reducir espacio en el post. Pero en la página del enlace, podéis verla.
Un saludo y gracias por vuestra atención.
/*FICHERO HEADER FILE (.H)*/
#include <WiFi.h>
#include <WebServer.h>
#include <WiFiServer.h>
#include <WiFiClient.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#define Enable 1
#define Disable 0
class barrier_web
{
private:
// store the wifi name and pass to access.
const char* Wifi_Name;
const char* Wifi_Pass;
AsyncWebServer *MyServer; //Clase Declarada dentro de mi clase
//Relee State store and Pin relee value
uint8_t GPIO_PinRelay;
public:
barrier_web(uint8_t RelayPin,const char* WifiName,const char* WifiPass);//Constructor
uint8_t BarrierInit(); //Inicialización del servidor y conexión wifi
void BarrierWebPage(); //Solicitud y gestión GET de la página web
void BarrierControl(uint8_t Value);
};
/**************FICHERO CPP*********/
barrier_web::barrier_web(uint8_t RelayPin,const char* WifiName,const char* WifiPass)
{
RelayState = Disable;
GPIO_PinRelay = RelayPin; // Pin Relay
Wifi_Name = WifiName;
Wifi_Pass = WifiPass;
MyServer = new AsyncWebServer(80); //Constructor de mi clase AsynWebServer para el puerto 80
}
void barrier_web::BarrierWebPage()
{
//WebPage Send
MyServer->on("/",HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send_P(200, "text/html", web_page);
});
MyServer->on("/on",HTTP_GET, [](AsyncWebServerRequest *request)
{
BarrierControl(Enable); //NO ME DEJA COMPILAR PORQUE ESTOY LLAMANDO A ESTE MÉTODO DENTRO DE ESTA FUNCIÓN
request->send(200, "text/plain","ok");
});
MyServer->on("/off",HTTP_GET, [](AsyncWebServerRequest *request)
{
BarrierControl(Disable); //NO ME DEJA COMPILAR PORQUE ESTOY LLAMANDO A ESTE MÉTODO DENTRO DE ESTA FUNCIÓN
request->send(200, "text/plain","ok" );
});
MyServer->begin();
}
void barrier_web::BarrierControl(uint8_t Value)
{
digitalWrite(GPIO_PinRelay,Value);
}
/*****************FICHERO .INO ARDUINO********************/
#include "barrier_web.h"
const char *Name= "SSID";
const char *Pass= "PASS";
barrier_web test1(2,Name,Pass);
void setup() {
Serial.begin(115200);
test1.BarrierInit();
test1.BarrierWebPage();
}
void loop() {
}