Sensor de temperatura WiFi data logger con el módulo ESP8266 NodMCU

En un anterior articulo vimos el procedimiento para registrar la temperatura en un servidor de base de datos MySQL, por medio de la placa Arduino conectada por ethernet. Ahora, vamos a configurar un sensor de temperatura WiFi data logger con el módulo ESP8266 NodMCU.

Este es el informe gráfico que buscamos con este data logger:

Sensor de temperatura WiFi – Componentes del proyecto


Necesitamos dos componentes principales, que puedes ver en la siguiente tabla:

ESP8266 NodMCUESP8266 NodMCU
Módulo ESP8266 NodMCUSensor de temperatura sumergible DS18B20 (waterproof)

La verdad es que con este modelo es mucho más sencillo implementar un sensor de temperatura WiFi con registro en MySQL. No necesitamos cables UTP, ni shields adicionales y su alimentación eléctrica entra con microUSB.

FICHA TÉCNICA DEL SENSOR DS18B20

Esquema de conexión


La conexión debe quedar como la siguiente simulación:

sensor de temperatura WiFi

Modelo de conexión

PINES ESP8266PINES SENSOR
3V3VDD
GNDGND
D1DQ

Programación del sensor de temperatura WiFi en la placa ESP8266 Nod MCU


Antes de proseguir a la programación, debemos instalar en Windows el driver del módulo ESP8266. Puedes descargar el instalador del driver en el siguiente link:

CH341SER.zip

Después, preparamos el IDE de Arduino para trabajar con la placa ESP8266 Nod MCU. Debemos ir a Archivo -> Preferencias -> Gestor de URLs Adicionales de Tarjetas, y colocar ahí la siguiente URL:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

sensor de temperatura WiFi

Configuración de la placa o board

Luego, debemos ir a Herramientas -> Placa -> Gestor de tarjetas…

Se nos abrirá una ventana en la que debemos buscar la placa como ESP8266. Seleccionamos la versión 2.0.0 y le damos clic en botón Instalar:

Instalación de la board

Luego, debemos poner la librería ‘DallasTemperature’ en la carpeta de librerias:

DallasTemperature.zip

Mi carpeta de librerías ha quedado así:

 

Después, seleccionamos la placa recién instalada en la ruta Herramientas -> Placa -> NodeMCU 1.0 (ESP-12E Module)

Selección de la board

Como puedes ver en la imagen, el IDE de Arduino está establecido para comunicarse con el módulo por el puerto COM37. Puedes verificar el puerto que Windows le asigna al módulo en el Administrador de dispositivos:

El puerto COM para el módulo aparecerá en el Administrador de dispositivos cuando tengas la placa ESP8266 conectado a algún puerto USB del PC

Perfecto! ahora solo es cuestión de pegar el siguiente código en el IDE de Arduino, compilamos, subimos el código a la placa, y listo:

#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS D1 //Se establece el pin D1 como bus OneWire

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire); //Se declara una variable u objeto para nuestro sensor

// Usuario y contraseña de la red WiFi a la que nos vamos a conectar
const char* ssid = "NOMBRE SSID";
const char* password = "CONTRASEÑA";

byte server[] = { 192,168,0,205 }; // ip del Hosting
WiFiClient client;

void setup(void)
{
 Serial.begin(9600);
 // Conectese al WiFi
 WiFi.begin(ssid, password);

// Mientras no conecte al WiFi, muestre '.'
// cuando se conecte, salga del loop
  while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
 }

//Muestre que ya está conectado a la red WiFi
 Serial.println("");
 Serial.println("WiFi connected");

// Print the IP address
 Serial.println(WiFi.localIP());
 sensors.begin();
}

void loop() 
{ 
 sensors.requestTemperatures(); // Enviamos este comando para obtener del sensor el valor de la temperatura 
 float temp = sensors.getTempCByIndex(0); 
 Serial.println("Temperature is: "); 
 Serial.println(temp); // Por qué "byIndex"? Por que podemos tener más de un sensor en el mismo bus. 0 se refiere al primer sensor del bus 

 delay(3000); 

 if (client.connect(server, 80)>0) { 

//Serial.println("connected"); // Conexión con el servidor 
 client.print("GET http://192.168.0.205/temp_admin.php?valor="); 
 client.print(temp); // valor de temperatura 
 client.println(" HTTP/1.0"); 
 client.println("User-Agent: Arduino 1.0"); 
 client.println(); 
 } 

 delay(600000); //Tiempo de 10 minutos entre cada registro de temperatura
   client.stop(); 
    client.flush(); 

} 

