Problemas con la comunicación entre servidor msql y esp [OFF-TOPIC]

Hola a todos, les escribo porque ya no se que hacer con este problema y les cuento, espero y me puedan ayudar…

Tengo un arduino mega y un esp8266, necesito subir los datos del arduino mega a una base de datos mysql…

A través de la comunicación serial2 de arduino mega logro que se comunique el esp y el mega. Configuro el esp mediante comando AT, logro que se conecte al WIFI, logro que se conecte al servidor de manera correcta peroooooo cuando le envió los datos el servidor me devuelve el error bad request, que el servidor no entiende lo que le estoy enviando.

He creado una pagina de prueba y mediante la pagina me carga de manera correcta. Me he apoyado con el software Wireshark para ver cual es la request que envia mi pagina de prueba para colocarlo igual y nada, me arroja lo mismo, la verdad no se que hacer y aunque he buscado en la web no he conseguido información del porque me da este error…

respuesta del servidor, pagina de prueba y pagina php para enviar los datos.

Código Arduino: la requesicion la he modificado varias veces porque he hecho muchas pruebas, y he dejado la ultima que me da el Wireshark…

pagina php:

<?php
$servername = "servidor";
$username = "usuario";
$password = "clave"; //En esta parte puse una contraseña que tuve que definir al instalar 
$dbname = "variables";


// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

mysqli_query("SET NAMES 'utf-8'");

$a = $_POST ['a'];
$b = $_POST ['b'];
$c = $_POST ['c'];
$d = $_POST ['d'];

$sql = "INSERT INTO valores (id, a, fecha, b, c, d)
VALUES (NULL, '$a', CURRENT_TIMESTAMP, '$b', '$c', '$d')";

if ($conn->query($sql) === TRUE) {
  echo "Datos cargados de manera correcta";
} else {
  echo "Error: " . $sql . "
" . $conn->error;
}

$conn->close();
?>

Hugo86:
../..

$sql = "INSERT INTO valores (id, a, fecha, b, c, d)

VALUES (NULL, '$a', CURRENT_TIMESTAMP, '$b', '$c', '$d')";
../..

Aquí no te falta un punto y coma, después de cerrar el ultimo paréntesis y antes de las dobles comillas ?

Si. No se que hace esta pregunta en este foro?
He cambiado la etiqueta con un [OFF-TOPIC] con la obligación de que el autor publique el código de ESP8266 que esta usando. De lo contrario tendré que borrar el hilo.
Por cierto y va para todos: aunque sea una línea de código usen etiquetas </>

Aqui esta el codigo, pense que lo habia colocado, perdon
en la parte del condigo donde hago la solicitud la he modificado muchas veces debido a que la mas sencilla que todo el mundo coloca no me funciona tampoco.

Esa solicitud me lleva a la pagina php que es la que se encargar de enviar los valores a la base de datos

#include <SoftwareSerial.h>
//SoftwareSerial SerialESP8266(10,11); // RX, TX

String server = "servidor"; 

//variables para enviar al servidor
float corriente = 1.65;
float voltaje   = 201;
float potencia  = 260.35;
int   nserial    = 123;
char Enviar = Enviar;

String cadena="";

void setup() {

  Serial2.begin(9600);
  Serial.begin(115200);
  Serial2.setTimeout(2000);
  
  //Verificamos si el ESP8266 responde
  Serial2.println("AT");
  if(Serial2.find("OK"))
    Serial.println("Respuesta AT correcto");
  else
    Serial.println("Error en el modulo Wifi");

  //-----Configuración de red-------//Podemos comentar si el ESP ya está configurado

    //ESP8266 en modo estación (nos conectaremos a una red existente)
    Serial2.println("AT+CWMODE=1");
    if(Serial2.find("OK"))
      Serial.println("Modulo de Wifi en modo Estacion");
      
    //Nos conectamos a una red wifi 
    Serial2.println("AT+CWJAP=\"USUARIO\",\"CLAVE\"");
    Serial.println("Conectandose a la red ...");
    Serial2.setTimeout(10000); //Aumentar si demora la conexion
    if(Serial2.find("OK"))
      Serial.println("WIFI conectado");
    else
      Serial.println("Error al conectarse en la red");
    Serial2.setTimeout(2000);
    //Desabilitamos las conexiones multiples
    Serial2.println("AT+CIPMUX=0");
    if(Serial2.find("OK"))
      Serial.println("Multiconexiones deshabilitadas");
    
  //------fin de configuracion-------------------

  delay(1000);
  
}


