Problema al enviar datos a una BD

Buenos días, tengo un problema a la hora de insertar datos en una BD desde mi arduino Ethernet.

He creado una carpeta llamada guarda en mi servidor web, que contiene dos archivos php: config.php e iot.php con el siguiente código:

<?php
    // iot.php
    // Importamos la configuración
    require("config.php");
    // Leemos los valores que nos llegan por GET
    $ganador = mysqli_real_escape_string($con, $_GET['ganador']);
	$tiempo = mysqli_real_escape_string($con, $_GET['tiempo']);
	$dispositivo = mysqli_real_escape_string($con, $_GET['dispositivo']);
    // Esta es la instrucción para insertar los valores
    $query = "INSERT INTO carreras(Ganador,Tiempo,Dispositivo) VALUES('".$ganador."','".$tiempo."','".$dispositivo."')";
	
    // Ejecutamos la instrucción
    mysqli_query($con, $query);
    mysqli_close($con);
?>
<?php
    // config.php
    // Credenciales
    $dbhost = "localhost";
    $dbuser = "root";
    $dbpass = "";
    $dbname = "tfg";
    // Conexión con la base de datos
    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
?>

Si desde el navegador lanzo la siguiente petición :
http://192.168.1.128/guarda/iot.php?ganador=calle1&tiempo=25&dispositivo=01:02:03:04

Sí que me inserta bien los datos en la BD.

El problema viene cuando quiero que estos datos sean enviados desde mi Arduino Ethernet, el código que uso es :

#include <Ethernet.h>
#include <SPI.h>

// Configuracion del Ethernet Shield
byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0xA3, 0x69}; // Direccion MAC
byte ip[] = { 192,168,1,129 }; // Direccion IP del Arduino
byte server[] = { 192,168,1,128 }; // Direccion IP del servidor
EthernetClient client; 
String ganador;
String tiempo;
String dispositivo;

void setup(void) {
  Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield
  delay(1000); // Esperamos 1 segundo de cortesia
  Serial.begin(9600);
}

void loop(void) {
  ganador = "calle1";
  tiempo = "23";
 dispositivo ="01:01:02:03";
  
   
  
  // Proceso de envio de muestras al servidor
  Serial.println("Connecting...");
  if (client.connect(server, 80)>0) {  // Conexion con el servidor
   client.print("GET /guarda/iot.php?ganador="); // Enviamos los datos por GET
    client.print(ganador);
    client.print("&tiempo=");
    client.print(tiempo);
    client.print("&dispositivo=");
    client.print(dispositivo);
    client.println(" HTTP/1.0");
    client.println("User-Agent: Arduino 1.0");
    client.println();
    Serial.println("Conectado");
  } else {
    Serial.println("Fallo en la conexion");
  }
  if (!client.connected()) {
    Serial.println("Disconnected!");
  }
  client.stop();
  client.flush();
  delay(60000); // Espero un minuto antes de tomar otra muestra
}

En el monitor serie me indica conectado, por lo que deduzco que entra dentro del if, pero no inserta nada en la BD, por favor ayuda y gracias de antemano.

porque no armas todo la cadena y la envias directamente?
de este modo, puedes usar sprintf o Strings para la tarea.
te muestro con String, pq me acabo de dar cuenta que los elementos a introducir son Strings y no puedo usar sprintf para concatenarlos.

void loop(void) {
	String buffer;

	ganador = "calle1";
	tiempo = "23";
	dispositivo ="01:01:02:03";
  
	// Proceso de envio de muestras al servidor
	Serial.println("Connecting...");
	if (client.connect(server, 80)>0) {  // Conexion con el servidor
        buffer = "GET /guarda/iot.php?ganador="+ganador+"&tiempo="+tiempo+"&dispositivo="+dispositivo+" HTTP/1.0";
        //                   /guarda/iot.php?ganador=calle1&tiempo=25&dispositivo=01:02:03:04
		client.println(buffer);
		// client.print("GET /guarda/iot.php?ganador="); // Enviamos los datos por GET
		// client.print(ganador);
		// client.print("&tiempo=");
		// client.print(tiempo);
		// client.print("&dispositivo=");
		// client.print(dispositivo);
		// client.println(" HTTP/1.0");
		client.println("User-Agent: Arduino 1.0");
		client.println();
		Serial.println("Conectado");
	} else {
		Serial.println("Fallo en la conexion");
	}
	if (!client.connected()) {
		Serial.println("Disconnected!");
	}
	client.stop();
	client.flush();
	delay(60000); // Espero un minuto antes de tomar otra muestra
}

Prueba a ver si funciona!

Buenas tardes surbyte, en primer lugar agradecerle su respuesta, pero me temo que sigue sin funcionar :frowning:

No se si el problema está en la concatenación en si, aunque usaré su solución para la concatenación.

En la base de datos he puesto que las tuplas admitan nulos, realizando una petición inicial de

client.print("GET /guarda/iot.php?ganador="); 
    client.print(ganador);

Para comprobar si al menos me realiza una entrada en la BD, aunque deje el resto de campos vacíos, ya que una vez me haga por lo menos una entrada, ya usaría su solución para rellenar el resto de campos, el caso es que no consigo insertar nada.

Buenas tardes, yo tengo un problema con algo similar... Si lo que te a dicho Surbyte no a funcionado revisa el config.php y asegurate de que todos los valores que le pasas de la conexión son correctos. Un saludo¡¡

Lee este hilo y has las correcciones pertinentes.

Intenta habilitar el debugging o sea las transacciones con el Server, para saber que esta ocurriendo

Buenas tardes, he estado mirando la conversación que establecen entre arduino y servidor con whireshark y ya se qué es lo que me falla, al enviar la petición GET, el servidor le devuelve un error 403 You don´t have permission to access /guarda/iot.php

Ahora estoy googleando para ver cómo solucionar este error, que aparentemente está en mi apache, si alguien tiene alguna propuesta.... ya que por ahora no lo he conseguido solucionar, pero estoy contento de por lo menos saber ya que fallaba.

Muchas gracias y saludos.

SOLUCIONADO:

Para ello tuve que añadir las siguientes líneas en el archivo httpd.conf de mi Apache:

<Directory />
   Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>

Tras esto ya me permite insertar los datos desde el Arduino, muchas gracias y saludos!!

Como te dije, hay que aprender a usar las herramientas. Los sistemas siempre proveen medios para ver que esta pasando.
Me da gusto que lo solucionaras!!