Archivo de la categoría: Práctica

Ejercicio Avanzado LTE-M con Arduino MKR1500

Experimento avanzado: sobre la base del experimento básico, conectar una entrada digital para mandar órdenes remotas (pulsador) y dos salidas digitales (leds rojo y Amarillo) para recibir órdenes remotas en base a unas alarmas, mediante una plataforma IoT propia diseñada y programada con Node-RED.

De forma más avanzada usando una plataforma IoT desarrollada con Node-RED, permite más acciones y personalización, así como publicar los datos en una web pública accesible.

Se capturarán los datos de los sensores de temperatura, humedad e iluminación y se almacenarán en una Base de Datos InfluxDB: https://aprendiendonodered.com:8086

El stream de datos se analizará en tiempo real y se generarán unas alertas cuando se superen los siguientes umbrales:

  • Temperatura > 22 ºC
  • Iluminación < 500

Se programará la lógica, de forma que cuando la iluminación sea baja, se encenderá el led amarillo y cuando la temperatura sea alta se encenderá el led rojo, según los umbrales definidos anteriormente.

Además se mostrarán en el dashboard de la plataforma IoT desarrollada por los alumnos los siguientes datos:

  • Gauge y gráfica últimos 30 minutos temperatura
  • Gauge y gráfica últimos 30 minutos humedad
  • Gauge y gráfica últimos 30 minutos iluminación
  • Estado de los leds
  • Contador con el número de veces que se pulsa el pulsador y un reset de contador.
  • Estado del dispositivo
  • Un switch para encender y apagar el led integrado

Ejemplo de ejercicio IoT con redes 5G, usando Arduino MKR1500 que tiene conectividad LTE-M.

Para el curso, usaremos esta tarjeta IoT https://1nce.com/en-us/1nce-connect que tiene activado para España tanto LTE-M como NB-IoT. Es imprescindible que cada alumno que asista al curso tenga una tarjeta de este tipo. Es posible comprar esta tarjeta en https://shop.1nce.com/portal/shop/ y tarda aprox. 5 días en llegar.

Repositorio: https://github.com/jecrespo/fundamentos-iot-5g 

Cargar el código: https://github.com/jecrespo/fundamentos-iot-5g/blob/main/Experimento-Avanzado-NodeRED/Experimeto-Basico-MQTT.ino

Repositorio Node-RED: https://github.com/aprendiendonodered/EJERCICIO33_IOT_5G 

Material para la práctica:

  • 1x Arduino MKR NB 1500
  • 1x tarjeta micro-sim de operador con red LTE-M con datos habilitados.
  • 1 Breadboard/protoboard 400 points
  • Un kit de 20 cables jumpers macho/macho
  • Un sensor de temperatura DHT-22 o ds18b20 o Temperature sensor [TMP36]
  • 1 Photoresistor [VT90N2 LDR]
  • 2 LEDs (red)
  • 1 Pushbutton
  • 5 Resistors 220 Ohms
  • 1 Resistor 10 KOhms

Alternativamente puede usarse uno de estos kits de Arduino:

Esquema de conexión:

Ejemplo de código de Node-RED:

El interfaz diseñado debe ser similar a este:

Guardar en la BBDD influxdb https://aprendiendonodered.com:8086 todo lo que se publique en cursomqtt/<ID_DISPOSITIVO>/# poniendo la tag del topic.

Anuncio publicitario

Ejercicio Básico LTE-M con Arduino MKR1500

Experimento básico 5G: Conexión a red LTE-M mediante un Arduino MKR NB 1500 y envío de al menos dos parámetros ambientales de sensores conectados, mediante API REST y MQTT a la plataforma https://thingspeak.com/, configuración de un dashboard y almacenado de datos históricos.

Ejemplo de ejercicio IoT con redes 5G, usando Arduino MKR1500 que tiene conectividad LTE-M.

Para el curso, usaremos esta tarjeta IoT https://1nce.com/en-us/1nce-connect que tiene activado para España tanto LTE-M como NB-IoT. Es imprescindible que cada alumno que asista al curso tenga una tarjeta de este tipo. Es posible comprar esta tarjeta en https://shop.1nce.com/portal/shop/ y tarda aprox. 5 días en llegar.

