Problema al realizar peticiones HTTP con módulo GSM SIM900

Buenos días,

estoy desarrollando un proyecto de sensorización, en el cual tengo un dispositivo que recoge los datos de los sensores y los envía a un servidor por medio de una petición HTTP realizada usando la red GSM y un módulo SIM900. Estos datos a enviar son en total 8 variables.

El problema, es que tengo un código que funciona y envía los datos correctamente, pero sólo para dos variables. Si intento añadir más datos a la petición, ésta falla.

Para ello, tengo un método que envía la petición con los datos que se le pasan por parámetros, que adjunto a continuación (con las 8 variables):

bool peticionHttp( String api_key , String field_1 , String field_2 , String field_3, String field_4,
				   String field_5, String field_6, String field_7, String field_8){

	bool correcto = false;

	// Componentes del comando AT para realizar la petición
	String comandoURL = "AT+HTTPPARA=\"URL\",\"";
	String ip = "178.255.104.77:3000";
	String path = "/update\"";
	String url = comandoURL + ip + path;

	String f1, f2, f3, f4, f5, f6, f7, f8 = "";

	// // API Key del canal en ThingSpeak y los datos a enviar
	String ak = "api_key=" + api_key;

	f1 = "&field1=" + field_1;
	f2 = "&field2=" + field_2;
	f3 = "&field3=" + field_3;
	f4 = "&field4=" + field_4;
	f5 = "&field5=" + field_5;
	f6 = "&field6=" + field_6;
	f7 = "&field7=" + field_7;
	f8 = "&field8=" + field_8;
	
	String parametros = ak + f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8;
	
	String peticion;
  	peticion = "AT+HTTPPARA=\"URL\",\"178.255.104.77:3000/update?\"";

	// Componentes del comando AT que añade los datos
	String comandoData = "AT+HTTPDATA=";
	int longitud = parametros.length();
	String timeout = ",20000";
	String data = comandoData + longitud + timeout;

	// Habilita el modo HTTP
	if( enviarAT("AT+HTTPINIT", "OK", 5000) ){

		delay(5000);

		// Configura el perfil HTTP
		if( enviarAT("AT+HTTPPARA=\"CID\",1", "OK", 5000) ){

			delay(5000);

			// Fija la dirección de la web
			if( enviarAT(peticion, "OK", 20000) ){

				delay(15000);

				// Fija los datos a enviar
				enviarAT(data, "DOWNLOAD", 20000);
				delay(5000);

				// Inserta los parámetros
				enviarAT(parametros, "OK", 5000);
				delay(5000);

				// Inicia la petición al servidor
				enviarAT("AT+HTTPACTION=1", "OK", 15000);
				delay(15000);

				correcto = true;

				// Finaliza la conexión HTTP
				enviarAT("AT+HTTPTERM", "OK", 5000);

			}

		}

	}

	return correcto;
}

Además, utilizo el método siguiente para enviar los comandos AT al módulo SIM900:

bool enviarAT(String ATcommand, char* resp_correcta, unsigned int tiempo){

	int x = 0;
	bool correcto = false;
	char respuesta[100];
	unsigned long anterior;

	memset(respuesta, '\0', 100); // Inicializa el string
	delay(100);

	while ( SIM900.available() > 0) SIM900.read(); // Limpia el buffer de entrada

	SIM900.println(ATcommand); // Envia el comando AT

	x = 0;
	anterior = millis();

	// Espera una respuesta
	do {
		// si hay datos el buffer de entrada del UART lee y comprueba la respuesta
		if (SIM900.available() != 0){
			respuesta[x] = SIM900.read();
			x++;

	  		// Comprueba si la respuesta es correcta
	  		if (strstr(respuesta, resp_correcta) != NULL){
	    		correcto = true;
	  		}

		}

	}

	// Espera hasta tener una respuesta
	while ((correcto == false) && ((millis() - anterior) < tiempo));
	Serial.println(respuesta);

	return correcto;
}

También tengo otros métodos que activan el módulo y configuran en GPRS, pero estos no me dan problemas.

Muchas gracias por vuestra ayuda.

Buenas de nuevo, he localizado que mi problema está en el método que uso para enviar los comandos AT, ya que he probado enviando directamente los comandos con un SIM900.println() y funciona bien.

Seguiré investigando.

Te diré porque no te he respondido (al menos yo), pues porque no has posteado todo el código y cuando alguien parcializa el problema del otro lado es mas dificil reproducir la falla y ponerse en de igual a igual contigo para entender lo que pides.

Recuerda darnos siempre todo el cuadro de situacón para poder ayudarte.