Para el curso on-line “Node-RED Developer Nivel 1”, el material necesario por parte de los alumnos para realizarlo es:
1 PC o Portátil con conexión a internet.
Para seguir el curso on-line es recomendable dos pantallas, una para seguir el vídeo y otra para programar en Node-RED.
Una cuenta en github o bitbucket.
Opcionalmente software de virtualización instalado para ejecutar Node-RED. p.e. VirtualBox, VMWare Fusion o Docker.
Opcionalmente una Raspberry Pi conectada a Internet. Estas Raspberry Pi podrían ser proporcionadas por el Think TIC y configurarlas para acceso remoto desde casa del alumno a los dispositivos ubicados en el Think TIC.
Opcionalmente los alumnos con dispositivos IoT podrían conectarse e interactuar con ellos.
Todo el software y documentación utilizado en el curso es libre con licencia creative commons o similar.
Toda la documentación generada para la impartición de este curso será liberada con licencia Creative Commons y podrá ser utilizada bajo sus términos. La documentación estará disponible en https://www.aprendiendoarduino.com/
Entorno On-Line de Prácticas
Arquitectura
Se dispone de tres servidores:
enriquecrespo.com (S.O. CentOS 8)
Mosquitto
Grafana
Docker
Otros servicios públicos
aprendiendoarduino.com
Documentación curso con WordPress
BBDD MySQL públicas
Servidor cloud con las siguientes características:
1 vCPU
2 GB RAM
20 GB SSD
Node-RED
Cada alumno debe tener al menos una instancia de Node-RED instalada en el S.O. o virtualización que desee.
Opcionalmente se puede proporcionar una instancia en enriquecrespo.com. El usuario y contraseña se enviará por correo.
Broker MQTT. Mosquitto
Se usará un broker común para comunicar todos los dispositivos en la dirección: mqtt://enriquecrespo.com:1883
Los alumnos recibirán usuario y contraseña para acceder al broker con permisos de lectura y escritura en aprendiendonodered21/#
Opcionalmente hay una dirección de MQTT seguro en: mqtts://enriquecrespo.com:8883 y MQTT sobre websocket en ws://enriquecrespo.com:9001
Servicios
Base de datos MySQL en https://qaej225.aprendiendoarduino.com/ donde los alumnos podrán usar para almacenar datos. Recibirán por correo las credenciales de acceso.
Grupo de telegram para comunicarse y programar bots.
Hardware Usado para Interactuar
Para interactuar en el curso disponemos de diversos HW conectados.
Raspberry Pi Zero: Instalada en local con cámara y programada con Node-RED, usada como dispositivo remoto.
Raspberry Pi 3B: Instalada en local con Node-RED, Mosquitto y BBDD, usada como servidor.
Wibeee instalado y publicando datos.
Si el alumno tiene algún HW con que quiera interactuar, puede presentarlo y lo integramos en las prácticas.
Configuración de las Instancias de Node-RED Alumnos
Las instancias de Node-RED de los alumnos están desplegadas con Docker y con configuración personalizada y una serie de configuraciones adicionales ya hechas.
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
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 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.
Cada módulo M5StickC programable se conecta a los HATs del Rover y el JoyStick. Lo que vamos a programar con los M5StickC.
RoverC es una base de robot móvil omnidireccional programable compatible con M5stickC, y puede iniciarse insertando el M5stickC. El controlador principal de la base es el microcontrolador stm32f030f4. La base viene con motores de engranaje helicoidal N20 que son accionados directamente por un controlador de motor de cuatro canales. Estos motores están conectados a ruedas mecanum que pueden moverse en todas las direcciones. Además, se proporcionan dos puertos I2C compatibles con grove para facilitar la expansión de otros módulos. La base también es compatible con los bloques de LEGO y puede expandirse en su estructura. Se instala una batería 16340 en la parte posterior de la base para cumplir con los requisitos de potencia y resistencia del automóvil y se puede controlar mediante un interruptor independiente.
I2C Address 0x38
Para moverlo:
Antes de usar, asegúrese de que el RoverC está completamente cargado. Método de carga: inserte m5stickc en el roverc y conecte el cable USB para cargar.
JoyC es un módulo basculante diseñado para el M5StickC. Admite la operación con las dos manos. Chip de control principal STM32F030F4 integrado, que utiliza el protocolo de comunicación I2C y el host M5StickC para la transmisión de datos. El rango del joystick es 0 ~ 200, hay 12 LED RGB debajo de los joysticks izquierdo y derecho, y la parte inferior del joystick está equipada con una base de batería 16340 para una vida útil continua de la batería.
I2C Address 0x38
Como vamos a programar con UIFLow, lo primero es cargar el firmware de UIFlow con el M5Burner, que puede descargarse en: https://m5stack.com/pages/download. Cargar en ambos M5StickC.
ESP-NOW es un protocolo de comunicación de corto alcance y baja potencia que permite que múltiples dispositivos se comuniquen sin Wi-Fi. Este protocolo es similar a la conexión inalámbrica de 2,4 GHz de baja potencia que se encuentra en los ratones inalámbricos: los dispositivos se emparejan antes de comunicarse. Después del emparejamiento, las conexiones entre dispositivos son continuas, de igual a igual, y no requieren un protocolo de protocolo de enlace.
Para emparejar ambos dispositivos necesito saber su dirección.
Uso un M5Stack que recibe los datos y los muestra por pantalla
Los datos que mando son: Velocidad, Dirección y Ángulo, añadiendo el caracter V, D o A delante del valor.
Solo mando el valor si cambia más de 5 unidades sobre el valor anteriormente enviado. Ahorrando el envío de datos y mejorando la experiencia con el Joystick
Si el valor del Joystick es menor de 30 lo dejo en 0, porque sino los motores apenas se mueven y hace ruido.
Uso en cada receptor un contador para saber cuantos mensajes llegan
El M5Stick del rover lee el dato recibido, analiza si es Velocidad, Dirección y Ángulo y aplica el valor a los motores del rover.
BugC es una base de robot programable compatible con el M5StickC. Esto tiene cuatro motores de CC, controlador de motor, dos LED RGB, soporte de batería y un interruptor. La base Bugc debe usarse junto con el controlador M5StickC. La base viene con un microcontrolador STM32F030F4 que controla todos los motores y LED y esto es controlado a través del protocolo I2C (0x38) por el M5StickC que se encuentra en la parte superior de la base.
En caso que no nos reconozca el puerto serie M5Burner, habrá que instalar el driver como hemos hablado anteriormente desde: https://m5stack.com/pages/download
A la hora de cargar el firmware, seleccionar la versión de UIFlow que se va a usar en http://flow.m5stack.com/ y en caso que no aparezca resaltada, descargarla.
Luego seleccionar el puerto serie y el modelo de M5Stack que vamos a usar y por último configurar la wifi a la que se va a conectar para programar on-line.
Y pulsar el botón burn, si da fallo probar a reducir el baudrate por defecto o borrar la flash con el botón erase.
En caso que no se haya configurado la wifi o no esté disponible la wifi, el M5Stack se configura como un AP Hotspot donde abre una red wifi a la que me puedo conectar y entrar a la web para configurar la wifi.
Modo Programación en Red
El modo de programación de red es un modo de acoplamiento entre el dispositivo M5Stack y la plataforma de programación web UIFlow. La pantalla mostrará el estado actual de la conexión de red del dispositivo. Cuando el indicador está en verde, significa que puede recibir un programa push en cualquier momento. Después de la primera configuración exitosa de la red WiFi, el dispositivo se reiniciará automáticamente e ingresará al modo de programación de red.
Una vez que el M5Stack tiene cargado el firmware y se inicia, se conectará a la wifi configurada y nos mostrará en pantalla el API KEY:
Una vez conectado y con el icono en verde, ya puedo entrar en http://flow.m5stack.com/ y emparejar el dispositivo M5 para programarlo. Para ello debo indicar el APIKEY y el dispositivo.
Una vez hecho esto ya se puede comenzar a programar con UIFlow. Lo siguiente le mostrará un programa simple para manejar M5StickC.
Para encender el indicador LED:
Arrastre el LED para iluminar el bloque de programa.
Empalme con el programa de inicialización de configuración.
Haga clic en el botón Ejecutar en la esquina superior derecha
Modo Programación USB
UIFlow Desktop IDE es una versión offline del programador UIFlow que no requiere conexión de red y puede ser una alternativa en caso de no tener acceso a Internet o una conexión lenta . Haga clic en la versión correspondiente de UIFlow-Desktop-IDE para descargar de acuerdo con su sistema operativo en https://m5stack.com/pages/download
Una vez instalado, detectará automáticamente si su ordenador tiene un controlador USB (CP210X), haga clic en Instalar y siga las instrucciones para finalizar la instalación. M5StickC no requiere un controlador CP210X, por lo que los usuarios pueden elegir instalar u omitir.
Cuando se inicie la aplicación, ya podemos conectar nuestro dispositivo M5
Para poder programar como USB, debemos entrar en modo USB, para ello: Haga clic en el botón de encendido en el lado izquierdo del dispositivo para reiniciar. Seleccione rápidamente Configuración después de ingresar al menú, ingrese a la página de configuración y seleccione el modo USB.
Y por último seleccionar el puerto serie y el dispositivo en el programa para empezar a usarlo.
Independientemente si usamos la versión online o la versión offline, la programación es igual.
El entorno de programación se compone de 5 partes principales:
Coding Area: Arrastre los bloques de código de la lista de bloques al área de codificación y conéctelos para crear un programa
Barra de menús: La barra de menú contiene la mayoría de las funciones importantes de la interfaz, como (Ejemplo,Deshacer y rehacer, cargar, ejecutar código, descargar código, guardar código, etc.
Blockly/Python: Todo el código que creamos en bloques se puede convertir a Python presionando este interruptor
Diseñador de UI: Arrastre los elementos de la interfaz de usuario (título, etiqueta, etc.) hacia la pantalla de para diseñar un avatar o interfaz de interfaz de usuario.
Unidades: Las unidades son sensores y actuadores que se pueden conectar y aquí es donde los configuramos.
Funciones de los botones:
Programación con Blockly:
Programación Básica
Para la programación vamos a usar estas tres documentaciones oficiales:
Setup: Cuando abra UIFlow, encontrará que ya hay un bloque de Configuración al principio. Cada programa debe tener un bloque de configuración. El programa se ejecuta desde el bloque de Configuración y solo se ejecutará una vez. Puedes considerarlo como un bloque de inicialización del programa
Loop: Loop es un bloque de bucle infinito. Cuando se ejecuta, ejecutará el programa contenido en el bloque indefinidamente hasta que ocurra algún evento que lo detenga, por ejemplo un reset o apagado. No tiene que existir en el programa, pero para que el programa ejecute funciones cíclicas debe usarse.
¿Cuál es la diferencia entre ejecutar y descargar un programa? El botón de reproducción coloca nuestro código en la memoria volátil de su M5stack. Lo que significa que se perderá una vez que apague el M5stack. Sin embargo, la función de descarga almacenará su programa en la memoria flash de su dispositivo que no se borrará al reiniciar. Cada vez que enciende el M5stack después de descargar un programa, ese programa se ejecutará automáticamente, y también puede seleccionarlo de la lista de aplicaciones a la que se accede presionando el botón central al iniciar.
Ejecutar un programa: Una vez que haya terminado de programar, presione el botón de reproducción en la esquina superior derecha para ejecutar su código.
Descargar un programa: almacenará su programa en la memoria flash de su dispositivo que no se borrará al reiniciar.
La aplicación grabada se podrá seleccionar desde el menú de aplicaciones del dispositivo M5 y se ejecutará en el inicio cada vez que se resetee. Para volver al entorno de programación y cambiar el programa, si tengo una aplicacion en modo permanente, reiniciar y pulsar el botón mientras arranca para entrar en modo programación cloud o USB.
Unidades y HATs
La unidad o HAT es un módulo hardware de expansión de funciones proporcionado por el sistema M5. Estas deben conectarse al módulo M5 antes de programarlas.
Los módulos y faces de M5Stack ya aparecen automáticamente al seleccionar el HW Core.
Las unidades deben se añadidas en UIFlow para que aparezcan sus bloques de programación. Haga clic en la opción Units debajo del Simulador de UI, marque el módulo de Unidad que desea agregar y haga clic en Aceptar. Algunas unidades tienen configuraciones iniciales de parámetros.
Las funciones son una herramienta que nos ayuda a envolver nuestro código en un paquete ordenado al que podemos asignarle un nombre, y luego llamarlo en cualquier parte de nuestro programa y ejecutará el código que contiene. Las funciones pueden ayudar a mantener nuestro código ordenado y conciso y evitar repetir las mismas cosas una y otra vez.
Haga clic en la opción Agregar en Parámetro, agregue una propiedad del programa, ingrese el nombre que se muestra en el bloque y seleccione el tipo de propiedad. Ingrese el código contenido en el bloque personalizado en el cuadro de opción Código de bloque.
El M5Stack ofrece una serie de dispositivos para hacer desarrollos sobre la plataforma ESP32 (compatible con Arduino).
El M5Stack es un dispositivo de tamaño mínimo, que cuenta con una carcasa, un display a color de dos pulgadas, conectividad usb-c para su programación y alimentación (también cuenta con una conexión de batería), conectividad I2C y un montón de puertos GPIO para conectarle todo tipo de dispositivos. Dispone de numerosas opciones de conectividad y posibilidades de desarrollo.
También cuenta con tres botones programables, un altavoz de 1W, la pantalla LED a color y con resolución 320 x 240, un zócalo para agregar una tarjeta de memoria, conector para baterías LiPo de hasta 2A y muchas otras opciones, como una base con imanes para poder dejarlo colgado de la nevera o en la pared o contar con un acelerómetro y giroscopio. Para mayor compatibilidad con todo tipo de sensores y actuadores M5Stack tiene conectividad a 3,3 y 5 V. El diseño es modular, de forma que en su parte inferior podremos conectarle distintos elementos como placas de desarrollo, sensores, baterías, etc.
Otros aspecto importante, es la interfaz de desarrollo de aplicaciones gráfica al estilo de Scratch en http://flow.m5stack.com/ que más adelante trataremos.
M5Stack no solo es el hardware inicial que apareció, sino que hay muchos dispositivos, hats y módulos de la familia M5Stack. A estos módulos se les denomina M5Core.
Para empezar con los dispositivos de la familia M5Stack lo primero conectar al ordenador. Todos ellos tienen interfaz USB-C y es necesario instalar el driver
Antes de grabar el programa, los usuarios de M5Core (incluidos BASIC / GREY / M5GO / FIRE / FACES) deben descargar el driver CP210X correspondiente según el sistema operativo que estén utilizando.
El soporte de la serie M5StickC/V/T/ATOM se puede utilizar sin driver, los usuarios pueden omitir este paso de instalación del controlador.
EasyLoader es un programador simple y rápido, que tiene un programa de demo incorporado relacionado con el producto a programar. Se puede grabar para realizar una serie de verificación de funciones del módulo.
Es un dispositivo modular, apilable, escalable y portátil que funciona con un núcleo ESP-32, lo que lo hace de código abierto, de bajo costo, con todas las funciones y fácil para que los desarrolladores manejen el desarrollo de nuevos productos en todas las etapas.
M5Stack Basic consta de dos partes separables. La parte positiva tiene todo tipo de procesadores, chips y algunos otros componentes de ranura. La parte inferior tiene una batería de litio, toma M-BUS y clavijas extensibles en ambos lados.
El M5Stick-C es un mini M5Stack, basado en el microcontrolador ESP32. Es una placa de desarrollo de IoT portátil, fácil de usar y de código abierto. Además es muy económica costando menos de 10$.
M5StickC es una tarjeta de desarrollo ESP32 con una pantalla a color de 0.96 pulgadas TFT (resolución 80×160), LED rojo, 2x botones, Micrófono, transmisor IR, IMU de 6-ejes (SH200Q) y una batería de 80 mAh. El módulo ESP32 ESP32-Pico en el M5StickC tiene incluído 4MB de memoria flash. EL M5StickC también está equipado con una base y una correa para reloj, para que lo puedas usar en tu muñeca como un wearable.
Este pequeño bloque es capaz de realizar tu idea, iluminar tu creatividad, y ayudar con tu prototipo de IoT en muy poco tiempo. Eliminará muchos de los problemas del proceso de desarrollo.
M5stickC es uno de los dispositivos principales de la serie de productos M5Stack, que se construye en un ecosistema de hardware y software en continuo crecimiento. Tiene una gran cantidad de módulos y unidades compatibles, así como la comunidad de código abierto y de ingeniería que le ayudará a maximizar su beneficio en cada paso del proceso de desarrollo.
M5StickC usa un chip USB FTDI por lo que no hace falta instalar driver en Windows, Linux y MAC. En caso de necesitarlo, el driver es: https://www.ftdichip.com/Drivers/VCP.htm.