Repositorio: https://github.com/jecrespo/fundamentos-iot-5g 

Material para la práctica:

  • 1x Arduino MKR NB 1500
  • 1x tarjeta micro-sim de operador con red LTE-M con datos habilitados.
  • 1 Breadboard/protoboard 400 points
  • Un kit de 20 cables jumpers macho/macho
  • Un sensor de temperatura DHT-22 o ds18b20 o Temperature sensor [TMP36]
  • 1 Photoresistor [VT90N2 LDR]
  • 2 LEDs (red)
  • 1 Pushbutton
  • 5 Resistors 220 Ohms
  • 1 Resistor 10 KOhms

Alternativamente puede usarse uno de estos kits de Arduino:

Esquema de conexión:

Abrirse una cuenta gratuita en https://thingspeak.com/

Usaremos Arduino MKR NB 1500 que tiene conectividad LTE-M. La práctica tiene como objetivo que los alumnos puedan observar una experiencia con conectividad, «subir» datos y observarlos en un  dashboard y luego con esos datos activar por ejemplo una alarma (que representaría encendiendo un led).

Tareas previas en la plataforma https://thingspeak.com/

  • Abrirse una cuenta gratuita en https://thingspeak.com/
  • Crear un nuevo Canal llamado “curso_iot”
  • En Channel Settings, apuntar el el Channel ID
  • En Channel Settings, crear 3 fields: Temperatura, Humedad e Iluminación
  • En Api Keys, apuntar el Write API Key

Cargar el programa: https://github.com/jecrespo/fundamentos-iot-5g/blob/main/Experimeto-Basico-ThingSpeak/Experimeto-Basico-ThingSpeak.ino 

Instalar la librería de ThingSpeak en Arduino: https://www.arduinolibraries.info/libraries/thing-speak 

Más información:

Si el uso de este código da error -301, significa que no responde el servidor, en ese caso usar conexión MQTT.

Cargar el código: https://github.com/jecrespo/fundamentos-iot-5g/blob/main/Experimeto-Basico-MQTT/Experimeto-Basico-MQTT.ino 

Comprobar con MQTT Explorer: 

  • cursomqtt/<ID_DISPOSITIVO>/status – Estado del dispositivo (OK conectado. KO desconectado)
  • cursomqtt/<ID_DISPOSITIVO>/temperatura – Temperatura del sensor DHT22
  • cursomqtt/<ID_DISPOSITIVO>/humedad – Humedad del sensor DHT22
  • cursomqtt/<ID_DISPOSITIVO>/iluminación – Iluminación del sensor LDR
  • cursomqtt/<ID_DISPOSITIVO>/pulsador – un mensaje por cada vez que se pulsa 

Interactúa con los leds publicando ON/OFF en estos topics:

  • cursomqtt/<ID_DISPOSITIVO>/ledbuiltin
  • cursomqtt/<ID_DISPOSITIVO>/ledrojo
  • cursomqtt/<ID_DISPOSITIVO>/ledamarillo

Adicionalmente, interactuar con el experimento usando el protocolo MQTT y la app https://www.iot-onoff.com/ 

Instalar la app: https://play.google.com/store/apps/details?id=goliath.mobile.device.iotonoff

En configuración en la sección “Broker Server”, poner los datos del broker MQTT que estamos usando y comprobar que conecta correctamente.

