Internet of Things (IoT) with a WIFI Module ESP8266 📡📲

- 6 mins

La idea general del proyecto es el presentar en general lo que es IoT, pasando por un contexto histórico, aplicaciones y casos reales de uso; concluyendo con el desarrollo de un mini-proyecto utilizando del módulo Wi-Fi ESP8266 para conexión con dispositivos y control de equipo electrónico, en este caso el estado de un LED.

La presente carpeta contiene una serie de scripts desarrollados para la presentación del proyecto final del curso. Dichos scripts son básicamente dos tipos de archivos: scripts de Arduino (.ino) y scripts de Python (.py).

El repo del proyecto: https://github.com/RodolfoFerro/ComputerNetworks17/tree/master/Proyecto%20Final

Programación del módulo WiFi

Para la programación del circuito, se utilizó directamente el IDE de Arduino. Además, es necesaria la instalación de las librerías del módulo, lo cualpuede hacerse siguiendo esta guía.

Diagrama del circuito

Un diagrama del circuito se muestra aproximación:

Como puede apreciarse, el módulo ESP8266 queda sobre una protoboard y el LED queda conectado al pin D7 (que es mapeado al 13 desde la parte programática) y al pin de tierra (GRD).

Scripts de arduino

Los scripts de Arduino están contenidos cada uno en su respectiva carpeta y son los siguientes:

El segundo código –el principal– imprime la dirección IP en la consola COMXX (donde XX es el puerto al que se conectó el módulo), que contiene el estado del LED y controles para cambiarlo, como se muestra en las siguienes imágenes, que son capturas de pantalla del navegador en la dirección ya mencionada:

Cabe mencionarse que ambos códigos del circuito se encuentran comentados para una mejor comprensión.

Integración inteligente (IoT style!)

Por su parte, los scripts de Python permiten aproximar de una manera distinta ––e inteligente–– el control del estado del LED, digamos de una manera más estilo IoT.

Requerimientos

Además de Python 3.6 (que es la versión que estoy utilizando), una serie de pquetes son requeridos, los cuales se enlistan a continuación:

La ventaja de todos estos paquetes es que son fácilmente instalables con pip, que es un gestor de paquetes de Python.

Así, la instalación de cada paquete puede hacerse así:

pip install <paquete>

Peeero… He creado un archivo de requermientos (requirements.txt) para que puedas instalar todos los requerimientos de un sólo comando. Esto lo haces así:

pip install -r requirements.txt

Además de esto, se requerirá un par de cosas extra:

Scripts de Python

Los scripts de Python contenidos en esta parte son los siguientes:

HTTP Requests (GET):

El primer script, turn_light.py, se corre de la siguiente manera:

python turn_light.py -u "http://192.168.x.x/" -s STATE

Donde STATE es el estado al que queremos cambiar el LED, digamos ON/OFF y el url debe ser especificado con el arrojado por la consola del puerto desde el IDE de Arduino.

Este script controla, como ya se mencionó, el estado del LED desde la terminal.

Telegram bot:

El segundo script, telegram_bot.py, requiere tener un script credentials.pycon el token del API que devuelve BotFather. Con ello, la manera de correr el bot es la siguiente:

python telegram_bot.py -u "http://192.168.x.x/"

Donde debe ponerse la dirección IP real obtenida por el dispositivo en la consola del IDE de Arduino.

Alexa Skill:

El tercer script, alexa_skill.py, hace mancuerna con ngrok, que es una aplicación para abrir túneles seguros al localhost.

Para el tercer script, se requerirán dos tabs/ventanas de la terminal, una para el servidor Flask que manipula la interacción con la aplicación de Alexa y la otra para crear el túnel que se sube al portal de desarrolladores de Amazon.

Para correr el tercer script en la primer ventana hacemos lo siguiente:

python alexa_skill.py -u "http://192.168.x.x/"

Donde debe ponerse la dirección IP real obtenida por el dispositivo en la consola del IDE de Arduino.

En la segunda ventana corremos ngrok abriendo el puerto 5000 del localhost (que es el default de Flask) como sigue:

ngrok http 5000

Debe mencionarse que en caso de que se haya modificado el puerto, este se pasa como argumento en consola a la hora de correr ngrok.

Esto abre el túnel creando un enlace seguro (https) parecido a este: https://xxxxxxxx.ngrok.io. Dicho enlace es el que se pasará al portal de desarrolladores de Amazon.

Probando la integración inteligente

Ya que se cuenta con todo el desarrollo hasta este punto, pueden probarse los scripts de integración inteligente.

Telegram bot:

Cuando el bot de Telegram se encuentre corriendo, puede iniciarse con el comando /start. Este arrojará un texto con dos botones para poder controlar el estado del LED.

Para reiniciar el bot (tras haber modificado el estado del LED) basta volver al usar el mismo comando, /start.

Alexa Skill:

Ya que la Alexa Skill se encuentra en línea, puede probarse directamente con los dispositivos Echo de Amazon (Dot, Plus, etc.) o utilizando el servicio de Echosim.io.

El comando para invocar al bot es:

––Alexa, open Light Turner please.

Tras ello, sólo basta resonder si queremos cambiar el estado del LED.

DEMO

Un demo del funcionamiento puede ser encontrado en el siguiente video:

Rodolfo Ferro

Rodolfo Ferro

With great power comes great responsibility.

comments powered by Disqus
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora