En esta demo se va a ver la potencia de IoT con la combinación de varias tecnologías open source. Se usará Arduino y dispositivos compatibles con Arduino, Raspberry Pi, Node-RED y otras tecnologías como Telegram.
Además, esta demo pretende ser interactiva, es decir, que una vez vista esta demostración, cualquiera con las herramientas y código proporcionado y los elementos hardware descritos, podrán interactuar con la plataforma IoT de la demo.
Descripción de la Demo
Esta demo consiste en conectar múltiples dispositivos basados en Arduino de cualquier persona del mundo e interactuar con la plataforma IoT instalada en una Raspberry Pi, así como usar un grupo de Telegram para recibir avisos y alertas.
Para conectar todos los dispositivos basados en Arduino usaremos un broker MQTT público, en nuestro caso será MyQttHub https://myqtthub.com/, pero también podría usarse CloudMQTT https://www.cloudmqtt.com/.
Es imprescindible tener el usuario y contraseña del broker para interactuar, si no las tienes puedes pedirlas en aprendiendoarduino@gmail.com
Para saber más de MQTT puedes ver: https://aprendiendoarduino.wordpress.com/2018/11/19/mqtt/
Esta es la estructura que vamos a usar:
Cada dispositivo Arduino publicará en el broker MQTT un dato en un topic y en función del topic, la plataforma IoT basada en Node-Red y ejecutándose en una Raspberry Pi, realizará una serie de acciones.
Además usaremos el grupo de telegram https://t.me/aprendiendoarduinocursoarduino para la recepción de alertas e interactuar con un bot en los dispositivos conectados. Únete al grupo de telegram para interactuar.
Cada dispositivo basado en Arduino conectado a Internet (p.e. basado en ESP8266) se conecta al broker MQTT público mandando o recibiendo datos y esos datos son recibidos en la plataforma IoT basada en Node-RED, instalada en una Raspberry Pi en la sede central.
El dispositivo puede publicar datos en unos topics determinados que se leerán desde Node-RED y se ejecutarán una serie de acciones.
También el dispositivo se puede suscribir a unos topics determinados y leer los datos recibidos, así como ejecutar una serie de acciones en función de los datos recibidos.
Funcionalidades de la Demo
Los dispositivos basados en Arduino podrán hacer las siguientes acciones:
- Mandar mensajes de alerta. Por ejemplo la apertura de un detector magnético. Cuando se reciba, se mandará un mensaje al grupo de Telegram con el estado del sensor y quien lo manda y se visualizará en https://www.aprendiendoarduino.com/servicios/mensajes/index.html
- También se mandará una foto al grupo de Telegram cuando se reciba el mensaje de alerta.
- Mandar mensajes de temperatura y/o humedad. Estos datos se almacenarán en una BBDD y se visualizarán en el Dashboard de Node Red y en https://www.aprendiendoarduino.com/servicios/datos/graficas.html
- También se puede configurar una alerta para enviar a Telegram y al panel de mensajes, en caso que se supere una temperatura o humedad determinada.
- Recibir mensaje de encendido o apagado del led integrado de Arduino
Para visualizar e interactuar se dispone de:
- Grupo de Telegram
- Dashboard de Node-RED, que solo se visualiza en local donde esté instalado
- Gráficas
- Alertas
Estructura de topics
Para poder interactuar con la plataforma los mensajes se deben mandar con una estructura de topic concreta:
- demo/temperatura/Z – envía un dato numérico de temperatura
- demo/humedad/Z – envía un dato numérico de humedad
- demo/reset/Z – envía un mensaje de reset al reinicarse
- demo/alerta/xx – envía un texto de alarma
- demo/led/xx – envía un dato ON/OFF para el estado del LED
Siendo xx un identificador del nodo que puede ser un nombre o un número y siendo Z un número del 2 al 20 para identificar la gráfica donde visualizar los datos en https://www.aprendiendoarduino.com/servicios/datos/graficas.html.
Elementos de Hardware Usado
Hardware Nodos Remotos
- Placa compatible con Arduino con conexión a Internet. Placas recomendadas:
- wemos D1 mini https://www.amazon.es/AZDelivery-D1-Mini-desarrollo-compatible/dp/B0754W6Z2F
- Node MCU: https://tienda.bricogeek.com/wifi/1033-nodemcu-v3-esp8266.html
- Arduino Uno + Ethernet shield: https://store.arduino.cc/arduino-ethernet-shield-2
- M5Stack o M5StickC: https://m5stack.com/
- Protoboard
- Pulsador o sensor magnético
- Sensor de temperatura. Recomendados:
- DHT11 o DHT22
- DS18B20
Hardware Nodo Central
Raspberry Pi 3 Model B o superior: https://www.raspberrypi.org/products/raspberry-pi-3-model-b/. Esta Raspberry Pi tiene instalado Node-RED donde se ejecutará la plataforma y la programación IoT.
Para la fotos una Raspberry Pi conectada a Internet con cámara. Por ejemplo, unas Raspberry Pi Zero W con cámara
Adicionalmente un M5stack para visualizar datos en la pantalla y controlar dispositivos con los botones.
Código Usado
Todo el código usado en la demo está disponible en el repositorio: https://github.com/jecrespo/demo-iot
Interactúa con la Plataforma
Como ejercicio, puedes interactuar con la plataforma y ser parte de la demos
Para la interacción con la demo necesitarás:
- Conectar un dispositivo basado en Arduino a Internet
- Cargar la plantilla https://github.com/jecrespo/demo-iot/blob/master/plantilla-arduino/plantilla-arduino.ino adaptandola al HW utilizado
- Mandar mensajes al broker MQTT público de MyQTTHub usado en la demo. Para ello necesita un usuario y contraseña, solicitalo en aprendiendoarduino@gmail.com
- Enviar mensajes de temperatura y/o humedad
- Enviar mensajes de alerta, p.e. puerta abierta
- Recibir mensajes de encendido/apagado
Para poder interactuar con la plataforma los mensajes se deben mandar con una estructura de topic concreta:
- demo/temperatura/Z – envía un dato numérico de temperatura
- demo/humedad/Z – envía un dato numérico de humedad
- demo/reset/Z – envía un mensaje de reset al reinicarse
- demo/alerta/xx – envía un texto de alarma
- demo/led/xx – envía un dato ON/OFF para el estado del LED
Siendo xx un identificador del nodo que puede ser un nombre o un número y siendo Z un número del 2 al 20.
Los mensajes de alarma se publicarán en el grupo de Telegram https://t.me/aprendiendoarduinocursoarduino