Crear un dashboard con los siguientes elementos asociados a los topics:

  • Un value con nombre “temperatura” y suscrito al topic cursomqtt/<ID_DISPOSITIVO>/temperatura – para visualizar la temperatura del sensor DHT22
  • Un value con nombre “humedad” y suscrito al topic cursomqtt/<ID_DISPOSITIVO>/humedad – para visualizar la humedad del sensor DHT22
  • Un graph con nombre “iluminacion” y suscrito al topic cursomqtt/<ID_DISPOSITIVO>/iluminacion – para seguir la ilumincación del sensor LDR
  • Un switch con nombre “led rojo” que publique ON y OFF y esté suscrito al topic cursomqtt/<ID_DISPOSITIVO>/ledrojo – para controlar el estado del led rojo
  • Un switch con nombre “led amarillo” que publique ON y OFF y esté suscrito al topic cursomqtt/<ID_DISPOSITIVO>/ledamarillo – para controlar el estado del led amarillo
  • Un led con nombre “estado” que esté suscrito al topic cursomqtt/<ID_DISPOSITIVO>/status y muestre en rojo si recibe un OFF y verde si recibe un ON
  • Un texto con nombre “pulsador” que esté suscrito al topic cursomqtt/<ID_DISPOSITIVO>/status y muestre por texto cada vez que se pulse el pulsador. 

El Dashboard quedará como:

Finalmente comprobar que puedes interactuar con la maqueta desde el móvil.

Paso a Paso: Instalar y Configurar Raspberry Pi OS

Paso 1: Instalación de Raspberry Pi OS con Raspberry Pi Imager

Descargar Raspberry Pi Imager: https://www.raspberrypi.org/software/

Instalar Raspberry Pi Imager y conectar un lector de tarjetas SD. Coloque la tarjeta SD que usará con su Raspberry Pi en el lector y ejecute Raspberry Pi Imager.

Seleccionar Raspberry Pi OS (64-bit) y la SD card.

Pulsar en la rueda dentada y configurar:

  • Hostname
  • Habilitar SSH
  • Configurar el usuario y contraseña (usuario pi por defecto)
  • Configurar la wifi (WLAN country: ES)
  • Configurar locales (Europe/Madrid y keyboard: es)

Paso 2: Encontrar la IP de Raspberry Pi

Una vez instalado, habrá que localizar la IP de nuestra Raspberry Pi para conectarnos a ella.

Si en nuestra red funciona mDNS, será tan sencillo como lanzar el comando desde un PC en la misma red de Raspberry Pi: ping {nombre-hostname}.local

Si este método no funciona, revisar este tutorial de como encontrar tu IP: https://www.raspberrypi.com/documentation/computers/remote-access.html#ip-address, revisando el router, usando el comando nmap (escanear redes) u otro software de escaneo de redes.

Si nada de eso funciona, conectar a la Raspberry Pi un monitor y un teclado y ejecutar el comando ifconfig.

Paso 3: Conectar por SSH y Configurar la Conexión en PuTTY o similar

Una vez tenemos la IP de nuestra Raspberry Pi, podemos conectarnos por SSH: https://www.raspberrypi.com/documentation/computers/remote-access.html#secure-shell-from-linux-or-mac-os

Usar el comando: ssh pi@<IP>

Puede usar SSH para conectarse a su Raspberry Pi desde Windows 10 que usa la actualización de octubre de 2018 o posterior sin tener que usar clientes de terceros.

Conectar mediante SSH en Windows 10: ssh -l pi 192.168.6.xx

En caso de no funcionar, instalar en windows PuTTY: https://www.putty.org/ 

Paso 4: Actualizar Raspberry Pi

Conectarse por SSH con el usuario por defecto: pi y la contraseña por defecto: raspberry o la contraseña configurada.

Lo primero una vez nos conectemos es actualizar el sistema con:

  • sudo apt update
  • sudo apt upgrade

Paso 5: Activar VNC

Una vez dentro de la consola habilitar VNC (ya viene preinstalado) para conectarse al escritorio y continuar con la instalación desde el escritorio remoto: https://www.raspberrypi.com/documentation/computers/remote-access.html#enabling-the-vnc-server

  • ejecutar: sudo raspi-config
  • Navegar hasta Interfacing Options
  • Buscar y seleccionar VNC › Yes.

Paso 6: Instalar VNC Viewer y conectarse Raspberry Pi

Ahora ya nos podremos conectar por VNC desde nuestro ordenador.

Descargar e instalar VNC Viewer y conectarse a Raspberry Pi.

Descargar en https://www.realvnc.com/es/connect/download/viewer/ 

