Esta semana un profesor de informática y tecnología preguntaba cómo poder plantear a sus alumnos proyectos relacionados con IOT, el internet de las cosas, por ejemplo notificar una alarma por correo electrónico. Teniendo mucha experiencia con Arduino se planteaba probar Raspberry Pi aprovechando su conectividad, pero eso era porque no conocía las posibilidades y facilidad de programación del ESP8266.
Comparto este pequeño tutorial para utilizar NodeMCU con ESP8266 para vigilar eventos y enviar alarmas por correo electrónico para que conozcas su potencial por si puede ser útil para verlo en tus clases.
¿Qué es NodeMCU y ESP8266?
Es muy probable que ya hubieras oído hablar del chip ESP8266 si has intentado conectar Arduino por wifi ya que se trata de un chip con wifi integrado. El propio ESP8266 lleva un microcontrolador para ejecutar sus funciones propias a través de un firmware, igual que lo tiene por ejemplo el teclado de un ordenador.
Pues bien, NodeMCU es una placa open-source, libre y replicable, que contiene un chip ESP8266 y que facilita su conexión a un PC y su programación, además de permitir acceder a las entradas y salidas del microcontrolador. Es decir, es una placa de desarrollo, igual que puede ser Arduino, cuyo microcontrolador está dentro del chip ESP8266.
Su mayor ventaja es que es muy económica y tiene incorporado acceso a redes WIFI, función principal del ESP8266. Esta funcionabilidad nos va a permitir realizar proyectos dentro del llamado internet de las cosas o IOT, como por ejemplo que nos avise de una alarma por correo electrónico al detectar una fuga de agua en nuestra casa o cualquier otro evento tal y como quería el profe de tecnología.
Pouedes encontrar actualmente tres versiones de la placa NodeMCU:
- v0.9 V1
- v1.0 V2
- v1.0 V3
Ni lo dudes, por el precio (menos de 8€ en Amazon) que tiene una NodeMCU ve a por una V2 o V3, merece la pena.
No voy a entrar a ver el detalle de NodeMCU, pero si debes saber que dispone de 9 pines digitales de entrada/salida y un pin de entrada analógica, más que suficiente para hacer nuestro pequeña «cosa conectada» dentro del internet de las cosas. Además disponemos de pines de tensión para alimentar sensores, un pulsador configurable y un LED integrado.
Como ves el concepto es muy similar a Arduino, tan similar que podemos utilizar el IDE de Arduino para programar nuestra placa NodeMCU. Hay otras opciones, incluso para ser programado inalámbricamente, pero si ya conocemos el IDE de Arduino… ¿por qué cambiar?
El internet de las cosas.
Suena bonito, y si decimos IOT suena incluso futurista, pero qué difícil es explicarlo. Resumiendo mucho viene a nombrar una época, la actual, dónde ya hay más objetos conectados a internet que personas. También nos referimos a la forma en que esos objetos o máquinas se comunican entre ellos o cómo vuelcan información a la red.
El concepto es muy amplio y tampoco es objeto de este tutorial conocer en profundidad el concepto del IOT, pero si hay que tener en cuenta que es un sector donde se va a trabajar cada vez más y por lo tanto es bueno que los estudiantes tengan unas nociones mínimas sobre redes, comunicaciones y seguridad.
De la enormidad que es el internet de las cosas aquí nos vamos a quedar con la idea de sensorizar algo y hacer llegar a distancia información sobre la lectura de esos sensores. Es fácil pensar por ejemplo en una casa con sensores de presencia para detectar intrusos, detectores de gas, humo, agua, etc
Para este tipo de comunicación o si quisiéramos almacenar datos en la nube necesitamos servicios web. Necesitamos un servidor que gestione la comunicación con nuestra placa y pueda en nuestro caso enviar una alarma por correo electrónico. Entiende que no va a ser la placa NodeMCU quien envíe la alarma por correo electrónico, sino que la placa va a solicitar ese servicio web a un servidor concreto, incluyendo los datos que quiera añadir, y va a ser el servidor quien envíe la alarma por correo electrónico. Aunque en un futuro nuestro proveedor de telefonía o internet nos incluya esos servicios de momento nuestra primera preocupación es encontrar quien nos pueda prestar esos servicios web, a ser posible de manera gratuita claro.
Configurando nuestro servicio web para envío de alarma por correo electrónico.
A modo de ejemplo para ilustrar el tutorial vamos a utilizar IFTTT para que nos preste servicio web. Debes crearte una cuenta de manera similar a cualquier otra página pulsando en «Sign up» y rellenando tus datos. Ya con tu cuenta creada debes crear un nuevo «applet», es decir una nueva rutina web que automatice un servicio de tal manera que si nuestra placa solicita el servicio automáticamente se ejecute ese applet para enviar la alarma por correo electrónico.
Pulsa en «My Applets» y luego «New Applet» y pulsa sobre «+this». Por cierto, IFTTT son las siglas de «If this then that», es decir «si esto entonces aquello», así que vamos a definir «esto» dentro del automatismo web.
Busca en el servicio «Webhooks» y selecciónalo. Posteriormente debes seleccionar el trigger, es decir el desencadenante de la acción a tomar. A día de hoy únicamente puedes seleccionar «Receive a web request», es decir que el detonante de la acción va a ser que se reciba una petición web.
Ahora hay que rellenar ciertos campos. Primero dale un nombre a la petición web que se espera. Ten en cuenta que puedes tener varios eventos que quieras que envíen una alarma por correo electrónico, por lo que hay que diferenciarlas. Yo la llamaré «agua».
Ahora me va a pedir qué acción quiero tomar si se recibe una petición web con el nombre agua, hay que pulsar «+that». Puesto que quiero enviar la alarma por correo electrónico seleccionaré un servicio de correo, en mi caso Gmail. Pulsa sobre el icono de Gmail y verás que hay disponibles tres acciones: enviar un correo, enviarse un correo a uno mismo y crear un borrador. Yo voy a seleccionar «Send yourself an email» porque quiero que me notifique directamente a mí, pero podría seleccionar enviar el correo a otra dirección si quisiera.
Ahora hay que definir qué queremos que ponga en el asunto y cuerpo de correo que se va a enviar. Vamos a dejar que eso lo definamos en la programación del NodeMCU por lo que borra todo y simplemente pon pulsando en «Add ingredient» introduce «value 1» en subject (asunto) y «value 2 value 3» en body (cuerpo del mensaje).
Ahora quiero que entiendas lo que has hecho: esos «value» son parámetros que enviaremos desde NodeMCU al hacer la petición web. Por ejemplo si yo tengo varios sensores le podré especificar cuál de ellos ha dado pie a la alarma o incluso dar un valor concreto leído en ese momento.
Creamos la acción, pulsamos finish y ese applet quedará activado.
Programando NodeMCU por bloques tipo Scratch.
¿Programar NodeMCU con Scratch? Si, también al profe de tecnología le gustaría poder programar con bloques para poder verlo en clase de manera más intuitiva. ¡Concedido! Precisamente la «golosina» (así llamo a los recursos interesantes que comparto a través del boletín) del boletín de Juegos Robótica de este mes es un entorno de programación por bloques online que es compatible con NodeMCU y servicios web en IFTTT. Se trata de de easycoding.tn y más concretamente de Tuniot para ESP8266.
Esta parte es mucho más fácil de explicar en vídeo por lo que no dejes de visualizar el vídeo al final de la entrada para entender el proceso de programación y además puedes comprobar como se envía la alarma por correo electrónico.
En resumen programaremos por bloques nuestra rutina, igual que haríamos con Arduino, pero incluyendo una parte de conexión WIFI y bloques de petición del servicio web. Una vez realizado el programa por bloques Tuniot nos genera un archivo para abrir con el IDE de Arduino de manera que podamos compilarlo y subirlo al microprocesador de la ESP8266 dentro de NodeMCU.
Preparando el IDE de Arduino para programar NodeMCU.
En el IDE de Arduino deberías seleccionar la placa que vas a usar, en este caso NodeMCU v1.0, pero es muy probable que no te aparezca disponible para seleccionar. Si intentas añadirla a través del gestor de tarjetas tampoco te va a aparecer en versiones recientes del IDE.
La solución es añadir la posibilidad de selección vía web. Esto sólo vas a tener que hacerlo una vez. Copia la siguiente dirección y pégala en el gestor de URLs adicionales de tarjetas, dentro de «preferencias» del IDE.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Ahora cuando vayas al gestor de tarjetas en «herramientas-placa» si que vas a tener disponible «esp8266 by ESP8266 Community». Selecciona e instala y a partir de ese momento NodeMCU v1.0 ya está disponible para que la selecciones en el listado de placas.
Conecta tu placa NodeMCU e intenta volcar el programa a la placa. Si te da error en la comunicación recuerda revisar que tengas bien seleccionado el puerto en «herramientas» . También puede ser que tu placa NodeMCU necesite de la instalación de algún driver para comunicar por USB, compruébalo en la información proporcionada por el fabricante.
Enviando alarma por correo electrónico.
Ha llegado el momento. Ya puedes comprobar si tu placa NodeMCU consigue enviar una alarma por correo electrónico y a partir de ahí mejorar y ampliar de un programa básico como el del ejemplo para llegar a controlar y avisar de los eventos que se te ocurran.
Si te interesa el internet de las cosas y NodeMCU pronto estarán presentes en la plataforma de cursos de Juegos Robótica.
El profe de tecnología.
Se da la casualidad de que el profe de tecnología que planteaba la consulta es un gran divulgador de ciencia. Te recomiendo seguir a Javier Fernández Panadero a través de su blog La Ciencia para todos.
Espero que puedas enviar tu propia alarma por correo electrónico, pero si tienes cualquier duda contacta y lo vemos.
Dani S.
Angel Francisco Trujillo says
Buenas tardes, tengo un problema al subirlo al esp8266, me da este error: espcomm_upload_mem failed.
Te agradeceria que me echases una mano. Un saludo.
Dani says
Hola Ángel,
¿Sólo te da ese error al hacer este proyecto? ¿Has podido subir otros programas a esa tarjeta?
Lo digo porque parece un error de comunicación. Si estás seguro de que todos los parámetros de comunicación son correctos y el puerto COM seleccionado es en el que realmente tienes conectada la tarjeta, sólo quedaría hacer un reset a la tarjeta cuando vayas a subir el programa. Si dispones de pulsador «flash» prueba a activarlo antes de la carga.
Saludos,
Dani
Angel Francisco Trujillo says
Muchas gracias Dani, todo resuelto, no se muy bien cómo lo he hecho, pero tenia dos archivos iguales, he borrado el más antiguo y me ha reconocido la placa. Muchas gracias.
Dani says
Genial! Me alegro que se haya solucionado.
Saludos!
Dani
Angel FranciscoTrujillo says
Hola Dani, estoy intentando hacer lo mismo incluyendo un modulo de gas y otro de fuego,pero nomeda resultados, podrias indicarme como hacerlo??.Muchisimas gracias.
Dani says
Hola Ángel,
El planteamiento sería el mismo pero cambiando la entrada si no vas a utilizar la analógica por una digital, o variando el valor límite, que dependerá de tus sensores.
Empieza consiguiendo que funcione cada sensor individualmente y finalmente implementas los dos juntos. Te aconsejo que a través del LED integrado visualices el estado del sensor, para estar seguro de que está detectando correctamente. Si verificas que detecta correctamente pero no se envía el correo habría que revisar la configuración del evento de correo, pero si no detecta correctamente hay que empezar por ahí.
Saludos,
Dani
Angel FranciscoTrujillo says
Gracias Dani
JOSE ARIZA says
HOLA!
COMO PODRÍA TOMAR EL EVENTO DE UNA ENTRADA DIGITAL? NO LA ANALOGICA
Dani says
Hola José,
Si lo dices utilizando el mismo sensor lo mejor sería adaptarlo a nivel de electrónica para asegurar que llega a alcanzar el nivel de entrada digital, aunque puede que conectado directamente llegue al nivel adecuado de tensión. Hay otro tipo de sensores de humedad que si son adecuados para entrada digital e incluyen un potenciómetro para calibrar.
Si lo dices por los bloques en el caso de digital se pone directamente el bloque de la entrada digital dentro del condicional sin necesidad de indicarle ningún comparador «<". Saludos, Dani
Jairo says
Hola Dani.
¿El módulo ESP 8266, me funciona conectandola a una placa ARDUINO UNO R3.?
¿Conoces un MBOT y haz hecho algunas cosas fucionando el ESP 8266 y el MBOT?
Dani says
Hola Jairo,
Efectivamente un ESP8266 se puede conectar a una placa Arduino para darle conectividad WiFi, y de la misma manera se puede conectar a mBot. Yo he conectado el módulo WiFi de mBot que realmente es un ESP8266.
Adaptando el conector con un el conector rj25 a dupont por ejemplo, no deberías tener problemas para conectarlo a mBot si quieres utilizar un ESP8266 genérico.
Saludos,
Dani
Jairo says
Gracias Dani. Voy a hacer pruebas y cualquier cosa te cuento.
Jairo says
No he podido subir ningún programa al ESP8266. He utilizado el cmd para clonar los archivos como lo indica la página principal del módulo, e instalado el phyton y demás, pero me aparece el siguiente error:
exec: «C:\\Users\\jairo\\OneDrive\\Documentos\\Arduino\\hardware\\esp8266com\\esp8266/tools/xtensa-lx106-elf/bin/xtensa-lx106-elf-g++»: file does not exist
Error compilando para la tarjeta Generic ESP8266 Module.
No se como agregarle esos archivos. Tengo Windows 10.
Si pudieras asesorarme te lo agradecería mucho.
Dani says
Hola Jairo,
Me temo que en este tema no te puedo ayudar. Para preparar tu ESP8266 deberías consultar la documentación del fabricante.
Johan says
Hola Dani, estoy intentando hacer el applet en ifttt y al probarlo me dice que ha ocurrido un error con el servicio de Gmail. Sabes que puede ser la causa. Gracias
Dani says
Hola Johan,
Algún usuario más me ha comentado lo mismo. No se si es un problema puntual o el servicio con gmail lo han pasado a premium. Yo lo volví a probar hace unos días y no tuve problema, la verdad.
¿Quizá pueda ser un problema de permisos en gmail y que sea externo a IFTTT?
Lamento no poder darte más ayuda. Si tienes alguna novedad comenta por favor.
Saludos
sergio says
Me pasa lo mismo que a el, habeis averiguado algo?
Dani says
Desgraciadamente Gmail ha retirado la integración con IFTTT por lo que no es posible realizar actualmente el envío de avisos por correo electrónico.
OLIVER says
Gracias por la información saludos de un estudiante de Perú. Me pareció muy interesante y practico la programación en bloques para el nodemcu
Dani says
Muchas gracias por tus palabras.
Ignacio Candia says
Hola
Tengo una duda… Si estoy utilizando un Sensor ultrasónico, los pasos serian los mismos para programar la Alarma?
Dani says
Hola Ignacio,
Básicamente los pasos serían los mismos, pero adaptando la señal que te hace de disparador al sensor ultrasónico.
Revisa si IFTTT continúa dando servicio con gmail porque al menos durante un tiempo no estuvo disponible, y esta entrada tiene ya algún tiempo.
Saludos
David says
Me parece muy buena.