void loop() {
  
  //--- programa----------------------

    //variable1=analogRead(A0);
    //variable2=3.14;
    //otras operaciones
    // . . . 
  
  
  //---------enviamos las variables al servidor---------------------
  
      //Nos conectamos con el servidor:
      
      Serial2.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");
      if(Serial2.available()>0){
        char c = Serial2.write(c);
        Serial.print(c);
        delay(5000);
      }
      if( Serial2.find("OK"))
      {  
          Serial.println();
          Serial.println();
          Serial.println();
          Serial.println("conectado con el servidor...");             
    
          //Armamos el encabezado de la peticion http
          String peticionHTTP= "POST /enviardatos.php";
          peticionHTTP=peticionHTTP+"HTTP/1.1\r\n";
          peticionHTTP=peticionHTTP+"Host: 192.168.1.5\r\n";
          peticionHTTP=peticionHTTP+"Connection: keep-alive\r\n";
          peticionHTTP=peticionHTTP+"Content-Length: " + peticionHTTP.length() + "\r\n";
          peticionHTTP=peticionHTTP+"Cache-Control: max-age=0\r\n";
          peticionHTTP=peticionHTTP+"Origin: http://192.168.1.5\r\n";
          peticionHTTP=peticionHTTP+"Upgrade-Insecure-Requests: 1";
          peticionHTTP=peticionHTTP+"Content-Type: application/x-www-form-urlencoded\r\n";
          peticionHTTP=peticionHTTP+"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36\r\n";
          peticionHTTP=peticionHTTP+"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n";
          peticionHTTP=peticionHTTP+"Referer: http://192.168.1.5/formulario.html\r\n";
          peticionHTTP=peticionHTTP+"Accept-Encoding: gzip,deflate\r\n";
          peticionHTTP=peticionHTTP+"Accept-Language: es-ES,es;q=0.9\r\n";
          peticionHTTP=peticionHTTP+"nserial=";
          peticionHTTP=peticionHTTP+String(nserial);
          peticionHTTP=peticionHTTP+"&corriente=";
          peticionHTTP=peticionHTTP+String(corriente);
          /*
          peticionHTTP=peticionHTTP+"Accept: *" + "/" + "*\r\n";
          peticionHTTP=peticionHTTP+"Content-Length: " + peticionHTTP.length() + "\r\n";
          peticionHTTP=peticionHTTP+"Content-Type: application/x-www-form-urlencoded\r\n";
          //peticionHTTP=peticionHTTP+" HTTP/1.1\r\n"; //+"&voltaje="+String(voltaje)+"&potencia="+String(potencia)+ "&Enviar="+String(Enviar)
         */
    
          //Enviamos el tamaño en caracteres de la peticion http:  
          Serial2.print("AT+CIPSEND=");
          Serial2.println(peticionHTTP.length());

          //esperamos a ">" para enviar la petcion  http
          if(Serial2.find(">")) // ">" indica que podemos enviar la peticion http
          {
            Serial.println("Enviando HTTP . . .");
            Serial2.println(peticionHTTP);
            if( Serial2.find("SEND OK"))
            {  
              Serial.println("Peticion HTTP enviada:");
              Serial.println();
              Serial.println(peticionHTTP);
              Serial.println("Esperando respuesta...");
              
              boolean fin_respuesta=false; 
              long tiempo_inicio=millis(); 
              cadena="";
              
              while(fin_respuesta==false)
              {
                  while(Serial2.available()>0) 
                  {
                      char c=Serial2.read();
                      Serial.write(c);
                      cadena.concat(c);  //guardamos la respuesta en el string "cadena"
                  }
                  //finalizamos si la respuesta es mayor a 500 caracteres
                  if(cadena.length()>5000) //Pueden aumentar si tenen suficiente espacio en la memoria
                  {
                    Serial.println("La respuesta a excedido el tamaño maximo");
                    
                    Serial2.println("AT+CIPCLOSE");
                    if( Serial2.find("OK"))
                      Serial.println("Conexion finalizada");
                    fin_respuesta=true;
                  }
                  if((millis()-tiempo_inicio)>10000) //Finalizamos si ya han transcurrido 10 seg
                  {
                    Serial.println("Tiempo de espera agotado");
                    Serial2.println("AT+CIPCLOSE");
                    if( Serial2.find("OK"))
                      Serial.println("Conexion finalizada");
                    fin_respuesta=true;
                  }
                  if(cadena.indexOf("CLOSED")>0) //si recibimos un CLOSED significa que ha finalizado la respuesta
                  {
                    Serial.println();
                    Serial.println("Cadena recibida correctamente, conexion finalizada");         
                    fin_respuesta=true;
                  }
              }
    
              
            }
            else
            {
              Serial.println("No se ha podido enviar HTTP.....");
           }            
          }
      }
      else
      {
        Serial.println("No se ha podido conectarse con el servidor");
      }

        
  //-------------------------------------------------------------------------------

  delay(10000); //pausa de 10seg antes de conectarse nuevamente al servidor (opcional)

ok si, lo admito, soy prácticamente nuevo y si me estado documentando no solo en la parte de arduino, sino también en lo que bases de datos se refiere.

Sin embargo este no es el único foro en que he publicado mi problema, sino también en otros referentes a lo que son de base de datos y aun nadie me ha sabido dar respuesta del porque sucede esto.

Además he creado una pagina web de prueba para cargar los valores a la base de datos y lo hace perfectamente y sin problemas, es decir que la base datos me funciona de manera correcta.

Lo único que me queda es el código de arduino, algo sucede allí lo cual desconozco, si tuviese alguna idea de lo que sucede ni me molestaría en publicar en los foros.

Pero bueno seguiré indagando hasta dar con el problema. Me disculpo por cualquier inconveniente y gracias por su tiempo. Feliz Día

Por favor lee los dos privados que te he enviado.

Ok listo, borrón y cuenta nueva y mas aun ya que pude solventar parte del problema!!!

Ya no me da ese error gracias a una librería que me descargue la GitHub - itead/ITEADLIB_Arduino_WeeESP8266: An easy-to-use Arduino ESP8266 library besed on AT firmware., con su ayuda ya no me arrija ese error, sin embargo la petición get que yo hacia antes la hacia mediante concatenamientos de tipo string y esta libreria usa es un char… coloco el codigo:

char *enviar = "GET /enviardatos.php?variable1=123&variable2=1.33&variable3=200&variable4=250.33 HTTP/1.1\r\nHost: 192.168.1.15\r\nConnection: close\r\n\r\n";
    
    wifi.send((const uint8_t*)enviar, strlen(enviar);

    uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000);
    if (len > 0) {
        Serial.print("Received:[");
        for(uint32_t i = 0; i < len; i++) {
            Serial.print((char)buffer[i]);
        }
        Serial.print("]\r\n");
    }

Como se puede ver, la variable enviar tipo char es la que se encarga de mandar la solitud http al servidor, sin embargo las variables1, 2, 3 y 4 son sensores a las entradas analogicas y mi pregunta es ¿como hago para contatenar o agregar las variables de las entradas analógicas a la cadena de la solicitud http?

En otras palabras quiero enviar lo medido a la base de datos. ¿como lo hago usando esta libreria?

De ante mano. Muchas gracias.

PD: esta librería me permite cargar los datos sin problemas al servidor, pero solo se sé hacerlo agregandoles los valores de forma directa como lo está en el código.