Vamos a crear un sistema IoT sencillo utilizando una placa basada en ESP8266, la plataforma Thingspeak para registrar los datos y la APP Blynk para controlar y monitorizar desde el móvil.
El objetivo es:
- Monitorizar la temperatura y humedad de una sala remotamente desde el móvil
- Encender desde el móvil la iluminación de la sala
- Registrar todos los datos históricos de temperatura y humedad
- Registrar las veces que se abre una puerta
- Mandar avisos por alta temperatura.
- Mandar avisos cuando el sensor de puerta se abra.
Los avisos o notificaciones pueden ser:
- En el panel: https://www.aprendiendoarduino.com/servicios/mensajes/index.html
- Enviar un Tweet
- Enviar un correo
- Enviar en mensaje a un canal de Telegram
- Enviar un mensaje al canal #arduino_iot de https://aprendiendoarduino.slack.com
- Y otros…
Material Necesario
Hardware:
- Wemos D1 mini
- Sensor DHT11
- Led + resistencia 220 ohms (para simular la iluminación) o Relé para la iluminación
- Pulsador + Resistencia 10 kohms (para simular la apertura de la puerta) o sensor magnético/infrarrojos.
Coste aproximado: 5 – 20 € dependiendo del material usado.
Software:
- Crear una cuenta en https://thingspeak.com/ (cuenta gratuita con limitaciones)
- Crear una cuenta en blynk https://blynk.io/ (cuenta gratuita con limitaciones)
- Instalar la APP https://blynk.io/ en el móvil
- IDE Arduino https://www.arduino.cc/en/Main/Software
Coste del software y licencias: 0 €
Conexión Hardware
Esquema de conexión:

Pines utilizados:
- D4: Led y también es el led integrado de la placa
- D3: pulsador/puerta, tiene una resistencia de pull up integrada: OJO, este pin va al GPIO0 que control el arranque, asegurarse de no estar a masa/pulsado al reiniciar o cargar un nuevo programa
- D2: sonda DHT11
El pulsador simula la apertura de la puerta y el led simula la iluminación de la sala.
Blynk
Blynk es una plataforma que permite que cualquiera pueda controlar fácilmente su proyecto Arduino con un dispositivo con sistema iOS o Android. Los usuarios tendrán ahora la posibilidad de crear una interfaz gráfica de usuario de “arrastrar y soltar” para su proyecto en cuestión de minutos y sin ningún gasto extra.
Blynk vendría a ser como tener una protoboard en tu dispositivo móvil, tablet o teléfono, que cuenta con todo lo que necesites usar, desde deslizadores y pantallas a gráficos y otros widgets funcionales que se pueden organizar en la pantalla un Arduino. Además te da la opción de poder recopilar datos de los sensores que montes en un proyecto. Funciona nada más sacarlo de la caja y conectarlo a la placa por Internet.
Arquitectura de Blynk:
Thingspeak
ThingSpeak es un plataforma de Internet of Things (IoT) que permite recoger y almacenar datos de sensores en la nube y desarrollar aplicaciones IoT. Thinkspeak también ofrece aplicaciones que permiten analizar y visualizar tus datos en MATLAB y actuar sobre los datos. Los datos de los sensores pueden ser enviados desde Arduino, Raspberry Pi, BeagleBone Black y otro HW.
Precios: https://thingspeak.com/prices

Pasos a seguir
Crear una cuenta en Thingspeak y configurar
Web: https://thingspeak.com/users/sign_up
Tutoriales:
- https://descubrearduino.com/thingspeak/
- http://sensors.egnite.de/en/network-sensors-and-data-loggers/support-and-service/querx-tutorials/querx-and-thingspeak/
Crear cuenta:
Crear un Nuevo Canal llamado: “Curso IoT”

Crear 3 Fields:
- Temperatura – Guarda los datos de temperatura
- Humedad – Guarda los datos de humedad
- Puerta – Guarda las aperturas de puerta

Guarda la API Key y el número de canal
Instalar Blynk
Getting Started: https://blynk.io/en/getting-started
Docs: https://docs.blynk.cc/
Instalar Blynk en el móvil: https://blynk.io/
- Android: https://play.google.com/store/apps/details?id=cc.blynk&hl=en_US
- iOS: https://apps.apple.com/us/app/blynk-iot-for-arduino-esp32/id808760481
Crear una cuenta en Blynk