Configuración de la base de datos MySQL y conexión PHP


Entonces, como el ESP8862 envía los datos de la temperatura a la URL http://192.168.0.205/temp_admin.php, debemos crear el archivo ‘temp_admin.php‘ del lado del servidor.  Este es su código:

<?php
 include("dbT.php");
 $valor=$_GET['valor'];
 mysqli_query("INSERT INTO temp_admin(temperature) VALUES('$valor')");
?>

A su vez el archivo ‘temp_admin.php‘ se conecta a la BD MySQL por medio del archivo ‘dbT.php‘, para que pueda hacer el registro. Este es su código:

<?php ob_start();
 $con = mysqli_connect('localhost', 'usuario_de_la_bd', 'contraseña', 'La_BD') or die(mysqli_error());
?>

(Al final de este documento puedes ver la estructura de la tabla MySQL)

Finalmente tenemos la vista que genera el informe gráfico:

<?php
$self = $_SERVER['PHP_SELF'];
header("refresh:180; url=$self");

include("dbT.php");
include("phpgraphlib/phpgraphlib.php");

$graph=new PHPGraphLib(1140,380);
$dataArray=array();
$date=strftime("%Y-%m-%d", time());


//$date="2018-02-10";
//get data from database

$sql="SELECT temperature, DATE_FORMAT(fecha, '%H:%i') as hora FROM temp_admin WHERE DATE(fecha)='$date'";
$result = mysqli_query($con, $sql) or die('Query failed: ' . mysql_error());

if ($result) {
 while ($row = mysqli_fetch_assoc($result)) {
 $time=$row['hora'];
 $te=$row['temperature'];
 $temp=substr($te, 0, 2);
 //add to data areray
 $dataArray[$time]=$temp;
  }
}

$graph->addData($dataArray);
$graph->setTitle('Registro diario de temperatura, Chiller Administracion - SENSOR: 192.168.0.138');
$graph->setBars(false);
$graph->setLine(true);
$graph->setDataPoints(true);
$graph->setupYAxis(10, "#C17884");
$graph->setupXAxis(10, "#C17884");
$graph->setLineColor('#747FFE', 'green');
$graph->setDataPointColor('blue');
$graph->setDataValues(true);
$graph->setDataValueColor('maroon');
$graph->setGoalLine(.0025);
$graph->setGoalLineColor('red');
$graph->createGraph();

?>

Puedes ver que la vista que genera el informe gráfico hace uso de la librería 'phpgraphlib'. Esta librería recibe los datos que le pasamos desde la tabla MySQL, para graficar los datos.

Puedes descargar la librería ‘phpgraphlib’ aquí mismo.

Estructura de la tabla MySQL

Esquema de la tabla en MySQL

 


Nota: Por seguridad, el motor de base de datos MySQL no permite realizar operaciones desde un desarrollo con el usuario root. Debes crear un usuario (tuyo) con todos los privilegios.


Tal vez te interese saber cómo instalar una base de datos MySQL

Instalar Apache2 Web Server en Ubuntu

 

También puedes ver el articulo sobre esta misma función pero con una placa de Arduino.

Opcional


En caso de que las librería propias del ESP8266 no te funcionen, puedes descargar estas las librerías para este proyecto. Extraelos en el subdirectorio libraries del directorio Arduino de tu pérfil:

ESP8266WiFi.zip

OneWire-master.zip

Y listo.


Valora este artículo:

Data logger de temperatura con WiFi
5,0 rating based on 12.345 ratings
Overall rating: 5 out of 5 based on 1 reviews.

 

Nombres
Email
Titulo
Calificanos
Contenido

 

Consulta por mysqli

★★★★★
“ Buenas, quería saber si podrías poner los php con el nuevo formato mysqli, en los servers que pruebo me tira muchos errores porque pide funciones mysqli. La verdad que no manejo mucho esos lenguajes por lo cual no puedo hacerlo por mi cuenta. Saludos y gracias, excelente el tutorial.”
- Milton Martinez

Comparte esto en
Publicado en Arduino.

Un comentario

  1. Pingback: 🥇 Sensor de temperatura data logger Arduino conectado a MySQL

Los comentarios están cerrados.