Nueva pregunta

Pregunta:

Fecha: 08-06-2017 13:24:00 (En Español)

Insertar datos en base de datos MySQL desde URL[Resuelta]

Hola gente... aca vengo con un nuevo problema... tengo conectada una central meteorológica arduino que envia los datos cada 5 minutos y los inserta en una base de datos MySQL, el problema es que inserta correctamente el primer dato y luego sigue insertando el mismo valor repetitivamente, lo único que actualiza es fecha y hora, es decir que si manda 15° me inserta los 15° aunque el sensor envie una temperatura distinta. Ya verifique que arduino envia bien los datos asi que solo que me queda revisar el PHP.

Si alguien se le ocurre algo super agradecida.

 <?php
	//enlace a BD
		$enlace = mysqli_connect("localhost","***","****", "***");
	
	if (!$enlace) {
		echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
		echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
		echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
		exit;
	}

	//echo "Éxito: Se realizó una conexión apropiada a MySQL! " . PHP_EOL;
    //echo "Información del host: " . mysqli_get_host_info($enlace) . PHP_EOL;

// Leemos los valores que nos llegan por GET
  $WindDirection = (isset($_GET["WindDirection"]) ? mysqli_real_escape_string($enlace, $_GET["WindDirection"]) : NULL);
  $WindSpeedAverage = (isset($_GET["WindSpeedAverage"]) ? mysqli_real_escape_string($enlace, $_GET["WindSpeedAverage"]) : NULL);
  $WindSpeedMax = (isset($_GET["WindSpeedMax"]) ? mysqli_real_escape_string($enlace, $_GET["WindSpeedMax"]) : NULL);
  $Temperature = (isset($_GET["Temperature"]) ? mysqli_real_escape_string($enlace, $_GET["Temperature"]) : NULL);
  $RainfallOneHour = (isset($_GET["RainfallOneHour"]) ? mysqli_real_escape_string($enlace, $_GET["RainfallOneHour"]) : NULL);
  $BarPressure = (isset($_GET["BarPressure"]) ? mysqli_real_escape_string($enlace, $_GET["BarPressure"]) : NULL);
  $Humidity = (isset($_GET["Humidity"]) ? mysqli_real_escape_string($enlace, $_GET["Humidity"]) : NULL);
 
	 
 //insertamos los datos en la tabla temporal
  	$query = "INSERT INTO temporal(WindDirection,WindSpeedAverage,WindSpeedMax,Temperature,RainfallOneHour,BarPressure,Humidity ) VALUES ('".$WindDirection."','".$WindSpeedAverage."','".$WindSpeedMax."','".$Temperature."','".$RainfallOneHour."','".$BarPressure."','".$Humidity."')";
  	mysqli_query($enlace, $query);
	//consulta el id 
 	$resultado = mysqli_query($enlace, "SELECT MAX(id) AS 'id' from temporal WHERE estado = 0");
    $fila = mysqli_fetch_assoc($resultado);
    $fila['id'];

   // Si es igual a 12 inserta los valores en valores
If ($fila['id'] == 12)  {
    
	$Direccion=0;
	$Velocidad=0;
	$VelocidadMax=0;
	$Temperatura=0;
	$OneHour=0;
	$Presion=0;
	$Humedad=0;
  	
	$i = 1;
	
			 
	$resultado = mysqli_query($enlace,'SELECT * from temporal ');
      if(mysqli_num_rows($resultado)==12){
         while($i = mysqli_fetch_array( $resultado)){
             $Direccion = $Direccion + $i[1];
             $Velocidad =  $Velocidad + $i[2];
			 $VelocidadMax=$VelocidadMax + $i[3];
             $Temperatura = $Temperatura + $i[4];
             $OneHour = $OneHour + $i[5];
             $Presion = $Presion + $i[6];
             $Humedad = $Humedad + $i[7];
             }
		
             $Direccion = $Direccion /12;
             $Velocidad =  $Velocidad /12;
		     $VelocidadMax=$VelocidadMax/12;
             $Temperatura = $Temperatura /12 ;
             $OneHour = $OneHour /12 ;
             $Presion = $Presion /12;
             $Humedad = $Humedad /12;
         
             $query = "INSERT INTO  valores (WindDirection,WindSpeedAverage,WindSpeedMax, Temperature,RainfallOneHour,BarPressure,Humidity ) VALUES 
			 ($Direccion, $Velocidad,$VelocidadMax, $Temperatura, $OneHour, $Presion, $Humedad)";
             mysqli_query($enlace, $query);

             $query = "UPDATE temporal SET estado = 1";
		 
             mysqli_query($enlace, $query);
		     mysqli_query($enlace, "TRUNCATE TABLE temporal");
             mysqli_close($enlace);
    		 }
    
 }
	

	?>
