Comunidad Gambas-es

Versión completa: Una variable declarada en C++ y gestionada por html. Como?
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola:

Desde hace días estoy tratando de resolver, sin haberlo logrado, cómo es que una variable que toma diferentes valores cada vez, puede ser reconocida por un código html, dentro del mismo C++ donde se produce la variable. Dicha html debe mandar el valor de la variable a un Web Server, por ejemplo de Apache:

Estoy en el IDE de Arduino, donde se hacen muchas cosas, pero pongo un poco de código para que mi pregunta sea mas explícita:

temperatura = bme.readTemperature();       //Se lee el sensor BME280 de Adafruit
...
...
String pagina = "<!DOCTYPE html>"
"<html>"
"<head>"
....
"<form id='form1' method='get' action='http:localhost/clima/index.html' >
....
"input type='hidden' name='tempe' value=temperatura />"
....
"</html>";   // Acá termina la String pagina

if (client) {
   client.println(pagina)    // Aquí es donde se invoca la String pagina (html) que "debería" recoger y reconocer el valor de la variable 'temperatura'.
}


En mi Server Apache (en mi propia PC) solo puedo rescatar la palabra 'temperatura', pero no su valor, digamos 27 (grados Celsius). Pareciera que el html es indiferente a lo que ocurre en el código del Arduino. Es por eso que someto este caso a la consideración del Foro, para poder encontrar la manera de lograrlo.

Saludos a todos.
no tengo la mas remota idea de como lograrlo
Hola

Veo que estás intentando imprimir en pantalla todas las líneas del html con el comando println(string) que bajo mi punto de vista no es lo más adecuado. println imprime una sóla línea y tu le estás enviando varias. Podría ser que cualquier error de sintaxis en el html arruine la salida que esperas obtener.

Mi recomendación es que concatenes todo el texto html (por supuesto, teniendo mucho cuidado con escapar los caracteres especiales como pueden ser otras comillas que vayan en una propiedad de algún elemento) y uses la instrucción client.print(html) que imprime todo el texto a la vez. O mejor que hagas una línea nueva cada vez con el texto html sólo de esa línea, de la forma:

C
  1. temperatura = bme.readTemperature();       //Se lee el sensor BME280 de Adafruit
  2.  
  3. if (client) {
  4.  
  5.     client.println("<!DOCTYPE html>");
  6.     client.println("<html>");
  7.     client.println("<head>");
  8.     // ....
  9.     client.println("<form id='form1' method='get' action='http:localhost/clima/index.html' />");
  10.     // ....
  11.     // aquí descomponemos la línea html para que la variable temperatura no esté entre comillas
  12.     // puesto que entonces se imprimiría como el texto literal y no con el valor que contiene.
  13.     client.println("<input type='hidden' name='tempe' value='");
  14.     client.println(temperatura);
  15.     client.println("' />");
  16.     // ....
  17.     client.println("</html>");   // Acá termina la String pagina
  18.  
  19. }



O bien con una cadena con todo el html (he colocado saltos de línea para que el html generado tenga algo de formato y no esté todo en una sola línea):

C
  1. temperatura = bme.readTemperature();       //Se lee el sensor BME280 de Adafruit
  2.  
  3. if (client) {
  4.  
  5.     client.print("<!DOCTYPE html>\n"
  6.     "<html>\n"
  7.     "<head>\n"
  8.     // ....
  9.     "<form id='form1' method='get' action='http:localhost/clima/index.html' />\n"
  10.     // ....   
  11.     "<input type='hidden' name='tempe' value=' " + temperatura + " ' />\n"
  12.     // ....
  13.    "</html>");   // Acá termina la String pagina
  14.  
  15. }



Por otra parte, no entiendo por qué declaras la caja de texto"tempe" como "hidden", que significa que estará invisible en la página. Supongo que tendrás otro campo que recoja ese dato una vez que envíes el formulario (aunque no veo un input type="submit" para enviar ese dato al destino que sería la página 'http:localhost/clima/index.html'.


Evidentemente sin ver todo el código no puedo ayudarte mucho más. Espero que al menos mis comentarios te den una pista de lo que pueda estar sucediendo en tu código.

P.D. Echa también un vistazo a la instrucción sprintf que permite la sustitución de variables dentro del texto usando comodines:

https://parzibyte.me/blog/2020/12/26/eje...f-arduino/


Saludos