Archivo de la categoría: Práctica

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.

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.

Práctica 6: Integración de Datos en Plataforma IoT

Ejercicio 01

Hacer un dashboard para controlar los wemos D1 Mini con el firmware instalado en el curso: https://aprendiendoarduino.wordpress.com/2021/02/20/mqtt-y-esp8266/

El Dashboard tendrá:

  • Un gauge y una gráfica indicando la temperatura de la sonda DS18B20
  • Un pulsador para encender y apagar el led del Wemos D1 Mini
  • Un pulsador para encender y apagar el relé
  • Un Input text o un formulario para mandar mensajes a la pantalla oled
  • Un slider para encender los 8 niveles de la matriz led.

Código: https://github.com/aprendiendonodered/ejercicio11 

Flujo:

Dashboard:

Vídeos solución:

Ejercicio 02

Almacenar en la Base de datos MySQL instalada en la Raspberry Pi en la práctica 1 https://aprendiendoarduino.wordpress.com/2021/02/13/practica-1-instalacion-y-configuracion-raspberry-pi-os/ los datos de temperatura del sensor con el firmware de la práctica 2: https://aprendiendoarduino.wordpress.com/2021/02/15/practica-2-sensorizacion-iot-con-esp8266/

Hacer la lógica para controlar el relé de forma cuando la temperatura sea inferior a 21 grados encienda el relé y lo pare cuando alcance los 23 grados. Cuando el relé se encienda o apague, mandar un correo.

Hacer un dashboard que muestra la temperatura del sensor DS18B20 con un gauge y el estado del relé con un texto.

Código: https://github.com/aprendiendonodered/ejercicio12 

Flujo:

Dashboard:

Vídeos solución:

Ejercicio 03

Capturar foto de Raspberry Pi Zero mediante un botón del dashboard y mostrar la foto en el dashboard.

Tomar foto:

  • publicar un valor cualquiera en el topic educantabria/tomafotomqtt. La foto se publica en el topic educantabria/foto en baja resolución.
  • publicar un valor cualquiera en el topic educantabria/tomafotoweb. La foto se actualiza en https://www.aprendiendoarduino.com/servicios/imagen.jpg en alta resolución.

Hacer dos grupos en el dashboard para los dos métodos de captura de datos.

Código: https://github.com/aprendiendonodered/ejercicio13 

Flujo:

Dashboard: 

Vídeos solución:

Ejercicio 04

Configurar un cliente FTP y un servidor FTP con Node-RED e interactuar entre ellos:

Capturar datos de MQTT publicados en enriquecrespo.com:8883 y guarda los datos en un fichero local usando el nodo file en formato csv usando el nodo csv https://cookbook.nodered.org/basic/generate-csv. Poner un botón en el dashboard y al pulsarlo, mandar los datos del fichero csv con el cliente ftp al servidor y borrar los datos del fichero (inicializarlo).

Para mandar los datos se puede usar el servidor público ftp en enriquecrespo.com: 7021 o un servidor propio con node red o de otro tipo.

Código: https://github.com/aprendiendonodered/ejercicio14 

Flujo:

Dashboard:

Vídeos solución:

Práctica 5: Programar Node-RED, MQTT y Dashboard

Ejercicio 01

Mostrar en el dashboard en un mismo grupo 3 widgets text donde cada segundo actualice el timestamp (epoch time), la fecha usando el nodo node-red-contrib-date y el día y hora en formato, usando el nodo moment para transformarlo.

Código: https://github.com/aprendiendonodered/ejercicio01 

Vídeo solución:

Ejercicio 02

Leer un dato de la temperatura publicado en MQTT y hacer que cuando la temperatura esté fuera de un rango entre 18 y 22 grados, ponga el estado de confort en un elemento del dashboard y mande un email.

Usar el nodo email y ver la información para usarlo: https://flows.nodered.org/node/node-red-node-email 

Código: https://github.com/aprendiendonodered/ejercicio02 

Vídeos solución:

Imágenes:

Ejercicio 03

Hacer un flujo para publicar datos de CPU, Memoria y temperatura de las Raspberry Pi de casa en MQTT en los topics:

  • educantabria/nodoxx/raspberrypi/CPU
  • educantabria/nodoxx/raspberrypi/Memoria
  • educantabria/nodoxx/raspberrypi/Temperatura

Luego hacer que la instancia de Node-RED que las recoja y muestre en el dashboard.

Para publicar los datos de casa, usar el broker MQTT del curso enriquecrespo.com:8883. Opcionalmente usar el broker instalado en la práctica 4: https://aprendiendoarduino.wordpress.com/2021/02/28/practica-4-instalar-configurar-y-securizar-mosquitto-y-node-red-en-raspberry-pi/.

Código Raspberry Pi:

Vídeo 1 con código Raspberry Pi:

Código Node-RED Dashboard:

Vídeo segunda parte:

Dashboard:

Código Total: https://github.com/aprendiendonodered/ejercicio03 

Anexo: Obtener Datos de Raspberry Pi

Código para obtener los datos de Raspberry Pi, usando en nodo exec: 

[{"id":"af22b399.12614","type":"exec","z":"8a81314e.a0f79","command":"vcgencmd measure_temp","addpay":false,"append":"","useSpawn":"","timer":"","name":"RPi Temp.","x":325.2221908569336,"y":46.33333683013916,"wires":[["14f0a295.59181d"],[],[]]},{"id":"408435c9.447fec","type":"exec","z":"8a81314e.a0f79","command":"top -d 0.5 -b -n2 | grep \"Cpu(s)\"|tail -n 1 | awk '{print $2 + $4}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"CPU Load","x":325.2221908569336,"y":126.33333683013916,"wires":[["2c7475c7.6cc01a"],[],[]]},{"id":"8fbcbdf9.549b7","type":"exec","z":"8a81314e.a0f79","command":"free | grep Mem | awk '{print 100*($4+$6+$7)/$2}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"Free Memory","x":325.2222099304199,"y":190.55557250976562,"wires":[["daf6433c.bad81"],[],[]]},{"id":"14f0a295.59181d","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = str.substring(5,9);\nreturn msg;","outputs":1,"noerr":0,"x":471.888858795166,"y":33.00000190734863,"wires":[["46daa272.4333ac","334a9ddd.345602"]]},{"id":"daf6433c.bad81","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = parseInt(str.substring(0,str.length - 1));\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":180,"wires":[["1ba39571.ba75ab"]]}]

Código para obtener los datos Raspberry Pi y mandar a MQTT: https://github.com/jecrespo/Curso-Node-RED/blob/master/Monitor%20Raspberry%20Pi/monitor_raspberrypi.json 

Ejercicio 04

Hacer un dashboard para ver la temperatura de todas las Raspberry Pi o de otros elementos publicado en MQTT y sus gráficas. Usar MQTT Explorer para explorar qué datos están publicados.

Opcionalmente hacer varias tabs/pestañas para mostrar: temperaturas, CPU y memoria agrupadas en cada pestaña.

Código: https://github.com/aprendiendonodered/ejercicio04

Vídeos:

Flujo:

Dashboard Final: