TUTORIAL MONITOREO TEMPERATURA Y HUMEDAD POR WIFI ESP8266

Paso #1 Descripción

El sensor ESP8266 es un impresionante y económico módulo de Wifi especialmente para conectarlo a un Microcontrolador y agregar comunicación a nuestro proyecto. El módulo puede ser programado para actuar como un sistema aislado.

Ya que la transmisión de datos puede llegar a consumir una corriente considerable se recomienda utilizar una fuente externa de 3.3V en lugar de conectarlo al pin del Arduino. Sin embargo para pruebas se puede utilizar este pin por periodos cortos y evitar sobrecalentar el Arduino.

Finalmente la hoja de datos del fabricante comenta que los pines de comunicación del ESP8266 (Rx y Tx) también operan a 3.3V por lo que existe el riesgo de que tengamos problemas comunicándonos con los pines Rx y Tx del Arduino, ya que operan a 5V. Al realizar pruebas rápidas nosotros no tuvimos problemas, pero para una implementación completa se recomienda un FTDI para convertir las señales de 5V a 3.3V. O si lo prefieres existe un excelente PDF de Newark donde nos dan varias opciones para construir diferentes circuitos para lograr esto.

Si tienes cualquier duda nos puedes escribir en los comentarios abajo!

 

Paso #2 Características

  • Voltaje de operación: 3.3V
  • Corriente de máxima: 240mA
  • Corriente de operación: 70mA

Paso #3 Componentes

  • Arduino Uno
  • Módulo Wifi ESP8266
  • Paquete de cables Jumpers
  • Sensor de Temperatura y Humedad DHT11
  • Protoboard

Paso #4 Descripción del Tutorial

Tutorial está diseñado para trasmitir y registrar la temperatura y la humedad inalámbricamente hacia un servidor (ThingSpeak).

Paso #5 Pin-Out

1

2

 Pin       Name     Description
 1  VDD  Power supply 3 – 5.5 V DC
 2  DATA  Serial data output
 3  NC  Not connected
 4  GND  Ground

Paso #6 Hardware

 3

Importante: Si se desea comunicar con nuestra la consola del puerto Serial de nuestra PC directamente al ESP8266 es necesario invertir las conexiones de los pines 0 y 1 (Ver comentario de abajo para mayor aclaración)

 

Paso #7 Software


/*Sensor de Temperatura y Humedad DHT11<br>Instrucciones:
Recuerda descargar la libreria DHT para poder utilizar este sensor
Conectaremos el Sensor DHT11 a 5v y el pin de señal a la entrada digital 7
*/

#include <DHT.h>
#define SSID "REDWIFI" //Nombre de la Red Wifi a la que nos conectamos
#define PASS "PASSWORD" //Contraseña de la Red Wifi
#define IP "184.106.153.149" // thingspeak.com

//Sustituir [WRITE_API_KEY] por la obtenida en thingspeak.com sin []
String GET_TEMP = "GET /update?key=[WRITE_API_KEY]&field1="; //Campo de temperatura
String GET_HUM = "GET /update?key=[WRITE_API_KEY]&field2="; //Campo de humedad

#define DHTPIN 7 //Pin al cual se conecta el Sensor DHT11
#define DHTTYPE DHT11 //Tipo del Sensor
DHT dht(DHTPIN, DHTTYPE); //Declaracion del objeto DHT

void setup()
{

pinMode(13,OUTPUT);

dht.begin(); //Se inicializa sensor DHT
Serial.begin(115200); //Se inicializa el puerto Serial para comunicarse con el Modulo Wifi ESP8266
Serial.setTimeout(3000); //Set el Timeout en 3 segundos para Serial.find()
Serial.println("AT\r"); //PROBAR CON \n\r

delay(2000);

if(Serial.find("OK")){ //Verificar si Modulo Wifi responde
if(!connectWiFi()){ //Conectarse a la red
Serial.println("NO SE PUDO CONECTAR A RED WIFI");
}
} else {
Serial.println("MODULO WIFI NO RESPONDE");
}
}