Etiquetas: $_GET - Base de Datos - MySQL - PHP - Pregunta - URL Votos: 0 - Respuestas: 13 - Vistas: 20 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 08-06-2017 19:12:06 Si verificar que la url si con tenga los datos que estas emitiendo dese arduino
    aun que podrías indicar el programa para mandar los datos desde arduino
      Votos: 1 - Link respuesta
     
  • Fecha: 09-06-2017 04:06:46 Gracias por la respuesta. Disculpa mi ignorancia pero como verifico??...no entendi bien tu respuesta..   Votos: 0 - Link respuesta
     
  • Fecha: 09-06-2017 05:35:07 pudes mandar a que te guarde la ruta URL en un file
    aun que también podría ser el modo el que el programa en arduino esta enviado los datos
    por que por la consola te puede estar mostrando los datos que son actuales pero puede que el programa que emite no es tomando esos datos nuevos
      Votos: 1 - Link respuesta
     
  • Fecha: 09-06-2017 06:57:14 Gracias por la respuesta.. estoy imprimiendo por consola las variables q manda y las toma bien. Te serviria si subo el codigo arduino?   Votos: 0 - Link respuesta
     
  • Fecha: 09-06-2017 09:06:24 si quisiera verlo para ayudarte mas aun   Votos: 0 - Link respuesta
     
  • Fecha: 09-06-2017 09:42:45 Ahi esta el codigo arduino... muchas gracias!



    
    
    
    #include <SPI.h>
    #include <Ethernet.h>
    
    char                 databuffer[35];
    double               temp;
    long intervalo =60000;   //300000 es el tiempo de nuestro delay   5 minutos     
    long tiempo = 0;
    long tiempoAnterior = 0;
    boolean bandera=1;
    // Mac unica de cada EthernetShield (deben cambiarla)
    byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD7 };
    
    // Descomentar esta linea si se desea un IP fijo
    IPAddress ip(192,168,0,50);
    
    // Descomentar esta linea para asignar un DNS fijo
    IPAddress myDns(200,58,112,193);
    
    // Inicializa la instancia client
    EthernetClient client;
    
    // Direccion del servidor
    char server[] = "www.cmcens451.com";
    
    // Variable de tiempo de la ultima conexion en milisegundos
    unsigned long ultimaConexion = 0;          
    // Estado de la ultima conexion
    boolean ultimoEstado = false;
    // Intervalo en milisegundos entre conexiones
    const unsigned long intervaloConexion =1000; //300000;   
    
    // Datos del sensor
    
    int Direccion;
    float velocidad;
    float velMax;
    float temperatura;
    float OneHour;
    float OneDay;
    float presion;
    int humedad,i;
    
    
    //String envioDatos = "GET /estacion/carga.php?";
    String envioDatos = "GET /carga2.php?";
    #define parametro1 "&WindDirection="
    #define parametro2 "&WindSpeedAverage="
    #define parametro7 "&WindSpeedMax="
    #define parametro3 "&Temperature="
    #define parametro4 "&RainfallOneHour="
    #define parametro5 "&BarPressure="
    #define parametro6 "&Humidity="
    #define parametro8 "&RainfallOneDay="
    
    
    
     
    void setup() {
      // Inicializa puerto serial
      Serial.begin(9600);
      
      
      // Espera 1 segundo para que se inicie la tarjeta Ethernet
      delay(1000);
      // Si deseas usar un ip fijo y un DNS fijo descomentar esta linea y comentar la linea 39
       Ethernet.begin(mac, ip, myDns);
      // Inicializa la tarjeta ethernet mediante DHCP
      Ethernet.begin(mac);
      // Imprime la direccion IP de la tarjeta
      Serial.print("Direccion IP: ");
      Serial.println(Ethernet.localIP());
    }
    // Loop principal
    void loop() {
     
          tiempo = millis();
      
          if(tiempo - tiempoAnterior > intervalo) 
          {
            
          tiempoAnterior = tiempo;  
          
      
       
         getBuffer();  
         Serial.println("#### Prueba sensores ####");     
          Serial.print("Wind speed: ");
          Serial.print(WindSpeedMax());                                                          
          Serial.print("Wind Direction: ");
          Serial.print(WindDirection());
          Serial.println("  ");
          Serial.print("Average Wind Speed (One Minute): ");
          Serial.print(WindSpeedAverage());
          Serial.println("m/s  ");
          Serial.print("Rain Fall (One Hour): ");
          Serial.print(RainfallOneHour());
          Serial.println("mm  ");
          Serial.print("Temperature: ");
          Serial.print(Temperature());
          Serial.println("C  ");
          Serial.print("Humidity: ");
          Serial.print(Humidity());
          Serial.println("%  ");
          Serial.print("Barometric Pressure: ");
          Serial.print(BarPressure());
          Serial.println("hPa");
          Serial.println("");
          Serial.println("");
        
          Direccion = WindDirection();
          velocidad=WindSpeedAverage();
          temperatura=Temperature();
          OneHour=RainfallOneHour();
          presion=BarPressure();
          humedad = Humidity();
          velMax = WindSpeedMax();
          OneDay =RainfallOneDay();
    
        
     
     // Realiza la conexion http al servidor
    
       if (client.available()) {
        char c = client.read();
        Serial.print(c);
      }
    
      // Se conecta al servidor en el puerto 80 (web)
      if (client.connect(server, 80)) {
         envioDatos +=  parametro1 + String(Direccion) + parametro2  + String(velocidad)+ parametro3  + String(temperatura) +  parametro4  + String(OneHour) + parametro5 +  String(presion) + parametro6 +  String(humedad) + parametro7  + String(velMax)+ parametro8  + String(OneDay);
         client.print(envioDatos);
        // Envia el requerimiento al servidor via GET
        
           Serial.print(presion);
    Serial.print(temperatura);
      Serial.println("Iniciando conexion...");
        
        client.print("GET /carga2.php?");
        client.println(" HTTP/1.1");
        client.print("Host: ");
        client.println(server);
        client.println("User-Agent: Arduino-Ethernet");
        Serial.println("Conectado");
        client.println("Connection: close");
        client.println();
    
        // Actualiza el tiempo en milisegundos de la ultima conexion
        ultimaConexion = millis();
      } 
      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
        }
    
    }
    
      Votos: 0 - Link respuesta
     
  • Fecha: 09-06-2017 10:26:28 Hola , sobre tu codigo PHP parece que utilizas el mismo archivo para ejecutar varias operaciones para ello deberías usar un swicht () , EL CUAL RECIBA UN DATO PRINCIPAL QUE DECIDA QUE TIPO DE OPERACIÓN SE EJECUTA EN EL PHP.

    TU DIRRECION LLEVARIA ALGO COMO : HTTPS:// WWW.TUDOMINIOO.COM/NOMBREDIR?OP="TIPO_OPERACION&PARAMETRO1=VALOR1&PARAMETRO2=VALOR2"

    
    $url = $_REQUEST['OP'];
    
    swicht($url){
    
    
    case "GRABA ":
    
    .....
    
    bereak;
    
    
    case "CONSULTA":
    
    break;
    
    
    case "ACTUALIZA":
    
    break;
    
    
    }
    
    
    
    
    
    


    PD: EN LO POSIBLE AL ENVIAR LOS DATOS POR LA URL VERIFICA SU INTEGRIDAD (por ejemplo
    imprimierndo su llegada con un
     echo $valor = $_REQUEST['PARAMETRO1']; 
    =) .

    SALUDOS
      Votos: 1 - Link respuesta
     
  • Fecha: 09-06-2017 10:32:05 Muchas gracias..tenes razon..voy a probar con un echo los valores q recibe para descartar de q lado viene el error.
    Te comento q antes de subir los datos a una web estaba conectado a una pc y funcionaba correcto
      Votos: 0 - Link respuesta
     
  • Fecha: 09-06-2017 11:00:08 creo saber cual es el error
    estas definiendo la ruta envioDatos tipo get esto esta bien pero
    el problema esta en que le estas encadenando cada x tiempo mas valores por eso te toma los primeros
    pensaria que deberias probar asi
    String envioDatos = "GET /carga2.php?";
    String url = " ";
    url = envioDatos + parametro1 + String(Direccion) + parametro2  + String(velocidad)+ parametro3  + String(temperatura) +  parametro4  + String(OneHour) + parametro5 +  String(presion) + parametro6 +  String(humedad) + parametro7  + String(velMax)+ parametro8  + String(OneDay);
    
      Votos: 2 - Link respuesta
     
  • Fecha: 09-06-2017 11:36:22 Lo pruebo y comento..muchas gracias!!   Votos: 0 - Link respuesta
     
  • Fecha: 09-06-2017 12:01:18 las primeras pruebas que hago me anda perfecto.... lo probare un rato mas . Muchisimas gracias   Votos: 1 - Link respuesta
     
  • Fecha: 20-11-2020 13:21:21 podrian ayudarme, tengo un sensor en arduino y quiero enviar el dato a una BD instalada en raspberry, pero no envia el dato   Votos: 0 - Link respuesta
     
  • Fecha: 20-11-2020 13:26:54 mi código
    #include <Ethernet.h>
    #include <SPI.h>
    #include <MySQL_Connection.h>
    // Configuracion del Ethernet Shield
    byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFF, 0xEE}; // Direccion MAC
    byte ip[] = { 192,168,0,9 }; // Direccion IP del Arduino
    byte server[] = { 192,168,0,6 }; // Direccion IP del servidor
    EthernetClient client;
    float temperatura;
    int analog_pin = 0;

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

    void loop(void) {
    temperatura = analogRead(analog_pin);
    temperatura = 5.0*temperatura*100.0/1024.0;
    //Display in Serial Monitor
    Serial.print(temperatura); //Return temperature to Monitor
    Serial.println(" oC");
    // Proceso de envio de muestras al servidor
    Serial.println("Connecting...");
    if (client.connect(server, 80)>0) { // Conexion con el servidor
    client.print("GET /tutoiot/iot.php?valor="); // Envio los datos por GET NOTA: e puesto /iot.php? y config.php,
    client.print(temperatura);
    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(30000); // Espero un minuto antes de tomar otra muestra
    }


    mis scrips o archivos creados son los siguientes:
    sudo nano /var/www/html/config.php
    <?php
    // config.php
    // Credenciales
    $dbhost = "localhost";
    $dbuser = "pi";
    $dbpass = "pi";
    $dbname = "bdpi";
    //Conexion con la base de datos
    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    ?>
    sudo nano /var/www/html/dht11.php
    <?php
    // dht11.php
    //Importamos la configuracion
    require("config.php");
    // Leemos los valores que nos llegan por GET
    $Temperatura = mysqli_real_escape_string($con, $_GET['valor']);
    // Einsertamos los valores en la tabla
    $query = "INSERT INTO Valores(valor) VALUES('".$valor."')";
    // Ejecutamos la instruccion
    mysqli_query($con, $query);
    mysqli_close($con);
    ?>
    mi base de datos se llama: bdpi y mi tabla se llama: valores con la extructura de id, valor y tiempo.
    y en el monitor serial si aparece el valor del sensor
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com