Darse de alta en https://www.realvnc.com/es/connect/ para acceder por VNC sin estar conectado a la misma red que la Raspberry Pi.

Configurar el acceso remoto en Raspberry Pi en el icono de VNC server e introducir el usuario y contraseña de realvnc.com creada anteriormente.

Paso 7: Acabar de configurar Raspberry Pi

Es posible hacer más configuraciones desde “Configuración de  Raspberry Pi” o desde comando “sudo raspi-config”:

Como se ha configurado desde el menú avanzado de Raspberry Pi Imager, muchas de las configuraciones ya estarán realizadas. 

Entrar en Raspberry Pi Configuration y acabar de configurar nuestra Raspberry Pi. Si se han seguido todos los pasos, solo será necesario el idioma y pedirá reiniciar la Raspberry Pi. También configurar la resolución de VNC si fuera necesario.

Paso 8: Configurar Acceso Remoto a Raspberry Pi con Remote.it

Darse de alta y crear una cuenta en https://remote.it/ 

Para Raspberry Pi usar el device package, es el método más sencillo: https://docs.remote.it/software/device-package 

Instalar la Desktop Application https://remote.it/download/ o usar la versión web https://beta.remote.it/ 

Añadir un nuevo dispositivo Raspberry Pi:

Ejecutar el comando en Raspberry Pi.

Una vez instalado, aparecerá el dispositivo en nuestra cuenta de remote.it

Documentación instalación: https://docs.remote.it/software/device-package/installation 

Ahora ya podremos conectarnos por SSH desde cualquier red, activando la conexión y siguiendo las instrucciones de conexión.

Paso 9: Configurar Acceso Remoto a Raspberry Pi con Zero Tier

Darse de alta y crear un usuario en https://www.zerotier.com/ 

Crear una red y obtener el identificador de la red https://zerotier.atlassian.net/wiki/spaces/SD/pages/8454145/Getting+Started+with+ZeroTier 

Instalar en Raspberry Pi el cliente de Zero Tier

https://www.zerotier.com/download/. Ejecutar el comando curl -s https://install.zerotier.com | sudo bash

Y luego unirse a la red con: sudo zerotier-cli join [network-id] with [device-id]

Si hemos creado una red privada, autorizar el dispositivo ponerle un nombre (p.e. el hostname)

Para saber en la Raspberry Pi el id del dispositivo, ejecutar el comando: sudo zerotier-cli info

Para ver la ruta añadida en nuestro dispositivo ejecutar: route -n

Para ver la red a la que está conectado nuestra Raspberry Pi, ejecutar: sudo zerotier-cli listnetworks

Comprobar que funciona, instalar Zero Tier en nuestro ordenador el cliente https://www.zerotier.com/download/ y conectar a la red creada.

Luego comprobar que conecta por SSH al dispositivo.

Proyecto Final IoT con Node-RED

Descripción del Proyecto

Proyecto final full stack IoT con Node-RED aplicando los conceptos vistos.

Repositorio: https://github.com/jecrespo/proyecto-fundamentos-iot 

Material del Proyecto

M5stack: https://m5stack.com/collections/m5-core/products/basic-core-iot-development-kit 

M5Stick-C con sensor ENV:

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.

Wibeee ONE 2W

Si el alumno tiene algún HW con que quiera interactuar, puede presentarlo y lo integramos en las prácticas.

Esquema del Proyecto

Topología del proyecto IoT:

Datos Disponibles