Crear un nuevo proyecto llamado “IoT en 90 minutos”

Elegir Hardware, en este caso “Wemos D1 Mini”

Guardar el Auth Token. Auth Token es un identificador único que se necesita para conectar su hardware a su smartphone. Cada nuevo proyecto que cree tendrá su propio Auth Token. Obtendrá Auth Token automáticamente en su correo electrónico después de la creación del proyecto. También se puede copiar manualmente.

Añadir 3 widgets:
- Un botón (Conectado al Pin D4)
- Dos Gauge en los pines Virtuales V0 y V1 para temperatura y humedad
Virtual Pin: http://help.blynk.cc/en/articles/512061-what-is-virtual-pins
Configuración del Gauge:
- Temperatura pin virtual V0
- Humedad pin virtual V1
- Modo push
- Label: C para temperatura y % para Humedad

Configuración del Botón. poner en modo switch:

Aspecto final de la APP:

Ejecutar el programa

Preparar IDE Arduino
Instalar el IDE de Arduino:
- Descargar la última versión desde: https://www.arduino.cc/en/Main/Software
- Tutorial: https://aprendiendoarduino.wordpress.com/2018/04/03/instalacion-software-arduino-2/

Instalar el soporte para las placas basadas en ESP8266 en el IDE de Arduino
- Tutorial completo: https://www.aprendiendoarduino.com/2018/01/27/video-preparacion-ide-arduino-para-esp8266/
- Instalar driver de: https://wiki.wemos.cc/downloads
- Poner JSON en preferencias: http://arduino.esp8266.com/stable/package_esp8266com_index.json
- Instalar desde el Gestor de tarjetas el soporte para ESP8266.

Instalar librerías necesarias en IDE Arduino desde el gestor de librerías:
- Tutorial: https://aprendiendoarduino.wordpress.com/2017/06/20/librerias-arduino-3/
- Thingspeak by MathWorks https://github.com/mathworks/thingspeak-arduino
- Blynk by Volodymyr https://github.com/blynkkk/blynk-library
- SimpleDHT https://github.com/winlinvip/SimpleDHT
Realizar montaje de Wemos D1 mini

Personalizar el Firmware y Ejecutarlo
- Copiar el programa/firmware que va a ejecutar el Wemos D1 Mini en el IDE de Arduino: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/IoT_en_90_Minutos/IoT_en_90_Minutos.ino
- Crear un nuevo fichero Secrets2.h en el mismo directorio que el fichero de firmware: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/IoT_en_90_Minutos/secrets2.h, este fichero contiene las contraseñas para cada servicio y los datos de la wifi donde conecte el Wemos D1 mini
- Configurar el programa/firmware:
- SSID y password de la Wifi
- Thingspeak Channel Number y API Key
- Blynk Authtoken
- Cargar firmware y probar
Configurar la Vista Pública en Thingspeak
Crear una vista pública, para ello en el canal ir a “sharing” y seleccionar “Share channel view with everyone”