void loop(){
float h = dht.readHumidity(); // Lee la humedad
float t = dht.readTemperature(); //Lee la temperatura

char bufferTemp[8]; //Crear buffer temporal para convertir float a string
String temperatura = dtostrf(t, 8, 3, bufferTemp); //Convertir de float a String 8 = longitud de String, 3 = numero de decimales. (e.g. 1234.567)
updateTemp(temperatura); //Actualizar temperatura

digitalWrite(13,HIGH);
delay(20000); //Thingspeak nos pide un MINIMO de 15 segundos entre cada actualizacion
//Si se hace mas pronto no se captura el Dato. Esperar 20 para estar seguros

char bufferHum[8]; //Crear buffer temporal para convertir float a string
String humedad = dtostrf(h, 8, 2, bufferHum); //Convertir de float a string 8 = longitud de String, 3 = numero de decimales. (e.g. 1234.567)
updateHumedad(humedad); //Actualizar humedad
digitalWrite(13,LOW);
delay(20000); //Hacer una medicion cada 20 segundos
}

void updateTemp(String temp){

String cmd = "AT+CIPSTART=\"TCP\",\""; //Crear el comando para comenzar una conexion TCP
cmd += IP; //IP del sitio a conectarse (thingspeak.com)
cmd += "\",80"; //Puerto (80)
Serial.println(cmd); //Crear conexion
delay(2000); //Darle 2 segundos para responder

if(Serial.find("ERROR")){
return; //No se pudo conectar
}

temp.trim(); //Remover espacios e.g. "____30.00" >> "30.00"

cmd = GET_TEMP; //Crear datos a enviar
cmd += temp; //Agregar la temperatura leida
cmd += "\r\n"; //Agregar caracteres de newline y Carriage return

Serial.print("AT+CIPSEND="); //Indicar cuantos datos se enviaran por TCP
Serial.println(cmd.length()); //Tamaño de los datos a enviar por TCP

delay(2000);

if(Serial.find(">")){
Serial.print(cmd); //Enviar datos
}else{
Serial.println("AT+CIPCLOSE"); //No se pudo ejecutar, cerrar conexion TCP
}
}

void updateHumedad(String humedad){
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
Serial.println(cmd);
delay(2000);

if(Serial.find("ERROR")){
return;
}

humedad.trim();

cmd = GET_HUM;
cmd += humedad;
cmd += "\r\n";
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());

delay(2000);

if(Serial.find(">")){
Serial.print(cmd);
}else{
Serial.println("AT+CIPCLOSE");
}
}

//Funcion para crear conexion Wifi. Regresa true si se conecta exitosamente, si no false.
boolean connectWiFi(){

Serial.println("AT+CWMODE=3"); //Configurar Modulo Wifi ESP8266 en Modo 3 = Station + Access Point (Trasmitir y Recibir)
delay(2000); //Darle tiempo para ejecutar comando

String cmd="AT+CWJAP=\""; //
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";

//cmd = AT+CWJAP="SSID","PASS"

Serial.println(cmd);
delay(10000); //Darle 10 segundos para conectarse

if(Serial.find("OK")){
return true; //Conexión existosa
}else{
return false; //No se pudo conectar
}
}

Paso #8 Registro en el servidor ThingSpeak

El servidor ThinkSpeak es muy fácil de usar y gratis. Sigue estas instrucciones y empieza a registrar datos:

  1. Registrate y crea una cuenta gratis en https://thingspeak.com/
  2. Ir a Channelsà Create New Channel (puedes dejar los demás valores como están)
  3. Ir a API Keys y obtén tu KEY
  4. Prueba poniendo esto en tu navegador: http://api.thingspeak.com/update?key=[THINGSPEAK_KEY]&field1=0
  5. Checa los resultados en: http://api.thingspeak.com/channels/[CHANNEL_ID]/feed.json?key=[THINGSPEAK_KEY]
  6. Reemplaza tu API KEY en el código Arduino y estás listo para enviar datos.