Topic Map Nodo00 (Enrique):

  • educantabria/nodo00/wemos1/dato10s – publica mensaje numerado cada 10s
  • educantabria/nodo00/wemos1/dato60s – publica mensaje numerado cada 60s
  • educantabria/nodo00/wemos1/reset – publica mensaje cada reset o inicio
  • educantabria/nodo00/wemos1/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo00/wemos1/text – suscrito (muestra el mensaje por pantalla)
  • educantabria/nodo00/wemos1/rele – suscrito (1 relé ON, otro valor  relé OFF). Con firmware relé
  • educantabria/nodo00/wemos2/dato10s – publica mensaje numerado cada 10s
  • educantabria/nodo00/wemos2/dato60s – publica mensaje numerado cada 60s
  • educantabria/nodo00/wemos2/reset – publica mensaje cada reset o inicio
  • educantabria/nodo00/wemos2/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo00/wemos2/text – suscrito (muestra el mensaje por pantalla)
  • educantabria/nodo00/wemos2/temperatura – publica dato temperatura cada 10 segundos. Con firmware DS18B20
  • educantabria/nodo00/wibeee/# – datos eléctricos de Wibeee. Varios parámetros.
  • educantabria/nodo00/m5atom/aviso – suscrito (“alarma” – leds rojos, “aviso” – leds amarillos, “ok” – leds verdes, otro mensaje apaga)
  • educantabria/nodo00/m5atom/boton – al pulsar publica “press” o “longpress”
  • educantabria/nodo00/m5stack/boton/A – al pulsar botón A publica “press”
  • educantabria/nodo00/m5stack/boton/B – al pulsar botón B publica “press” 
  • educantabria/nodo00/m5stack/boton/C – al pulsar botón C publica “press”
  • educantabria/nodo00/m5stack/led – suscrito (1 dibuja en pantalla círculo rojo, otro valor  dibuja en pantalla círculo verde)
  • educantabria/nodo00/m5stack/text – suscrito, muestra por pantalla el texto
  • educantabria/nodo00/m5stick/temperatura – publica dato temperatura cada 1 segundo
  • educantabria/nodo00/m5stick/humedad – publica dato humedad cada 1 segundo
  • educantabria/nodo00/m5stick/presion – publica dato presión cada 1 segundo
  • educantabria/nodo00/m5stickplus/distancia – publica dato distancia cuando se activa
  • educantabria/nodo00/m5stickplus/button – al pulsar botón publica “press”
  • educantabria/nodo00/m5stickplus/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo00/m5stickplus/label  – suscrito (“red” – circulo rojo, “yellow” – circulo amarillo, “green” – circulo verde, “black” – círculo verde)
  • educantabria/nodo00/raspberry3/CPU – publica Node-RED el datos de CPU 
  • educantabria/nodo00/raspberry3/Temperatura – publica Node-RED el datos de temperatura procesador
  • educantabria/nodo00/raspberry3/Memoria – publica Node-RED el datos de memoria libre
  • educantabria/nodo00/raspberry3/Dashboard/# – publica Node-RED cualquier dato del Dasboard
  • educantabria/nodo00/raspberry3/Datos/# – suscrito Node-RED para recibir cualquier dato externo
  • educantabria/nodo00/raspberry3TT/CPU – publica Node-RED el datos de CPU 
  • educantabria/nodo00/raspberry3TT/Temperatura – publica Node-RED el datos de temperatura procesador
  • educantabria/nodo00/raspberry3TT/Memoria – publica Node-RED el datos de memoria libre
  • educantabria/nodo00/raspberry3TT/Dashboard/# – publica Node-RED cualquier dato del Dasboard
  • educantabria/nodo00/raspberry3TT/Datos/# – suscrito Node-RED para recibir cualquier dato externo
  • educantabria/nodo00/raspberryzero/tomafotomqtt – suscrito Node-RED un valor cualquiera enviado, toma una foto y publica en el topic educantabria/nodo00/raspberryzero/foto en baja resolución.
  • educantabria/nodo00/raspberryzero/foto – publica Node-RED una foto al mandar cualquier dato en el topic educantabria/nodo00/raspberryzero/tomafotomqtt 
  • educantabria/nodo00/raspberryzero/tomafotoweb suscrito Node-RED un valor cualquiera enviado, toma una foto y la actualiza en https://www.aprendiendoarduino.com/servicios/imagen.jpg en alta resolución

