Ir al contenido
Conéctate para seguir esto  
chujalt

Arduino. Sensor temperatura + wifi + php + MySql

Recommended Posts

Saludos.

    Os voy a mostrar como desde un sensor de humedad y temperatura DHT11 conectado a la placa Arduino se puede enviar vía wifi a un servidor web los datos de humedad y temperatura y almacenarlos en una base de datos en los intervalos de tiempos que deseemos.


Materiales utilizados: 

  • Una placa Arduino (yo he utilizado la Uno).
  • Un módulo wifi HLK-RM04.
  • Un sensor de temperatura DHT11.
  • 7 cables Dupont.

 

 

WIFI-HLK-RM04.jpg

 

 

dht11.jpg

 

 

Conexiones: 

  • Pin RX del módulo HLK-RM04 a pin TX de Arduino.
  • Pin TX del módulo HLK-RM04 a pin RX de Arduino.
  • Pin 5V del módulo HLK-RM04 a pin 5V de Arduino.
  • Pin GND del módulo HLK-RM04 a pin GND de Arduino.
  • Pin datos del DHT11 a pin 2 de Arduino.
  • Pin VCC del DHT11  a pin 3,5V de Arduino.
  • Pin GND del DHT11 a pin GND de Arduino.

Software necesario: 

  • El código para la placa Arduino.
  • Dos páginas web php, una para conectar a la base de datos y otra para introducir los datos en ésta.
  • Una base de datos Mysql.


Código para Arduino: 

#include "DHT.h"
#define DHTPIN 2     
#define DHTTYPE DHT11  
DHT dht(DHTPIN, DHTTYPE);

void setup() {                
 Serial.begin(57600);
 dht.begin(); 
}

void loop() {
 boolean has_request = false;
 int h = dht.readHumidity(); int t = dht.readTemperature();
 if (Serial.available()) {
   while(Serial.available()) {char c = Serial.read();}
   has_request = true;
 }
 if (has_request) {
   Serial.println("HTTP/1.1 200 OK");
   Serial.println("Content-Type: text/html");
   Serial.println("Connection: close");     
   String sr = "<!DOCTYPE HTML>\n";
   sr += "<html>\n";
   sr += "Humedad: "; 
   sr += h; 
   sr += (" %\t");
   sr += "<br />\n";
   sr += "Temperatura: "; 
   sr += t; 
   sr += (" ºC ");
   sr += "<br />\n";
sr += "<form name=\"formulario\" action=\"http://localhost/arduino/wifi/temperatura/intro.php\" method=\"post\">";
sr += "  <input type=\"hidden\" name=\"humedad\" value=\"";
sr += h;
sr += "\" />";
sr += "  <br/>";
sr += "  <input type=\"hidden\" name=\"temperatura\" value=\"";
sr += t;
sr += "\" />";
sr += "  <br/>";
sr += "</form>";
sr += "<script>";
sr += "document.formulario.submit();"; 
sr += "</script>";
   sr += "</html>";
   Serial.print("Content-Length: ");
   Serial.print(sr.length());
   Serial.print("\r\n\r\n");
   Serial.print(sr);
   has_request = false;
 }
}


intro.php: 

<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="content-type">
    <title></title>
<script language="JavaScript">
 
    var totalTiempo=60;
    var url="http://192.168.1.254:8080";
 
    function updateReloj()
    {
        document.getElementById('CuentaAtras').innerHTML = "Se volverán a tomar datos en "+totalTiempo+" segundos";
 
        if(totalTiempo==0)
        {
            window.location=url;
        }else{
            totalTiempo-=1;
            setTimeout("updateReloj()",1000);
        }
    }
 
    window.onload=updateReloj;
 
    </script>
  </head>
  <body>
<?
$humedad = $_POST['humedad'];
$temperatura = $_POST['temperatura'];
if (!isset($humedad)){ 
echo "Datos no recibidos. Error";
}
else 
{
include("conex.php");
 if(mysql_query("INSERT INTO datos (humedad, temperatura) 
  VALUES ('$humedad', '$temperatura')"))
 {
echo "<p align='center'><b><font color='#000000' face='Arial, Helvetica, sans-serif' size='3'>Los datos han sido introducidos correctamente:<br>
Humedad: $humedad<br>
Temperatura: $temperatura<br>
</p>";
echo "<h2 id='CuentaAtras' align='center'></h2>";
}
else
 {
 echo "<p align='center'><b><font color='#000000' face='Arial, Helvetica, sans-serif' size='5'>Ha habido problemas. Vuelva a intentarlo</b></p>";
 }
 }

?>

  </body>
</html> 

conex.php: 

<?
 $link = mysql_connect("localhost" ,"usuario","contraseña") or die("no se da conectado");
mysql_select_db("hutem",$link) or die("no se da seleccionado");
?>

Base de datos Mysql: 

  • Nombre base de datos: hutem
  • Nombre de tabla: datos
  • 4 campos: id, humedad, temperatura, fecha (con la propiedad timestamp, para saber cuando se introdujeron los datos)

Consideraciones previas:  Al módulo Wifi HLK-RM04 le he asignado una ip fija en mi red, la 192.168.1.254 y el puerto 8080.


Explicación cómo funciona: 

    La placa Arduino recoge los datos de humedad y temperatura que le proporciona el sensor y crea una sencilla página html con un formulario con estos datos que mediante javascript se autoejecuta.

    En el navegador de nuestro PC ponemos la dirección 192.168.1.254:8080, entonces se inicia la comunicación con el módulo wifi y nos es enviada la página web mencionada anteriormente.

    Como el formulario enviado se autoejecuta, nos envía a la página intro.php, donde se introducen los datos recibidos en la base de datos y comienza una cuenta atrás de 60 segundos y volver a la dirección 192.168.1.254:8080 y así tener un bucle e ir almacenando los datos cada 60 segundos. Por supuesto esta cantidad de segundos se pueden variar y poner el tiempo que queramos.


Bueno, espero que le sirva a alguien.

Saludos.

Editado por chujalt

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario

Crear una cuenta

Regístrate en nuestra comunidad. ¡Es fácil!

Registrar una cuenta nueva

Iniciar Sesión

¿Ya tienes cuenta? Conéctate aquí.

Iniciar Sesión
Conéctate para seguir esto  

×