ChuJALT
Aporte: Arduino + sensor temperatura + wifi + php + MySql - Versión para impresión

+- ChuJALT (https://chujalt.com)
+-- Foro: PLACAS DE PROTOTIPOS Y MINI PC'S (https://chujalt.com/forum-22.html)
+--- Foro: Anduino, Nodemcu, Wemos (https://chujalt.com/forum-23.html)
+--- Tema: Aporte: Arduino + sensor temperatura + wifi + php + MySql (/thread-7.html)



Arduino + sensor temperatura + wifi + php + MySql - chujalt - 05-03-2021

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.

[Imagen: WIFI-HLK-RM04.jpg]

[Imagen: 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: 

Código:
#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 += (" &#186C ");
    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: 

Código 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: 

Código 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.