Go Down

Topic: Problemas al pasar los datos desde Arduino UNO a base de datos Mysql (Read 1 time) previous topic - next topic

elvaquero

Sep 22, 2014, 06:11 am Last Edit: Feb 21, 2020, 05:22 pm by surbyte Reason: Agregado de etiqueta para códigos y/o errores
Espero no ser extenso, pero si explicarme lo suficiente para obtener apoyo...

Mi proyecto consiste en recabar varios datos a traves de sensores y un reloj para almacenarlos en una base de datos.

Estoy trabajando con un ARDUINO UNO y la respectiva Shield Ethernet, ya estoy recabando los datos de sensores y reloj, incluso guardo los datos en la memoria SD.

Mi problema es en la siguiente etapa, donde estoy tratando de enviar los datos a una base de datos, en este caso estoy haciendo pruebas para realizar la insersion a traves del medodo GET de PHP. Este codigo en PHP hace su trabajo correctamente si lo llamo en el explorador e inserta el valor en la base de datos, pero cuando hago la llamada desde ARDUINO, no sucede nada.

Como referencia, creo q ya tengo liberados los puertos en el router y el FireWall de windows y el ARDUINO me responde correcto si le hago un PING.

Aqui agrego tanto el Sketch, como el codigo PHP, para ver si me pueden ayudar... de ante mano gracias...

Sketch

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x96, 0xB4 };
byte ip[] = { 192,168,1,10 }; // Direccion ip local
byte gw[] = { 192,168,1,1 };
byte sr[] = { 255,255,255,0};
char server[]={"192.168.1.3"};

EthernetClient client;
// Definicion de pines
//int sensorPin = A0;

void setup()
{
 Serial.begin(9600);
 Ethernet.begin(mac, ip, gw, sr); // inicializa ethernet shield
 delay(1000); // espera 1 segundo despues de inicializar
 Serial.print("My IP address: ");
 Serial.println(Ethernet.localIP());
}

void loop()
{
 float celsius = 81;  // getTemperaturaC();     // 10 mV por grado celsius
 Serial.print(celsius); // Escribe en el puerto serial para monitorear
 Serial.print(" grados Celsius");

 Serial.println("Conectando..");

 if (client.connect(server, 80)) {  // Se conecta al servidor
   client.print("GET http://192.168.1.3/DataArduino.php?v="); // Envia los datos utilizando GET
   client.print(celsius);
   client.println(" HTTP/1.0");
   client.println("User-Agent: Arduino 1.0");
   client.println();
   Serial.println("Conexion exitosa");
 }
 else
 {
   Serial.println("Falla en la conexion");
 }
 if (client.connected())
   {}
 else
 {
   Serial.println("Desconectado");
 }
 client.stop();
 client.flush();
 delay(5000); // espera 15 segundos antes de volver a sensar la temperatura
}


Codigo PHP

Code: [Select]
<?php
$mysql_servidor 
"localhost";
$mysql_base "shop";
$mysql_usuario "root";
$mysql_clave "";

$hora time();
$fechaRegistro="".date("d-m-Y H:i:s"$hora);
$valor htmlspecialchars($_GET["v"],ENT_QUOTES);
echo 
"".$fechaRegistro."---".$valor;
// Valida que esten presente todos los parametros
if (($fechaRegistro!="") and ($valor!="")) 
{
       
mysql_connect($mysql_servidor,$mysql_usuario,$mysql_clave) or die("Imposible conectarse al servidor.");
       
mysql_select_db($mysql_base) or die("Imposible abrir Base de datos");
       
$sql "insert into data (IdReg, Temp) values ('$fechaRegistro','$valor')";
       
mysql_query($sql);
   }
else 
{
       echo 
"paso por aqui";
   }
?>

noter

¿El     client.print(celsius); no debería ser client.println?

Khaf598

Espero no ser extenso, pero si explicarme lo suficiente para obtener apoyo...

Mi proyecto consiste en recabar varios datos a traves de sensores y un reloj para almacenarlos en una base de datos.

Estoy trabajando con un ARDUINO UNO y la respectiva Shield Ethernet, ya estoy recabando los datos de sensores y reloj, incluso guardo los datos en la memoria SD.

Mi problema es en la siguiente etapa, donde estoy tratando de enviar los datos a una base de datos, en este caso estoy haciendo pruebas para realizar la insersion a traves del medodo GET de PHP. Este codigo en PHP hace su trabajo correctamente si lo llamo en el explorador e inserta el valor en la base de datos, pero cuando hago la llamada desde ARDUINO, no sucede nada.

Como referencia, creo q ya tengo liberados los puertos en el router y el FireWall de windows y el ARDUINO me responde correcto si le hago un PING.

Aqui agrego tanto el Sketch, como el codigo PHP, para ver si me pueden ayudar... de ante mano gracias...

Sketch ======================================================
#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x96, 0xB4 };
byte ip[] = { 192,168,1,10 }; // Direccion ip local
byte gw[] = { 192,168,1,1 };
byte sr[] = { 255,255,255,0};
char server[]={"192.168.1.3"};
 
EthernetClient client;
// Definicion de pines
//int sensorPin = A0;
 
void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip, gw, sr); // inicializa ethernet shield
  delay(1000); // espera 1 segundo despues de inicializar
  Serial.print("My IP address: ");
  Serial.println(Ethernet.localIP());
}
 
void loop()
{
  float celsius = 81;  // getTemperaturaC();     // 10 mV por grado celsius
  Serial.print(celsius); // Escribe en el puerto serial para monitorear
  Serial.print(" grados Celsius");
 
  Serial.println("Conectando..");
 
  if (client.connect(server, 80)) {  // Se conecta al servidor
    client.print("GET http://192.168.1.3/DataArduino.php?v="); // Envia los datos utilizando GET
    client.print(celsius);
    client.println(" HTTP/1.0");
    client.println("User-Agent: Arduino 1.0");
    client.println();
    Serial.println("Conexion exitosa");
  }
  else
  {
    Serial.println("Falla en la conexion");
  }
  if (client.connected())
    {}
  else
  {
    Serial.println("Desconectado");
  }
  client.stop();
  client.flush();
  delay(5000); // espera 15 segundos antes de volver a sensar la temperatura
}

Codigo PHP==================================================
<?php
$mysql_servidor = "localhost";
$mysql_base = "shop";
$mysql_usuario = "root";
$mysql_clave = "";
 
$hora = time();
$fechaRegistro="".date("d-m-Y H:i:s", $hora);
$valor = htmlspecialchars($_GET["v"],ENT_QUOTES);
echo "".$fechaRegistro."---".$valor;
// Valida que esten presente todos los parametros
if (($fechaRegistro!="") and ($valor!=""))
   {
        mysql_connect($mysql_servidor,$mysql_usuario,$mysql_clave) or die("Imposible conectarse al servidor.");
        mysql_select_db($mysql_base) or die("Imposible abrir Base de datos");
        $sql = "insert into data (IdReg, Temp) values ('$fechaRegistro','$valor')";
        mysql_query($sql);
    }
else
   {
        echo "paso por aqui";
    }
?>

Quionda!

Si te parece tengo el codigo para enviar y traer datos y es muy sencillo, no necesitas php ni nada por el estilo

Saludos!

surbyte

Hilo cerrado por revivir algo del 2014.
Realmente cuesta entender como se pueden pasar por alto las advertencias en letras rojas, mas allá que esten en inglés. Hoy con Google Translate no hay excusas.
Además existen las Normas del foro que también lo explican.

Go Up