05-03-2021, 22:10
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:
Conexiones:
Software necesario:
Código para Arduino:
intro.php:
conex.php:
Base de datos Mysql:
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.
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.
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 += (" º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:
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.