El material necesario para realizar este curso es:
1 PC o portátil con conexión a internet.
Software de virtualización instalado para ejecutar Node-RED. p.e. VirtualBox, VMWare Fusion o Docker.
Kit de 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.
Las Raspberry Pis se usarán como instancias de Node-RED y nodos centrales a los que se conectan los nodos remotos, por lo que no conectaremos sensores/actuadores/periféricos a las Raspberry Pi.
Nodos Remotos:
1x Wemos D1 min o NodeMCU o equivalente (M5Stick)
1x shields para wemos D1 mini relé o equivalente
1x shields para wemos D1 mini neopixel o equivalente
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/
Dispositivos Adicionales
Se podrán usar otros dispositivos para interactuar con ellos, tanto en el aula como en ubicaciones remotas.
Raspberry Pi Zero: Instalada en local con cámara y programada con Node-RED, usada como dispositivo remoto.
Raspberry Pi 3B: Instalada en remoto 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. El HW puede estar tanto en el aula como remotamente en su casa, oficina, etc…
Servicios Cloud para el Curso
Se usará un broker común para comunicar todos los dispositivos en las direcciones: mqtts://enriquecrespo.com:8883 y mqtts://aprendiendonodered.com:8883
Los alumnos recibirán usuario y contraseña para acceder al broker con permisos de lectura y escritura en aprendiendonodered/#
Base de datos MySQL en https://enriquecrespo.com/phpmyadmin/ donde los alumnos podrán usar para almacenar datos. Los alumnos recibirán las credenciales de acceso.
Base de datos InfluxDB en https://enriquecrespo.com:8086/ donde los alumnos podrán usar para almacenar datos. Los alumnos recibirán las credenciales de acceso.
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.
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.
Un Ordenador PC o portátil por alumno con al menos un puerto USB accesible
El PC de cada alumno deberá tener un sistema operativo instalado, ya sea un sistema Windows o un sistema Linux.
Acceso a Internet
Red Wifi
Espacio equipado con mobiliario adecuado al número de alumnos
Todo el software y documentación utilizado en el curso es libre con licencia creative commons o similar y publicado en https://www.aprendiendoarduino.com/
Listado de material orientativo para realizar las prácticas de cada itinerario por alumno: