no imprime String dentro de otro String

Hola a todos!

Tengo el siguiente código:

String mediaI ="1";
String mediaV2 ="3";

String URL="http://www.web.org/monitor.php?valor1="+ String(mediaI)+"&valor2="+ String(payload)+"&valor3="+ String(mediaV2);
    

    http.begin(URL);
    
    int httpCode = http.GET();                                                                  //Send the request
 
    if (httpCode > 0) { //Check the returning code
 
      String payload = http.getString();   //Get the request response payload
      Serial.println(payload);                     //Print the response payload
      Serial.println(URL);

El resultado de: Serial.println(URL); es:

http://www.web.org/monitor.php?valor1=1&valor2=&valor3=3

valor1 y valor3, están definidos como 1 y 3 respectivamente en el código, el problema esta en valor2 que esta vacio.

Cuando el resultado de Serial.println(payload); es:

2

No entiendo porque no le pasa el valor "2" correctamente a la cadena pero si me imprime el valor de payload perfectamente por el serial

El resultado de: Serial.println(URL); debería de ser:

http://www.web.org/monitor.php?valor1=1&valor2=2&valor3=3

Gracias!

un saludo

Probá definiendo de nuevo el valor de URL, porque así, como tenés ahora, el valor de la URL se carga sin haber obtenido el valor del payload.

String mediaI ="1";
String mediaV2 ="3";

String URL="http://www.web.org/monitor.php?valor1="+ String(mediaI)+"&valor2="+ String(payload)+"&valor3="+ String(mediaV2);
    

    http.begin(URL);
    
    int httpCode = http.GET();                                                                  //Send the request
 
    if (httpCode > 0) { //Check the returning code
 
      String payload = http.getString();   //Get the request response payload

      URL="http://www.web.org/monitor.php?valor1="+ String(mediaI)+"&valor2="+ 
      String(payload)+"&valor3="+ String(mediaV2);

      Serial.println(payload);                     //Print the response payload
      Serial.println(URL);

En primer lugar disculpar por no copiar el código entero, es el siguiente:

#include <WiFi.h>
#include <HTTPClient.h>
 
const char* ssid = "WIFI";
const char* password =  "pass";
 
void setup() {


 
  Serial.begin(115200);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
 
  Serial.println("Connected to the WiFi network");
 
}
 
void loop() {
  
  int mediaI = 0;            // definimos la variable intensidad
  int mediaV2 = 0;            // definimos la variable intensidad
  String payload;

while(1){

  mediaI = mediaI + 1;
  

    if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
 
    HTTPClient http;  //Declare an object of class HTTPClient
    
String URL="http://www.web.org/monitor.php?valor1="+ String(mediaI)+"&valor2="+ String(payload)+"&valor3="+ String(mediaV2);
    

    http.begin(URL);
    
    int httpCode = http.GET();                                                                  //Send the request
 
    if (httpCode > 0) { //Check the returning code
 
      String payload = http.getString();   //Get the request response payload

      URL="http://www.web.org/monitor.php?valor1="+ String(mediaI)+"&valor2="+ 
      String(payload)+"&valor3="+ String(mediaV2);

      Serial.println(payload);                     //Print the response payload
      Serial.println(URL);  


      
    }
 
    http.end();   //Close connection


   delay(5000);    //Send a request every 1 seconds

 
  }
 }
}

El problema es por el serial imprime perfectamente la URL:

http://www.web.org/monitor.php?valor1=1&valor2=2&valor3=3

Pero el servidor http no la ejecuta correctamente, devuelve el valor vacío:

http://www.web.org/monitor.php?valor1=1&valor2=&valor3=3

Como podéis ver tengo un bucle sin fin en la segunda vuelta el valor de payload deberia de ser 2 pero sigue vacía.

un saludo

El tema, ahora que pusiste el código completo, es que la URL se inicia otra vez con un payload vacío. Proba así, definiendo todas las variables de manera global a ver si anda. while(1) tampoco va porque ya tenes el void loop() que hace eso.

#include <WiFi.h>
#include <HTTPClient.h>
 
const char* ssid = "WIFI";
const char* password =  "pass";


 int mediaI = 0;            // definimos la variable intensidad
 int mediaV2 = 0;            // definimos la variable intensidad
 String payload;

String URL="http://www.web.org/monitor.php?valor1="+ String(mediaI)+"&valor2="+ payload+"&valor3="+ String(mediaV2);
 
void setup() {


 
  Serial.begin(115200);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
 
  Serial.println("Connected to the WiFi network");
 
}
 
void loop() {
  

  mediaI = mediaI + 1;
  

    if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
 
    HTTPClient http;  //Declare an object of class HTTPClient
    

    

    http.begin(URL);
    
    int httpCode = http.GET();                                                                  //Send the request
 
    if (httpCode > 0) { //Check the returning code
 
       payload = http.getString();   //Get the request response payload

      URL="http://www.web.org/monitor.php?valor1="+ String(mediaI)+"&valor2="+ 
      payload+"&valor3="+ String(mediaV2);

      Serial.println(payload);                     //Print the response payload
      Serial.println(URL);  


      
    }
 
    http.end();   //Close connection


   delay(5000);    //Send a request every 1 seconds

 
  }
}

Muchísimas gracias mat885!! ahora va perfecto. Toda la tarde intentándolo y tu en 5 minutos lo resuelves jeje. Gracias de nuevo!

saludos

Me alegro de que haya funcionado! Y no te hagas drama, que eso nos pasa a todos. Un saludo