Configurar la vista pública de Thingspeak, es una especie de dashboard donde pondremos:
- Gráfica de Temperatura (Tipo Spline)
- Display numérico Temperatura
- Gráfica de Humedad (Tipo Spline)
- Display numérico Humedad
- Gráfica apertura de puerta (Tipo Step)
- Lamp Indicator, para ver el estado de la puerta abierto/cerrado
- Un histograma para ver la variación de la temperatura
La vista debe quedar como esta: https://thingspeak.com/channels/635134
Configurar las Notificaciones en Thingspeak
Configurar avisos en Thingspeak cuando la temperatura sea mayor de 24 grados y cuando se abra la puerta. Para ello usaremos estas utilidades de thingspeak.
- ThingHTTP: https://www.mathworks.com/help/thingspeak/thinghttp-app.html
- React: https://www.mathworks.com/help/thingspeak/react-app.html
Notificaciones posibles:
- Mandar un mensaje al panel: https://www.aprendiendoarduino.com/servicios/mensajes/index.html, servicio de #aprendiendoarduino para hacer una demo.
- Enviar un mensaje a Telegram mediante un bot al canal https://t.me/aprendiendoarduino. Para ello es necesario crear un bot, añadirlo al canal y usar su API KEY desde thingspeak con ThingHTTP
- Enviar un mensaje al canal #arduino_iot de https://aprendiendoarduino.slack.com/
- Mandar un tweet usando ThingTweet, para ello debemos enlazar nuestra cuenta de Twitter.
- Mandar un email con mailgun https://www.mailgun.com/, para ello debemos darnos de alta en mailgun y usar la API Key para que dispare el webhook configurado en ThingHTTP y mande un email
- Para cualquier otra interacción se puede usar IFTTT. Se crea un webhook que se usa desde ThingHTTP y desde IFTTT disparamos el servicio que queramos.
- Y cualquier otra que disponga de un webhook o API
Primero debe configurarse ThingHTTP para que llame a una API o webhook que dispare la notificación que deseamos. Para ello deberemos darnos de alta en el servicio que deseemos.
Para mandar un mensaje al panel: https://www.aprendiendoarduino.com/servicios/mensajes/index.html debo llamar a esta API:
Crear un nuevo ThingHTTP llamado “Manda Mensaje Alta Temperatura” y poner:
Crear un nuevo ThingHTTP llamado “Manda Mensaje Puerta Abierta” y poner:

NOTA: si no funciona la llamada al servicio de mensajes, mandar un correo a aprendiendoarduino@gmail.com
Una vez creados los elementos ThingHTTP que dispara la notificación queda crear los react, que son las condiciones en la que se disparan las notificaciones, donde diremos en qué condiciones se mandan las notificaciones. En nuestro caso:
- Temperatura > 24 grados solo la primera vez que pase (Run action only the first time the condition is met: Trigger the action if the condition was previously false and is currently true.)
- El valor del canal es 1 (Puerta abierta) cada vez que pase.
Crear un nuevo react llamado “Alta Temperatura IoT 90 minutos” con los siguientes parámetros:

Crear un nuevo react llamado “Puerta Abierta IoT 90 minutos” con los siguientes parámetros:

Probar que se muestran los mensajes en el panel https://www.aprendiendoarduino.com/servicios/mensajes/index.html
Si quisiéramos mandar un tweet, simplemente seleccionar en Action “ThingTweet” y poner el texto del tweet.
Identificación Horizontales Demo
Las horizontales o Building Blocks usados en IoT:

Para la demo:
- Devices: Wemos D1 mini + sensor temperatura + pulsador + led + relé
- Infraestructura de comunicación: Wifi
- Gateway: Punto de Acceso Wifi
- Protocolo: API HTTP y MQTT (transparente al usar las librerías de Blynk y Thingspeak)
- Plataforma: Thingspeak y Blynk
- Servicios: Almacenamiento de datos, gráficas, disparo de eventos y análisis de datos por Thingspeak, monitorización móvil por Blynk, notificaciones por IFTTT o plataforma propia.
Limitaciones de la solución utilizada:
- Máximo número de envíos a plataforma: 15 segundos
- Datos almacenados solo hasta un año o 3 millones de registros
- Límite en el cálculo de datos
- Gráficas simples
- Depender de terceros para las notificaciones
Pingback: Saber más de IoT 2019… | Aprendiendo Arduino
Pingback: Talleres y Charlas – Aprendiendo Arduino
Pingback: Talleres y Charlas | Aprendiendo Arduino
Muy buena explicación. Quisiera hacerte una consulta. Si tengo un dato en Blynk, ¿cómo lo llamo desde ThingSpeak? O sea, un sensor que utilizo me da una función tipo GET http://plaato.blynk.cc/auth_token/get/pin, y quiero llevarla hasta ThingSpeak.
Me gustaLe gusta a 1 persona
Hola, tienes que usar thinghttp https://www.mathworks.com/help/thingspeak/thinghttp-app.html y hacer disparos cada cierto tiempo usando time control https://www.mathworks.com/help/thingspeak/timecontrol-app.html
Me gustaLe gusta a 1 persona
Pingback: Ejercicio Básico LTE-M con Arduino MKR1500 | Aprendiendo Arduino