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 pero por medio del módulo ESP8266 NodMCU.
Componentes del proyecto
Necesitamos dos componentes principales, que puedes ver en la siguiente tabla:
![]() | ![]() |
---|---|
Módulo ESP8266 NodMCU | Sensor 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.
Esquema de conexión
La conexión debe quedar como la siguiente simulación:

Modelo de conexión
PINES ESP8266 | PINES SENSOR |
---|---|
3V3 | VDD |
GND | GND |
D1 | DQ |
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:
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

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. Luego, le damos clic en botón Instalar

Instalación de la board
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
Para los registros en la BD MySQL del sensor de temperatura debemos tener del lado del servidor un script PHP llamado temp_admin.php, con el siguiente código:
<?php include("dbT.php"); $valor=$_GET['valor']; mysql_query("INSERT INTO temp_admin(temperature) VALUES('$valor')"); ?>
Para el módulo del informe gráfico podemos usar el archivo temperatura.php, con el siguiente código:
<?php
$self = $_SERVER['PHP_SELF'];
header("refresh:180; url=$self");
include("db_temp.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 = mysql_query($sql) or die('Query failed: ' . mysql_error());
if ($result) {
while ($row = mysql_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();
?>
El siguiente código es del archivo db_temp.php que hace la conexión a la base de datos:
<?php ob_start(); define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', 'contraseña de root de MySQL'); define('DB_DATABASE', 'temperatura'); $connection = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD) or die(mysql_error()); $database = mysql_select_db(DB_DATABASE) or die(mysql_error()); ?>
Tenemos la estructura de la tabla:

Esquema de la tabla en MySQL
También puedes ver el articulo sobre esta misma función pero con una placa de Arduino.
Descarga las librerías para este proyecto. Extraelos en el subdirectorio libraries del directorio Arduino de tu pérfil:
Y listo.