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