Topic Map Alumnos Nodoxx:

  • educantabria/nodo{xx}/wemos{y}/dato10s – publica mensaje numerado cada 10s
  • educantabria/nodo{xx}/wemos{y}/dato60s – publica mensaje numerado cada 60s
  • educantabria/nodo{xx}/wemos{y}/reset – publica mensaje cada reset o inicio
  • educantabria/nodo{xx}/wemos{y}/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo{xx}/wemos{y}/text – suscrito (muestra el mensaje por pantalla)
  • educantabria/nodo{xx}/wemos{y}/rele – suscrito (1 relé ON, otro valor  relé OFF). Con firmware relé
  • educantabria/nodo{xx}/wemos{y}/oled – suscrito (muestra el mensaje por pantalla oled). Con firmware oled
  • educantabria/nodo{xx}/wemos{y}/temperatura – publica dato temperatura cada 10 segundos. Con firmware DS18B20
  • educantabria/nodo{xx}/wemos{y}/matrix – suscrito (0 efecto y apaga, de 1 a 8 ilumina de 1 a 8 líneas de matriz). Con firmware matrix.
  • educantabria/nodo{xx}/raspberry{y}/CPU – publica Node-RED el datos de CPU 
  • educantabria/nodo{xx}/raspberry{y}/Temperatura – publica Node-RED el datos de temperatura procesador
  • educantabria/nodo{xx}/raspberry{y}/Memoria – publica Node-RED el datos de memoria libre
  • educantabria/nodo{xx}/raspberry{y}/Dashboard/# – publica Node-RED cualquier dato del Dasboard
  • educantabria/nodo{xx}/raspberry{y}/Datos/# – suscrito Node-RED para recibir cualquier dato externo

{xx} número de alumno

{y} número de sensor

AlumnoNº Nodo
SERGIO A.nodo01
Alberto B.nodo02
Pablo C.nodo03
Soraya C.nodo03
isaías C.nodo04
Mª del Mar E.nodo05
Santiago F.nodo06
José Ángel G.nodo07
Oscar G.nodo08
MARCOS G.nodo09
Jose Luis G.nodo10
Evelio H.nodo11
Roberto I.nodo12
RAMON L.nodo13
Eduardo P.nodo14
FRANCISCO JAVIER R.nodo15
Sara T.nodo16

Tareas del Proyecto

Fase 1 – Monitorización Local

Instalar nodo con todo el SW:

Instalar los sensores en la ubicación.

Fase 2 – Conectar a la Nube

Conectar sensores:

Fase 3 – Automatizar

Configurar y securizar Node-RED: 

Programar Node-RED y MQTT:

Fase 4 – Integración con Terceros

Integración de datos con terceros:

Material de Prácticas Fundamentos IoT para Formación Profesional

Para el curso on-line “Fundamentos IoT Open Source para Formación Profesional”, el material recomendado por parte de los alumnos para realizarlo es:

  • Nodo Edge/Gateway:
    • Una Raspberry Pi 3B+ (o superior) + tarjeta SD 8Gb (o superior) + alimentador conectada a Internet por alumno.
    • En caso de no tener Raspberry Pi virtualizar Raspberry Pi OS con Virtual Box. (No recomendado)
  • Plataformas IoT:
    • https://thingspeak.com/
    • enriquecrespo.com (S.O. CentOS 8, servidor público con 1 vCPU, 2 GB RAM, 20 GB SSD)
      • Node-RED
      • Mosquitto
      • Grafana
      • Base de Datos: influxDB, etc…
      • Otros servicios públicos
    • aprendiendoarduino.com
      • BBDD MySQL públicas
    • Opcionalmente podrán usarse otras que los alumnos usen o estén interesados como https://thingsboard.io/ 

Node-RED Público

La instancia de Node-RED en enriquecrespo.com es la que va a centralizar los datos de los Node-RED remotos, haciendo de plataforma IoT.

Si algún alumno necesita una instancia de Node-RED pública, se levantará en el servidor enriquecrespo.com

Broker MQTT Público

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 el topic educantabria/#

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.

Grafana en https://enriquecrespo.com:3000/ para representar gráficamente los datos. Recibirán por correo las credenciales de acceso.

Opcionalmente se podrán usar otras bases de datos como influxDB.

Todo el software y documentación utilizado en el curso es libre con licencia creative commons o similar.