Sim808 GPS,GSM,GPRS y la librería DFRobot_Sim808

Hola:

Escribo mi primer post porque hay algo que no me cuadra con el comando GET de la libreria.

Tengo el siguiente código para una prueba que estoy haciendo con este módulo.

#include <DFRobot_sim808.h>
#define mySerial Serial1
DFRobot_SIM808 sim808(&mySerial);

char http_cmd[] = "GET /arduino/grabar_dato.php?data1=34618103646&data2=-13.88556&data3=37.67545&data4=0.22 HTTP/1.1 \r\n\r\n";
char buffer[512];
int Powerkey = 9;

void setup(){
  mySerial.begin(9600);
  Serial.begin(9600);
  
  /////////encendemos el modulo GSM,GPRS,GPS por software
  digitalWrite(Powerkey, LOW);
  delay(2000);
  digitalWrite(Powerkey, HIGH);
  delay(5000);
  
  //******** Initializa la sim808  *************
  while(!sim808.init()) {
      delay(1000);
      Serial.print("Error de inicializacion de la Sim808\r\n");
  }
  delay(3000);  
    
  //*********** Intentar DHCP con el APN correcto *******************
  while(!sim808.join(F("orangeworld"))) {
      Serial.println("Error de GPRS de la Sim808");
      delay(2000);
  }

  //************ Hemos conectado el GPRS ****************
  Serial.print("La direccion IP es: ");
  Serial.println(sim808.getIPAddress());

  //*********** Establecer conexion TCP ************
  if(!sim808.connect(TCP,"miservidor.com", 80)) {  
      Serial.println("Error de conexion TCP");
  }else{
      Serial.println("Conexion TCP satisfactoria");
  }

  //*********** Enviar GET request *****************
  sim808.send(http_cmd, sizeof(http_cmd)-1);
  int ret = sim808.recv(buffer, sizeof(buffer)-1);
  if (ret <= 0){
        Serial.println("error recibiendo");
    }
    else {
        buffer[ret] = '\0';
        Serial.print(buffer);
    }


  //************* Cerrar la conexion TCP **********
  sim808.close();

  //*** Desconectar GPRS *******
  sim808.disconnect();
}


void loop(){

}

He utilizado el codigo de ejemplo de la libreria DFRobot_Sim808. Y todo funciona genial hasta que lo adapto a mis pruebas. He puesto mi servidor.com para no poner el verdadero.

Se trata de añadir registros a una tabla de una mysql en mi servidor. Siempre que se ejecuta el código obtengo un “400 Bad Request” pero si lo hago desde la barra del navegador, inserta el registro sin problemas con el siguiente comando en la barra de direcciones del navegador:

http://miservidor.com/arduino/grabar_dato.php?data1=34618103646&data2=-26.88556&data3=37.67545&data4=0.25

Con el siguiente código en el php

<?php
    
   $conn= new mysqli('localhost','miusuario','micontraseña', 'mibasededatos');
   
   if($conn->connect_error) {
   die("Conexion fallida: ". $sql->connect_error);
   }
   
   $sql = "INSERT INTO mitabla (referencia, latitud, longitud, velocidad) VALUES ('".$_GET["data1"]."','".$_GET["data2"]."','".$_GET["data3"]."','".$_GET["data4"]."')";
   
   if ($conn->query($sql) === TRUE) {
       echo "Nuevo registro creado.";
       $conn->close();
    } else {
       echo "Error: " . $sql . "
" . $conn->error;
    };
    
?>

Esta es la respuesta que obtengo del servidor cuando se hace a través de arduino:

HTTP/1.1 400 Bad Request
Server: nginx
Date: Fri, 30 Mar 2018 11:50:01 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

Algo se me escapa y no se que es.

¿Alguien ha tenido el mismo problema?

Gracias.

Problema resuelto

He cambiado el siguiente código

"GET /arduino/grabar_dato.php?data1=34618103646&data2=-13.88556&data3=37.67545&data4=0.22 HTTP/1.1 \r\n\r\n";

por este otro

"GET /datos/grabardato.php?data1=34618103646&data2=-13.88556&data3=37.67545&data4=0.22 HTTP/1.1\r\nHost: miservidor.com\r\n\r\n";

También he cambiado este error que había en el script php

 if($conn->connect_error) {
   die("Conexion fallida: ". $sql->connect_error);
   }

Por este

 if($conn->connect_error) {
   die("Conexion fallida: ". $conn->connect_error);
   }

y todo funciona bien.

Para todos los que les pueda servir.