Jump to content

Arduino. Sensor temperatura + wifi + php + MySql


chujalt
 Share

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.

Edited by chujalt
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...