Go Down

Topic: arduino uno y dth22, apache, php y mysql (Read 136 times) previous topic - next topic

migue2707

Aug 06, 2017, 04:10 am Last Edit: Aug 06, 2017, 04:24 am by migue2707
Hola, me plantee capturar humedad y temperatura con el sensor dht22, conseguí mostrarlos en el monitor en serie que tiene la plataforma arduino, pero al momento de tratar de enviar estos datos a otra PC que me sirve como servidor en el cual corre Xammp, aparece el mensaje de conexión establecida pero no logra almacenar los datos en Mysql, no se cual sea mi error. Por favor ayúdenme tomándose la molestia en revisar mi código, y decirme en que me equivoque gracias por su tiempo.

Code: [Select]


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

#define DHTPIN 2                // Puerto Digital del Arduino al cual esta conectado el pin 2 del sensor
#define DHTTYPE DHT22      // DHT 22

DHT dht(DHTPIN, DHTTYPE);                    // Inicializa el sensor

// Configuracion del Ethernet Shield
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD7 };      // Direccion MAC
byte ip[] = { 192,168,1,87 };                             // Direccion IP del Arduino
byte server[] = { 192,168,1,117 };                        // Direccion IP del servidor
EthernetClient client;

// Configura Arduino
void setup() {
  // Inicializa puerto serial
  Serial.begin(9600);
  Serial.println("Invernadero Sistemas");
  Serial.print("Sensor de temperatura-humedad DHT");
  delay(1000); // Esperamos 1 segundo de cortesia
  Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield  
 
   // Imprime la direccion IP de la tarjeta
  Serial.print("Direccion IP: ");
  Serial.println(Ethernet.localIP());
  Serial.println();
  
  // Inicializa Sensor DHTxx
  Serial.print("Iniciando Sensor DHT");
  Serial.println(DHTTYPE);
  Serial.println();
  dht.begin();
  // Espera dos segundos para dar tiempo al sensor mientras obtiene muestra
  delay(2000);  
}

void loop() {
  delay(1000);  // Espera dos segundos para realizar la primera medición, el sensor muestrea la temperatura cada 1 segundos}
  float h = dht.readHumidity(); // Obtiene la Humedad
  float t = dht.readTemperature();  // Obtiene la Temperatura en Celsius
  
  // Control de errores, valida que se obtuvieron valores para los datos medidos
  if (isnan(h) || isnan(t)) {
    Serial.println("Falla al leer el sensor DHT!");
    return;
  }
  
  Serial.print("Humedad: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.println(" *C ");

  if (client.connect(server, 80)) {  // Conexion con el servidor
    client.print("GET /prueba/iot.php?valorh="); // Enviamos los datos por GET
    client.print(h);
    client.print("GET /prueba/iot.php?valort="); // Enviamos los datos por GET
    client.print(t);
    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
}





Tengo una carpeta en mi servidor que se llama prueba y dentro estos dos archivos config.php y iot.php. El archivo config.php contiene la información para establecer una conexión con la base de datos. El archivo iot.php se encarga de subir los datos recibidos a la base de datos de sensores.


config.php
Code: [Select]

<?php
// config.php
    // Credenciales
    
$dbhost "localhost";
    
$dbuser "root";
    
$dbpass "";
    
$dbname "sensores";
    
// Conexión con la base de datos
    
$con mysqli_connect($dbhost$dbuser$dbpass$dbname);
?>




iot.php
Code: [Select]

<?php
    
// iot.php
    // Importamos la configuración
    
require("config.php");
    
// Leemos los valores que nos llegan por GET
    
$valorh mysqli_real_escape_string($con$_GET['valorh']);
    
$query "INSERT INTO valores(valorh) VALUES('".$valorh."')";
    
$valort mysqli_real_escape_string($con$_GET['valort']);
    
$query "INSERT INTO valores(valort) VALUES('".$valort."')";
    
// Ejecutamos la instrucción
    
mysqli_query($con$query);
    
mysqli_close($con);
?>



Ademas en Mysql tengo creada la base de datos sensores,dentro tengo la tabla valores:
id(int(autoincrementable)
valorh(double)
valort(double)
tiempo(timestamp))



Gracias por su ayuda.


donotopen

#1
Aug 13, 2017, 10:29 pm Last Edit: Aug 13, 2017, 11:13 pm by donotopen
Hola

Prueba esto es iot.php

Code: [Select]

<?php
    
// iot.php
    // Importamos la configuración
    
require("config.php");
    
// Leemos los valores que nos llegan por GET
    
$valorh mysqli_real_escape_string($con$_GET['valorh']);
    
$valort mysqli_real_escape_string($con$_GET['valort']);
    
$query "INSERT INTO valores(valorh, valort) VALUES('".$valorh."','".$valort."')";
    
    
// Ejecutamos la instrucción
    
mysqli_query($con$query);
    
mysqli_close($con);
?>


Si no te funciona imprime $query y mira lo que lleva y la forma, si no te funciona tienes que ir retrocediendo siguiendo los datos, muchas veces suponemos cosas.

Tambien mira porque tienes la variable byte server[] = { 192,168,1,117 };  y en el script php tienes localhost (127.0.0.1). Si tienes Xamp (Windows, Apache,MySql,Php) debe estar todo en el mismo servidor, supongo que trabajas en local. Compruébalo por si se te ha pasado.

Al enviar los datos por Get, observa en la barra URL si esta enviando algo y la forma de lo que envía. Mira documentacion sobre los METODOS HTTP (GET, POST..)


gepd

¿al igual que en este post, has verificado que tu servidor sea accesible no solo en modo local?
Deviot el plugin IoT para Sublime Text. Si quieres probarlo y ayudarme con tu feedback, visita: https://github.com/gepd/Deviot

Go Up