Archivo de la categoría: Curso Fundamentos IoT

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:

Instalación Raspbian

Raspberry Pi OS: https://en.wikipedia.org/wiki/Raspberry_Pi_OS 

Software quickstart: https://www.raspberrypi.org/learning/software-guide/quickstart/ 

Guías de iniciación:

Copia de Seguridad de Raspberry Pi

Si vamos a instalar de cero una Raspberry Pi que ya estaba funcionando, por ejemplo, con una versión antigua de Raspberry Pi OS o de Raspbian, es aconsejable hacer una copia de seguridad de nuestra tarjeta microSD.

En windows usar Win32DiskImager, no solo se puede copiar una imagen sino guardar una imagen de una tarjeta SD: Descarga https://sourceforge.net/projects/win32diskimager/

En Linux Terminal usar estos comandos:

  • backup: dd if=/dev/sdb of=sd.img bs=4M
  • restore: dd if=sd.img of=/dev/sdb bs=4M

Los comandos que usado en Linux o MAC:

  • df -h
  • sudo diskutil unmount /dev/disk2s1
  • sudo dd if=/dev/rdisk2 of=~/sd.img bs=1m

En MAC OS puedes usar apple pi baker: https://www.tweaking4all.com/software/macosx-software/applepi-baker-v2/

Formatear la tarjeta SD de la forma correcta.

Uno de los errores más frecuentes de los usuarios de tarjetas de memoria SD está en creer que este tipo de memorias funcionan igual que una memoria USB o un disco duro y se pueden formatear con las utilidades del sistema operativo. A diferencia de otros dispositivos de almacenamiento, las tarjetas SD incluyen una zona especial denominada “Protected Area”, empleada para temas de seguridad, que requiere un tratamiento especial. Adicionalmente – y dependiendo de la configuración y el tipo de tarjeta – es necesario un formateo ajustado al tipo de tarjeta.

Descargar e instalar la utilidad “SD Card Formatter” provista por la SD Association, los mismos que definen los estándares de este medio de almacenamiento. Después de instalada, se debe proceder a formatear la tarjeta SD antes de utilizarla. De esta forma se garantiza que se usará todo el espacio disponible de la tarjeta y se optimizará su desempeño y almacenamiento de acuerdo con las especificaciones del fabricante.

Descarga https://www.sdcard.org/downloads/formatter_4/eula_windows/index.html 

Instalar Imagen Raspberry Pi OS (Antiguo Raspbian)

Instalación recomendada usando Raspberry Pi Imager: https://www.raspberrypi.org/software/

Raspberry Pi Imager es la forma rápida y fácil de instalar Raspberry Pi OS y otros sistemas operativos en una tarjeta microSD, lista para usar con su Raspberry Pi. Vídeo: https://www.youtube.com/watch?v=J024soVgEeM 

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

Descargar imagen Raspbian zip: https://www.raspberrypi.org/downloads/

Descargar Raspbian with desktop desde: https://www.raspberrypi.com/software/operating-systems/ 

La versión por defecto de Raspbian es ahora una instalación mínima – le da el escritorio, el navegador Chromium, el reproductor multimedia VLC, Python, y algunos programas accesorios. Junto a esto se encuentra la imagen «Raspbian Full», que también incluye todos los programas recomendados: LibreOffice, Scratch, SonicPi, Thonny, Mathematica y varios otros.

El programa de software recomendado se puede utilizar para instalar o desinstalar cualquiera de los programas adicionales que se encuentran en la imagen completa; si descarga la imagen mínima y comprueba todas las opciones en el software recomendado, terminará con la imagen completa, y viceversa.

Buster la nueva versión de Raspbian: https://www.raspberrypi.org/blog/buster-the-new-version-of-raspbian/

Guía de instalación https://www.raspberrypi.org/documentation/installation/installing-images/README.md 

Para copiar la imagen a una SD usar:

Tutoriales de instalación de Raspbian:

Etcher

Etcher es una herramienta gráfica de escritura de tarjetas SD que funciona en Mac OS, Linux y Windows, y es la opción más fácil para la mayoría de los usuarios. Etcher también soporta la escritura de imágenes directamente desde el archivo zip, sin necesidad de descomprimirlas.

balenaEtcher es otra opción fácil para la mayoría de los usuarios de escribir imágenes en tarjetas SD, por lo que es un buen punto de partida. Si busca una alternativa en Windows, puede usar Win32DiskImager.

Pasos:

  • Descargar SO: Raspbian
  • Formatear microSD: SD Card Formatter 4.0
  • Flashear: Etcher
  • Acceder a la SD desde un PC: Partición “/boot” es accesible desde Windows, partición extendida.
  • Preconfiguración (recomendado para modo headless): SSH

Win32DiskImager

Con Win32DiskImager no solo se puede copiar una imagen sino guardar una imagen de una tarjeta SD, pero el uso de Etcher es más sencillo.

Descarga https://sourceforge.net/projects/win32diskimager/

Post Instalación

Una vez instalado Raspberry Pi OS, enchufar la Raspberry Pi, conectar un monitor, teclado y ratón a Raspberry Pi para seguir con su configuración.

En caso de no tener un monitor, se puede hacer una instalación headless:

Pasos para instalación headless:

Vídeos instalación Raspberry Pi OS headless:

Una vez tenemos la IP podemos conectarnos por SSH: https://www.raspberrypi.com/documentation/computers/remote-access.html#secure-shell-from-linux-or-mac-os o en windows instalar PuTTY: https://www.putty.org/ 

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

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

  • sudo raspi-config
  • Navigate to Interfacing Options.
  • Scroll down and select VNC › Yes.

Ahora ya nos podremos conectar por VNC desde nuestro ordenador usando VNC Viewer: https://www.realvnc.com/es/connect/download/viewer/ 

Una vez entramos en Raspberry Pi por VNC, seguimos los pasos de wizard que nos indica para cambiar contraseña, cambiar el nombre (hostname), configurar y actualizar Raspberry Pi, etc…

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

  • expand filesystem (solo versiones antiguas)
  • Cambiar la contraseña
  • Poner nombre (hostnamer): p.e. EnriquePi
  • Configurar resolución de pantalla
  • Habilitar VNC
  • Habilitar VNC conectividad en la nube (usuario y contraseña de VNC)
  • Habilitar SSH
  • Actualizar con sudo apt-get update  y sudo apt-get upgrade
  • Configuración: https://www.raspberrypi.org/documentation/configuration/

Conexión a la Red

La forma general de conectar a Internet la Raspberry Pi es mediante 

  • Conexión a Ethernet por DHCP
  • Conectar a Wifi por DHCP

Por este motivo no es necesario configurar nada si conectamos a un router con DHCP configurado para ethernet y en WiFi solo deberemos configurar la red wifi.

DHCP:

La propia Raspberry Pi podría hacer de servidor DHCP: https://www.raspberrypi.org/learning/networking-lessons/lesson-3/plan/ 

La Raspberry Pi 3 es la primera de la familia en incluir WIFI estándar de serie, lo que es un gran avance de salida y garantiza que se normalice las conexiones, a diferencia de las versiones previas en las que había que comprar un módulo WiFi y configurar la WIFI en función del modelo de adaptador que usasemos.

En el caso actual, la configuración de la WIFI se reduce a listar las redes disponibles y elegir la nuestra, para después proporcionar la contraseña de acceso. 

Detalle seleccion WIFI

Aquí tienes iconos para la configuración de varios elementos, como el volumen de audio la WIFI y hasta el Bluetooth, que recuerda viene de serie en la nueva Raspi3. Para configurar la WIFI pincha y selecciona el icono y selecciona la WiFi a conectarse.

Desplegando wifi

Una vez configurado comprobar que se puede navegar.

Aunque hayas conectado correctamente a Internet hay mil razones por las que necesitas conocer más información de tus conexiones IP, especialmente saber la IP para que al actuar como servidor saber a qué IP conectarnos.

Con el comando “ifconfig” podemos saber qué interfaces están conectados y que DNS usan o que Gateway o router estas usando como salida.

ifconfig 0

Para obtener los datos de ethernet teclea ifconfig eth0 y para wifi teclea ifconfig wlan0

Con el comando route -ne se pueden ver las rutas configuradas

Más información: https://www.prometec.net/conectar-a-internet/ 

Para obtener más información de las redes ver los directorios:

  • /sys/class/net/eth0
  • /sys/class/net/wlan0

Por ejemplo en el fichero address está la dirección MAC del controlador de red

En algunas ocasiones nos puede interesar asignar una IP fija, para ello seguir el tutorial: https://www.luisllamas.es/raspberry-pi-ip-estatica/ 

Los fichero de configuración de IP son:

  •  /etc/dhcpcd.conf
  • /etc/network/interfaces

Más información: https://raspberrypi.stackexchange.com/questions/39785/dhcpcd-vs-etc-network-interfaces 

También es conveniente cambiar el hostname, seguir este tutorial: https://www.howtogeek.com/167195/how-to-change-your-raspberry-pi-or-other-linux-devices-hostname/

Acceso Remoto

Una vez instalado vamos a asegurarnos el acceso remoto para no tener que tener conectado a un monitor y un teclado y ratón y podamos manejarlo.

Acceso Remoto: https://www.raspberrypi.org/documentation/remote-access/

SSH

La mejor forma de acceder a Raspberry Pi remotamente en modo comando en línea estando en la misma red es usando SSH. 

SSH sigue un modelo cliente-servidor. El cliente inicia una petición al servidor, que autentifica la comunicación e inicia el entorno Shell. Múltiples clientes pueden conectarse a un mismo servidor. Por defecto SSH emplea el puerto TCP 22 aunque puede cambiarse fácilmente. 

SSH dispone de más usos muy interesantes. por ejemplo, podemos copiar archivos de forma segura entre dos dispositivos, o tunelizar cualquier conexión de otra aplicación a través de un canal seguro SSH.

Para activar el servidor SSH en Raspberry Pi comprobar que estás activado en menu – Preferencias- Configuración de Raspberry Pi – Interfaces

Esta conexión sólo funciona en red local. Para poder acceder desde fuera, a través de Internet, hay que configurar un mapeo de puertos en el router. El proceso completo depende del router.

Para conectarnos desde Windows a SSH, deberemos emplear un cliente SSH para conectarnos con Raspberry Pi. El cliente más utilizado en Windows es Putty, que es Open Source y está disponible en https://www.putty.org/

Descargamos y ejecutamos Putty y nos aparece una ventana donde podemos introducir la dirección IP (o el nombre) de la Raspberry Pi. Al conectarnos se nos preguntará el nombre del usuario y la contraseña.

Más información:

VNC

La mejor forma de acceder a Raspberry Pi remotamente en modo escritorio estando en la misma red es usando VNC.

VNC es un programa de software libre basado en una estructura cliente-servidor que permite observar las acciones del ordenador servidor remotamente a través de un ordenador cliente. VNC no impone restricciones en el sistema operativo del ordenador servidor con respecto al del cliente: es posible compartir la pantalla de una máquina con cualquier sistema operativo que admita VNC conectándose desde otro ordenador o dispositivo que disponga de un cliente VNC portado.

Seguir este tutorial: https://www.raspberrypi.org/documentation/remote-access/vnc/README.md

La conexión de VNC de RealVNC se incluye con Raspbian. Consiste en el servidor de VNC, que permite controlar Raspberry Pi remotamente, y el VNC viewer, que permite que controlar ordenadores remotamente de su Raspberry Pi.

El servidor VNC debe habilitarse para poder conectarse remotamente, para ello ir a menu – Preferencias- Configuración de Raspberry Pi – Interfaces y asegurarse que VNC está activado.

Una vez activado establecer la conexión desde el ordenador instalando el VNC viewer: https://www.realvnc.com/en/connect/download/viewer/ y conectarse a la IP de nuestra Raspberry:

Con VNC también se puede establecer una conexión en la nube.

Más información:

Team Viewer

En el caso que queramos conectarnos a nuestra Raspberry Pi estando en cualquier parte del mundo, una buena opción es TeamViewer.

TeamViewer es un software informático privado de fácil acceso, que permite conectarse remotamente a otro equipo. Entre sus funciones están: compartir y controlar escritorios, reuniones en línea, videoconferencias y transferencia de archivos entre ordenadores.Team Viewer es gratuito para uso personal.

Web: https://www.teamviewer.com/es/ 

La instalación es muy simple solo hay que descargarse TeamViewer Host para raspberry Pi desde https://www.teamviewer.com/es/descarga/linux/ y acerse una cuenta en la web de TeamViewer https://www.teamviewer.com/es/ 

Enlace de descarga: https://download.teamviewer.com/download/linux/teamviewer-host_armhf.deb 

Instalar el fichero teamviewer-host_xxx_armhf.deb, simplemente haciendo doble click o con el comando “sudo dpkg -i filename.deb”

Si hay dependencias solucionarlo con  “sudo apt-get update” y “sudo apt-get -f upgrade”

Una vez instalado ejecutar TeamViewer en Raspberry Pi y poner las credenciales de la cuenta de TeamViewer

Finalmente acceder a https://login.teamviewer.com/LogOn con la cuenta de TeamViewer y ya podemos acceder a nuestra Raspberry Pi. Necesitaremos instalar el cliente de TeamViewer o la app de Chrome:

Solo para controlar la Raspberry Pi remotamente ejecutar el cliente “TeamViewer_Setup.exe” de esta forma:

Más información:

Instalación Software Raspberry Pi

Instalar servidor LAMP

El acrónimo LAMP está compuesto por las iniciales de sus cuatro componentes: Linux, Apache, MySQL y PHP. Estos forman la infraestructura en el servidor, que hace posible la creación y el alojamiento de páginas web dinámicas. Los componentes individuales se acumulan unos sobre otros, por lo que esta plataforma también recibe el nombre de LAMP stack (del inglés “apilar”).

Su funcionamiento es muy simple. Linux sirve como sistema operativo base para ejecutar el servidor web Apache. Este último no puede interpretar contenidos dinámicos, pero es aquí donde PHP entra a ejercer sus funciones de programación del lado del servidor. El proceso funciona entonces de la siguiente manera: Apache le envía un código fuente al intérprete PHP, incluyendo la información correspondiente sobre las acciones del visitante de la web, y permite el acceso a la base de datos MySQL. El resultado es devuelto a Apache y este se muestra finalmente en el navegador web del visitante.

El lenguaje de programación PHP es uno de los más extendidos para el desarrollo de páginas web. La ventaja de utilizar PHP para el desarrollo de páginas web es que nos permite crear páginas web dinámicas, es decir, que se generan cuando un usuario visita la página.

MySQL es un sistema de gestión de bases de datos relacional desarrollado bajo licencia dual: Licencia pública general/Licencia comercial por Oracle Corporation y está considerada como la base datos de código abierto más popular del mundo, y una de las más populares en general junto a Oracle y Microsoft SQL Server, sobre todo para entornos de desarrollo web.

La alternativa libre es mariaDB: https://mariadb.org/ 

Este proyecto monta un pequeño servidor web Apache con lo que podrías por ejemplo alojar tu propia página web entre otras cosas. Además, si despliegas alrededor de tu casa, por ejemplo, varios sensores y actuadores (temperatura, humedad, luces, etc…) comandados por Arduino, podrías utilizar la Raspberry Pi 3como centro de envío y recepción de datos a través de su red. Y por supuesto utilizar la página Web para mostrar y controlar los datos a través de Internet.

Instrucciones para su instalación:

#Update system

  • sudo apt-get update
  • sudo apt-get upgrade

#Install Apache2

  • sudo apt-get install apache2

Comprobar que accedemos entrando a la IP de la Raspberry Pi desde un navegador

La página web por defecto está en /var/www/html

Crear un fichero prueba.html en el directorio /var/www/html que contenga el texto: “HOLA MUNDO”

Para comprobar que funciona entrar desde un navegador a la dirección: http://ip_raspberry/prueba.html y ver que aparece el texto “HOLA MUNDO”

También podemos comprobar que funciona conectando un Arduino a la red de la Raspberry Pi y cargar este sketch: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/Conecta_Raspberry/Conecta_Raspberry.ino 

Curso configuración Apache: https://plataforma.josedomingo.org/pledin/cursos/apache24/ 

#Install PHP

  • sudo apt-get install php libapache2-mod-php

La versión que se instala es la 7.

Para comprobar el funcionamiento crear un fichero llamado info.php y en su interior el código: <?php phpinfo(); ?>

Luego en un navegador ir a http://IP-raspberry/info.php

#Install MariaDB

  • sudo apt-get install mariadb-server mariadb-client php-mysql
  • sudo mysql_secure_installation
  • sudo service apache2 restart

Durante el proceso de instalación se pedirá el password de root de MySQL, poner el mismo que tiene el usuario pi de la Raspberry Pi y poner a Yes todas las opciones de mysql_secure_installation 

Estos comando instalan una BBDD MariaDB

Para comprobar que todo funciona ejecutar sudo mysql -u root -p y poner la contraseña, saldrá:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 61
Server version: 10.1.23-MariaDB-9+deb9u1 Raspbian 9.0

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

#Install MySQL (Opcional)

En caso de querer instalar MySQL usar estos comandos:

Más información:

#Install PhpMyAdmin

  • sudo apt-get install phpmyadmin

Durante el proceso pide la contraseña del usuario phpmyadmin de MySQL y el servidor a instalar el apache y poner yes en dbconfig-common

IMPORTANTE: Seleccionar con la barra espaciadora apache2 y asegurarse que aparece un asterisco que indica que se ha seleccionado.

En caso que no hayamos configurado el servidor web correctamente o queramos hacer una configuración de phpmyadmin después de la instalación, usar el comando: sudo dpkg-reconfigure -plow phpmyadmin

phpMyAdmin es una herramienta escrita en PHP con la intención de manejar la administración de MySQL a través de páginas web, utilizando Internet. Actualmente puede crear y eliminar Bases de Datos, crear, eliminar y alterar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar claves en campos, administrar privilegios, exportar datos en varios formatos y está disponible en 72 idiomas. Se encuentra disponible bajo la licencia GPL Versión 2.

Para probar que funciona ver en un navegador: http://IP-raspberry/phpmyadmin con el usuario phpmyadmin y la contraseña usada.

El usuario phpmyadmin no tiene privilegios. Para crear un usuario “pi” con privilegios ejecutar:

  • sudo mysql -u root -p
  • CREATE USER ‘pi’@’localhost’ IDENTIFIED BY ‘tu_contrasena‘;
  • CREATE USER ‘pi’@’%’ IDENTIFIED BY ‘tu_contrasena‘;
  • GRANT ALL PRIVILEGES ON * . * TO ‘pi’@’localhost’; (Para acceso local)
  • GRANT ALL PRIVILEGES ON *.* TO ‘pi’@’%’;  (Para acceso remoto)
  • GRANT GRANT OPTION ON *.* TO ‘pi’@’localhost’; (Privilegios para dar permisos a otros usuarios)
  • FLUSH PRIVILEGES;

Para conectarnos desde otro servidor: mysql -h ip_raspberry -u root -p

#Install servidor ftp (VSFTPD) (Opcional)

  • sudo apt-get install vsftpd

Una vez instalado, configurar con: sudo nano /etc/vsftpd.conf 

Comentar estas dos opciones:

#local_enable=YES
#ssl_enable=NO

Y añadir al final del fichero:

# CUSTOM
ssl_enable=YES
local_enable=YES
chroot_local_user=YES
local_root=/var/www
user_sub_token=pi
write_enable=YES
local_umask=002
allow_writeable_chroot=YES
ftpd_banner=Welcome to my Raspberry Pi FTP service.

También necesitamos añadir el usuario pi al grupo www-data, dar la propiedad de la carpeta /var/www al usuario y al grupo www-data, cambiar la carpeta de inicio del usuario pi a la misma, y aflojar algunos permisos en la carpeta /var/www:

  • sudo usermod -a -G www-data pi
  • sudo usermod -m -d /var/www pi
  • sudo chown -R www-data:www-data /var/www
  • sudo chmod -R 775 /var/www

Y reiniciar el servicio: sudo service vsftpd restart 

Para comprobar que funciona usar un cliente ftp con https://filezilla-project.org/ y hacer una conexión con la siguiente configuración:

  • Host – 192.xxx.x.xxx (IP address)
  • Port – 21
  • Protocol – FTP (File Transfer Protocol)
  • Encryption – Use explicit FTP over TLS if available
  • Logon Type – Normal (username & password)
  • Username – pi
  • Password – [enter password]

Más información: 

Y si quisieramos instalar un wordpress: https://www.raspberrypi.org/learning/lamp-web-server-with-wordpress/

Con esto ya tenemos listo un servidor para recibir conexiones de arduino y guardar datos y mostrarlos

Recordar cada vez que se haga una modificación grande en Raspberry Pi hacer una copia de seguridad de la tarjeta SD con Win32DiskImager.

Descarga https://sourceforge.net/projects/win32diskimager/

Escribir el nombre de la imagen en la ruta donde los guardemos.

Y luego pulsar read. Una vez hecho esto, esperar a que el proceso finalice.

Probar LAMP con Arduino

Para probar el servidor LAMP que acabamos de instalar en nuestra Raspberry Pi vamos a usar Arduino y mandar datos de luminosidad de la sala usando un LDR.

Una fotorresistencia o LDR (por sus siglas en inglés “light-dependent resistor”) es un componente electrónico cuya resistencia varía en función de la luz.

Se trata de un sensor que actúa como una resistencia variable en función de la luz que capta. A mayor intensidad de luz, menor resistencia: el sensor ofrece una resistencia de 1M ohm en la oscuridad, alrededor de 10k ohm en exposición de luz ambiente, hasta menos de 1k ohm expuesto a la luz del sol. Aunque estos valores pueden depender del modelo de LDR.

El LDR actúa como una resistencia variable. Para conocer la cantidad de luz que el sensor capta en cierto ambiente, necesitamos medir la tensión de salida del mismo. Para ello utilizaremos un divisor de tensión, colocando el punto de lectura para Vout entre ambas resistencias. De esta forma:

Dónde Vout es el voltaje leído por el PIN analógico del Arduino y será convertido a un valor digital, Vin es el voltaje de entrada (5v), R2 será el valor de la resistencia fija colocada (10k ohm generalmente) y R1 es el valor resistivo del sensor LDR. A medida que el valor del sensor LDR varía, obtendremos una fracción mayor o menor del voltaje de entrada Vin.

Instalación:

Más información https://www.luisllamas.es/medir-nivel-luz-con-arduino-y-fotoresistencia-ldr/ 

Crear una base de datos llamada “DatosArduino” con una tabla llamada “luminosidad” que tenga 4 campos: “id” auto incremental y sea el campo clave, “fecha” de  tipo timestamp y que se actualice al actualizar, un campo “arduino” de tipo entero y un campo “IntensidadLuminosa” que sea de tipo entero.

O con la query:

CREATE TABLE `luminosidad` (
  `id` int(11) NOT NULL,
  `fecha` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `arduino` int(11) NOT NULL,
  `IntensidadLuminosa` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `luminosidad`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `luminosidad`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

Para insertar un dato:

INSERT INTO `luminosidad` (`arduino`, `IntensidadLuminosa`) VALUES ('22', '22');

Subir por FTP seguro los ficheros Graba_GET.php y Graba_POST.php a Raspberry Pi al directorio /var/www/html o crearlos con el comando nano:

Se puede probar que funciona ejecutando desde el navegador: http://127.0.0.1/Graba_GET.php?arduino=2&IntensidadLuminosa=89 

Ejecutar en Arduino estos sketches para GET o POST para mandar cada 5 segundos el dato de luminosidad:

Ver en la web de phpmyadmin los datos que se están subiendo y descargar en formato csv los datos guardados en unos minutos.

NOTA: Para ver los errores de PHP activar en /etc/php/7.0/apache2/php.ini la línea:

  • Development Value: E_ALL

Instalar Node-RED

No instalar la versión que aparece en el software recomendado de Raspberry Pi OS.

Seguir esta instalacióm: https://nodered.org/docs/getting-started/raspberrypi 

Ejecutar el comando para instalar y actualizar: bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

Para ejecutar Node-RED en el arranque: sudo systemctl enable nodered.service

En caso de problemas ver el log con: node-red-log

Instalar Webmin

Webmin es una herramienta de configuración de sistemas accesible vía web para sistemas Unix, como GNU/Linux y OpenSolaris. Con él se pueden configurar aspectos internos de muchos sistemas operativos, como usuarios, cuotas de espacio, servicios, archivos de configuración, apagado del equipo, etcétera, así como modificar y controlar muchas aplicaciones libres, como el servidor web Apache, PHP, MySQL, DNS, Samba, DHCP, entre otros.

Web: http://www.webmin.com/

Instalación:

Para comprobar que se ha instalado acceder desde un navegador a https://ip_address:10000 con usuario pi y la contraseña

Más información:

Manejar GPIO Raspberry Pi

Blink Led

Antes de empezar recordar comprobar la posición de los pines porque en caso de error podemos dañar la Raspberry Pi ya que los GPIO no tienen ninguna protección.

  • Cuando conectes cables a los GPIO procura no equivocarte y fíjate bien.
  • Usa cables con recubrimiento del tipo Dupont Macho-hembra por ejemplo, y no acerques cables sin proteger a tus GPIO (Y mucho menos un destornillador) porque puedes hacer un corto con facilidad.
cables M-F
  • Una vez que conectes un cable hembra protegido, vuelve a mirar y asegúrate de que lo has conectado al pin que querías y no al de al lado.
  • Especial cuidado con los pines que uses para sacar 3V o 5V de tu Raspi. No dejes el otro extremo al aire: Asegúrate de conectarlo a algún sitio.
  • NO CONECTES NADA DE 5V si no estás seguro. Tu Raspberry funciona a 3.3V y meterle 5V en un pin puede suponer quemar el procesador central. 

Instalar las librerías para el uso de los pines GPIO desde Python, asegurandonos de tener actualizado Raspbian:

  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get install python-dev
  • sudo apt-get install pyton-rpi.gpio

Tened en cuenta que en esta ocasión vamos a alimentar el LED con 3.3V (Que es lo que proporciona un pin de la Raspi) y que la intensidad que obtendremos será: 3.3 / 1K Ω = 3 mA, que no es mucho para iluminar un LED pero suficiente.

Esquema de GPIO:

Conectamos GND al pin 6 de la Raspberry y vamos a usar el pin 12 (GPIO 18) como control del encendido mediante una resistencia intermedia. El esquema de conexión es:

Abrir el IDLE de Python 3 para empezar nuestro programa:

Y copiar código:

import RPi.GPIO as gpio

import time

gpio.setmode(gpio.BOARD)
gpio.setup(12, gpio.OUT)

for  x in range ( 0, 10):

    gpio.output(12, True)
    time.sleep(0.5)

    gpio.output(12, False)
    time.sleep(0.5)

print “Ejecución finalizada”

Guardar el fichero con el nombre blink.py en /home/pi y ejecutarlo pulsando F5

Más información:

Industria 4.0 (IIoT)

El concepto de industria 4.0 consiste en la introducción de las tecnologías digitales en las fábricas. Es la forma que hay de llamar al fenómeno de transformación digital aplicado a la industria de producción.

Durante años se ha hablado del impacto del Internet de cosas (IoT)  en industrias como la energética o de infraestructuras, bajo el concepto de Smart Cities. Ahora toca hablar de “Industria Inteligente” o industria 4.0.

La industria 4.0 consiste en la digitalización de los procesos productivos en las fábricas mediante sensores y sistemas de información para transformar los procesos productivos y hacerlos más eficientes. La industria 4.0 supone un cambio de mentalidad importante.

La industria 4.0 supondrá una fuente de competitividad para las industrias occidentales con: costes de mano de obra, costes de energía y niveles de compromiso social, mucho más elevados que sus homólogos de los países emergentes.

Iniciativa europea: http://i4ms.eu/ y resumen: http://i4ms.eu/documents/i4ms_v11.pdf 

Lo que ofrece la industria 4.0 a través de la digitalización y el uso de plataformas conectadas es:

  • capacidad de adaptación constante a la demanda,
  • servir al cliente de una forma más personalizada,
  • aportar un servicio post venta uno a uno con el cliente,
  • diseñar, producir y vender productos en menos tiempo,
  • añadir servicios a los productos físicos
  • crear series de producción más cortas y rentables
  • y aprovechar la información para su análisis desde múltiples canales (CMS, SCM, CRM, FCM, HRM, Help desk, redes sociales, IoT)  donde ser capaces de analizarla y explotarla en tiempo real.

Puntos clave de la Industria 4.0:

  • Big data y análisis de datos
  • Cloud Computing
  • Ciberseguridad
  • Robótica
  • Internet de las cosas
  • Simulación y prototipado
  • Realidad aumentada
  • Cultura
  • Integración de procesos

El verdadero reto estará en las personas, en cómo lograr el proceso de transformación digital dentro la organización y en el cambio que supondrá adaptarse y trabajar en los nuevos entornos conectados de la industria 4.0

Más información: http://fca-consulting.es/industria-4-0-4a-revolucion-industrial/ 

Pasamos de especializarnos en tecnología a especializarnos en sectores verticales en IoT porque cada uno tiene unas necesidades.

Aporte a la industria

  • manteniendo predictivo
  • ahorro de costes 
  • mejora en la toma de decisiones 
  • visualización de datos en planta en tiempo real

IIOT se refiere a:

  • El uso de IoT en los procesos industriales que afectan a todos los niveles, desde el diseño de las plantas hasta los modelos de logística y distribución llegando hasta el cliente final.
  • La implantación en las industrias de soluciones IoT para optimizar procesos y reducir los costes de fabricación gracias a la información que obtienen en cada paso que les proporciona unos beneficios tangibles.
  • La sensorización y conectividad de dispositivos para extraer datos, obtener datos en tiempo real, poseer datos de valor, datos que permitan tomar decisiones acertadas de un modo ágil y eficaz.
  • El conocimiento del cliente final. Porque el cliente debe instalarse como pieza clave en la cadena de producción y el conocimiento real de sus preferencias actuales y futuras de consumo es posible de un modo económico gracias a las herramientas tecnológicas que podemos aplicar.

El objetivo principal de la industria 4.0 es MEJORAR LA PRODUCTIVIDAD.

Nuevas oportunidades con IIoT

  1. Un aumento de la productividad industrial en un 30 por ciento o superior del OEE (Overall Equipment Efficiency, siendo OEE= disponibilidad x rendimiento x calidad). Conocer el estado real de la máquina permite planificar las paradas para el mantenimiento preventivo, mejorando los costes de desplazamientos, intervención, repuestos, alquiler de maquinaria o falta de producción. En el caso de las paradas inesperadas es posible mejorar los tiempos de reacción y diagnóstico, reduciendo así el tiempo de improductividad.
  2. Incrementar la satisfacción y la confianza de un usuario final en el desarrollo de sus actividades, al saber que el funcionamiento de la instalación está siendo monitorizado en tiempo real por su proveedor de servicios de mantenimiento, minimizando los tiempos de respuesta ante posibles anomalías para garantizar la continuidad de servicio de la instalación.
  3. Incrementar las posibilidades de negocio de un OEM, ofreciendo servicios de monitorización al usuario, como son la generación de informes automáticos de los costes energéticos de producción, el diagnóstico de incidencias, la actualización del software o la propuesta de recambios de acuerdo a las horas de funcionamiento. Los contratos de mantenimiento sobre el parque de máquinas instalado pueden representar una fuente de ingresos constante para el fabricante de maquinaria, que cobra especial importancia ante posibles caídas de la demanda.

Visión de Industria 4.0 de Unitronics: https://unitronicsplc.com/wp-content/uploads/2017/10/WHITE-PAPER-pyramid-A4-9_2017_V2.pdf 

Diferencia entre IoT e industria 4.0

Más información:

IIoT y HW Open Source

Desde los inicios de Arduino y el HW Open Source, la industria encontró una forma sencilla y barata de implementar el Internet de las cosas y la Industria 4.0. Con estas herramientas es posible realizar tareas como:

  • Machinery automation.
  • Installation Control. (Thermal, Climate conditioning, Water treatment, Chemical products, Food, etc.).
  • Industrial monitoring.
  • Data acquisition.
  • etc.

Raspberry Pi en la industria: https://aprendiendoarduino.wordpress.com/2020/03/01/raspberry-pi-en-la-industria/ 

Ejemplos de uso del IIoT

Torres de refrigeración (HVAC)

Descripción: Control de la temperatura del agua y rendimiento de la máquina. Registro de horas de funcionamiento para mantenimiento de filtros y  consumos energéticos en instalaciones industriales de gran consumo energético.

Beneficios de implantación del IIoT: Envío de alarmas y avisos de incidencias en tiempo real (legionella, pérdida de alimentación, etc.), con comprobación del estado de la máquina remotamente, ahorrando tiempo y costes de desplazamientos innecesarios para mantenimiento del parque instalado y distribuido.

Registro de consumos energéticos por horas, para planificación y control de costes, detección de consumos no permitidos y realizar comparativas entre periodos o instalaciones similares.

Cambio de consigna de temperatura remoto, para normativas ambientales en periodos de verano e invierno, evitando desplazamientos.

Riego de campos de cultivo (Solar Pump)

Descripción: Bombeo de agua para el control de riego en campos de cultivo, utilizando placas fotovoltaicas o red eléctrica, con conmutación automática dependiendo de la irradiación solar.

Beneficios de implantación del IIoT: Reducción de los costes de consumos energéticos (electricidad sin conexión a red o diésel sin utilización de grupo electrógeno), asegurando el suministro de agua, la presión y el tiempo y el horario de  riego en todo momento desde cualquier dispositivo móvil.

Recepción de alarmas en tiempo real y registro de consumos energéticos para planificación de costes.

Control y confort en instalaciones públicas (superficies comerciales, centros deportivos, etc.)

Descripción: Control del sistema de ventilación (HVAC), incendios, iluminación, accesos, calidad de redes, protecciones eléctricas , sistemas IT (terminales TPV) y suministros de emergencia (UPS) .

Beneficios de implantación del IIoT: Envío de alarmas y avisos de incidencias en tiempo real, con comprobación del estado de la instalación remotamente (SmartPhone, Tablet, etc.), ahorrando tiempo y costes de desplazamientos innecesarios para el funcionamiento y el confort de los usuarios. Registro y asignación de consumos energéticos por cliente, para control de costes, automática, detección de consumos no permitidos y corte de suministros eléctricos de forma remota.

Otros ejemplo:

Ejemplo Funcionalidades Equipamiento IIoT

Las nuevas funcionalidades disponibles como estándar en la plataforma de automatización de PLCs AC500. Entre ellas se encuentran:

  • SNTP (protocolo para sincronización horaria automática )
  • SNMP (protocolo simple de administración de red)
  • SMTP(protocolo para envío de correo electrónico)
  • MySQL (gestión de base de datos)
  • FTP (protocolo para envío de archivos excel, csv, etc.) HTTP (servidor web) y HTML5
  • TCP OPEN SOCKETS y WEB SERVICES (protocolos para obtener o publicar datos de la instalación en una página web)
  • Programación en Java Script, C/C++, Node-RED, etc…

Además de estas funcionalidades, también están disponibles de serie los siguientes protocolos de comunicaciones industriales:

  • Modbus RTU, TCP/IP y IEC608-70-5-104
  • KNX IP y BACNet MS/TP/IP
  • Ethernet IP y Simatic ETH (para terminales de operador)

Estas funcionalidades permiten conectar las máquinas o instalaciones con las personas y de esta manera un usuario puede controlar y monitorizar su instalación en cualquier momento y desde cualquier lugar mediante SmartPhone, table o PC.

El  IIoT da lugar a un cambio de paradigma exitoso que interrelaciona máquinas, instalaciones, servicios y personas, con el objetivo de mejorar la productividad y la sostenibilidad para crear un mundo mejor.

Sistemas industriales en la nube

Esta evolución de servicios y recursos en la nube no ha pasado desapercibida en sistemas industriales que ya han comenzado a adoptar desarrollos sobre este tipo de tecnología con las ventajas que suponen al reducir considerablemente los costes de hardware, software y mantenimiento. Algunos casos de evolución son los siguientes:

  • Sistemas SCADA (SCADA as a Service), desarrollado entre otros por PetroCloud, posee todas las funcionalidades que puede tener un SCADA tradicional.
  • Historiadores que recogen datos (Historian as a Service), entre algunos de los desarrolladores de este servicio se encuentra ARC Advisory Group. El uso de historiadores en la nube proporciona un mayor análisis de datos.
  • Software que puede ser incluido para simular PLCs en la nube (PLC as a Service) evitando costes en soportes físicos para los propios PLCs y en la energía consumida por los mismos.
  • HMIs que muestran los datos recopilados en la nube para acceder a ellos desde cualquier parte del mundo poseyendo una conexión a Internet (HMI as a Service).

Por otro lado, algunos fabricantes del sector industrial están optando por ofrecer servicios de soporte que recojan datos y sean almacenados en la nube para poder mejorar la calidad de su servicio, los tiempos de respuesta y la disponibilidad. También se ofrecen soluciones con las que integrar la tecnología en la nube con dispositivos industriales gracias a plataformas en la propia nube.

Scada as a Service: http://petrocloud.com/solutions/scada-as-a-service/

¿Qué es IoT?

Internet de las cosas (en inglés Internet of things, abreviado IoT) es un concepto que se refiere a la interconexión digital de objetos cotidianos con Internet. En el caso que queramos interconectar los elementos de una empresa o una Industria es lo que se denomina IIOT (Industrial Internet of Things) o Industria 4.0

Definición de wikipedia:

¿Qués Internet de las Cosas?: http://www.ticbeat.com/tecnologias/que-es-el-internet-de-las-cosas/

Arduino y Raspberry Pi son dos elementos muy populares y abiertos que nos permiten de forma sencilla y económica conectar cualquier cosa a Internet. Con un Arduino y un sencillo módulo ethernet o wifi podemos conectar a Internet sensores para informar, controlar motores o bombillas desde cualquier parte del mundo o mandar un SMS o email cada vez que se abra la puerta de casa. Con una Raspberry Pi disponemos de un ordenador de bolsillo fácilmente conectable a Internet y que puede ejecutar tareas automatizadas, almacenar datos, mostrar información o hacer de pasarela para conectarnos a otras ubicaciones o dispositivos remotos.

Arduino y Raspberry Pi se han convertido en unas figuras destacadas e incluso unos de los impulsores del IoT y no por casualidad, sino que  por sus características son HW con gran capacidad para usar en proyectos de IoT.

Características de Arduino y Raspberry Pi para IoT

  • Barato y rápido prototipado.
  • HW libre y por lo tanto es modificable para que consuma menos y para hacer un HW final de características industriales.
  • Disponibilidad de HW de comunicaciones de todo tipo para conectar con Arduino. Nuevas tecnologías de comunicación llegan antes que para elementos comerciales
  • Librerías y SW públicos para su reutilización o adaptación.
  • Flexibilidad en la programación.
  • Apoyo de la comunidad.

Intersante web con publicaciones sobre IoT: https://iot-analytics.com/ 

Como afecta IoT a nuestro dia a dia: http://socialgeek.co/tecnologia/8-formas-que-the-internet-of-things-impactara-dia-dia

IoT en 5 minutos con Arduino: http://hackaday.com/2016/01/08/internet-of-things-in-five-minutes/ 

Aplicaciones de IoT: https://temboo.com/iot-applications 

7 Lecciones sobre IoT: https://www.greenbiz.com/article/7-essential-lessons-about-internet-things

IoT vs M2M

Una visión del IoT aplicado a la industria es lo denominado como Industria 4.0 o Industria conectada o IIoT que deriva del concepto de M2M (machine to machine) que se refiere al intercambio de información o comunicación en formato de datos entre dos máquinas remotas sin necesidad de conexión a Internet sino que puede ser en una red privada y crear una industria inteligente donde todos los elementos están interconectados y comparten los datos.

Definiciones de wikipedia:

Diferencias entre IoT y M2M: https://www.pubnub.com/blog/2015-01-02-iot-vs-m2m-understanding-difference/

El coche autónomo, en el que trabajan grupos como Google, BMW, Volvo o Tesla, es toda una proeza de la robótica.La conducción autónoma se basa en las comunicaciones máquina a máquina (M2M), por las que los vehículos pueden intercomunicarse con las señales, los semáforos y los otros automóviles. Todo esto también tiene mucho que ver con las smart cities. 

http://www.dr4ward.com/.a/6a00e54fd9f059883301a73dc37274970d-800wi

Interesantes artículos de Basic IoT:

Reflexiones de David Cuartielles sobre IoT en base a un paper de IBM: https://vimeo.com/299112221 

Ontología IoT https://www.w3.org/Submission/2015/SUBM-iot-lite-20151126/

Empresas en el Mercado IoT

El artículo de Matt Turck hace un buen desglose de IoT https://mattturck.com/iot2018/, que resume en esta imagen:

Imagen completa: link

Listado de compañías IoT: http://dfkoz.com/iot-landscape/

Divide los mercados o aplicaciones verticales en:

  • Personal
  • Home
  • Vehículos
  • Empresa
  • Industria

Divide las Plataformas Horizontales en:

  • Software
  • Seguridad
  • Conectividad
  • Analítica
  • Desarrollo
  • Pagos
  • Interfaces
  • 3D

Y los Building Blocks de IoT los divide en:

  • Hardware
  • Infraestructura
  • Conectividad
  • Partners

Más información: https://mattturck.com/iot2018/

Mercados Verticales IoT

La Internet de los objetos está unificada por un principio común (extracción y análisis de datos digitales del mundo físico), así como por características comunes (combinación de hardware y software), oportunidades (personalización e inteligencia, servicios en tiempo real) y retos (conectividad, seguridad, etc.).  Más allá de estas, sin embargo, áreas tan diversas como la domótica, los aviones no tripulados comerciales, la maquinaria industrial o los coches autónomos están sujetos a dinámicas industriales muy diferentes.

En este curso vamos a ver IoT desde un punto general para poder ser aplicable en cualquier sector, pero cuando se va a acometer un proyecto IoT suele ser adecuado hacer un enfoque vertical en función del sector en el que se vaya a aplicar puesto que cada sector tienen unas características concretas.

Conceptos como Industria 4.0, Smart Cities, Agricultura 2.0, Smart Home, Smart factory, etc… al final son etiquetas y en lugar de especializarse en áreas tecnológicas como sensores, comunicaciones, protocolos, sistemas, etc… pensamos como especialistas de sectores porque un mismo concepto como el de IoT se puede aplicar a muchos sectores de de una forma distinta.

El vino y el IoT http://www.elmundo.es/economia/2016/11/03/5819d37346163f9c528b45c9.html

Visión horizontal IoT

Algunos mercados verticales IoT:

  • Sanidad/Salud
  • Retail
  • Construcción
  • Gobierno/Servicios Públicos
  • Smart Cities
  • Defensa
  • Manufactura y Cadena de Suministro
  • Fabricación
  • Industria
  • Robótica Industrial
  • Automoción/Coche Conectado/Coche Autónomo
  • Movilidad Urbana (BIcis/Patinetes)
  • UAV (Vehículos Aéreos no Tripulados)
  • Logística/Transporte/Almacenes
  • Agricultura/Medio ambiente/Agricultura Vertical
  • Energía/Smart Metering y Eficiencia Energética
  • Hogar Inteligente/Domótica/Inmótica y Robótica Doméstica.
  • Hoteles/Turismo
  • eHealth/Deporte
  • Smart Grid
  • Alimentación
  • Seguridad (Alarmas)
  • Wearables
  • Fitness/Sports
  • Educación/Juguetes
  • Asistentes de voz/Plataformas de voz

Más verticales en el artículo de Matt Turck: https://mattturck.com/iot2018/

Encuesta: https://www.forbes.com/sites/louiscolumbus/2016/11/27/roundup-of-internet-of-things-forecasts-and-market-estimates-2016/#28e2ea4d292d 

Mercado Vertical Seguridad

El sector de la seguridad es uno de los más avanzados en IoT. Por ejemplo Securitas Direct:

Minut, startup sueca:

¿Qué Dispositivos podemos conectar a Internet?

La respuesta es: Cualquier cosa que podamos imaginar.

IoT en su amplio concepto es conectar a Internet cualquier cosa, teniendo sentido o sin tenerlo. Por ejemplo, podríamos conectar a internet un sofá con un Arduino y unos pocos sensores, este sofá podría tuitear que nos acabamos de sentar a ver nuestra serie favorita, simplemente detectando el peso de la persona y conectándose a una API de un servidor de streaming como netflix y comprobando que acabo de poner un capítulo de westworld.

Puede parecer una idea sin sentido, pero esta idea para Netflix podría ser muy interesante, monitorizar a la gente que ve su canal, cuántas veces se levanta el espectador o si se queda dormido.

Un ejemplo más serio de IoT es aplicar las nuevas tecnologías a elementos cotidianos que no imaginarías que tuviera sentido conectar a Internet, pero que pensándolo puede ser muy útil. Por ejemplo, pensemos en conectar a Internet un cortacésped. Con un Arduino podríamos conectar diversos sensores de temperatura del motor, temperatura externa, revoluciones del motor, consumo eléctrico (cortacésped eléctricos), gps, logs, etc… que podrían ser mandados a una plataforma del fabricante y le permitiría analizar esos datos para mejorar sus futuros productos o detectar averías de forma precoz. Podría mandar una desconexión remota en caso que en una determinada partida de fabricación se haya detectado un fallo que podría provocar daños al usuario o actualizar on-line el firmware si se detecta un fallo sin necesidad de llevar al servicio técnico.

Ejemplos de cortacesped conectados:

También podemos conectar a Internet un bastón o una botas de seguridad:

Otra aplicación de IoT usando Arduino o Raspberry Pi como herramienta, es la de obtener información externa disponible mediante APIs del open data. Un ejemplo es el de un sistema de riego automático que podemos tener en una ciudad. En los inicios de la automatización se usaron programadores conectados a una electroválvula donde indicamos las horas entre las que deseamos regar. El siguiente paso fue poner detectores de lluvia para no regar si estaba lloviendo. Otro paso fue poner sensores de temperatura y humedad ambientales y sensores de humedad de suelo que nos indican cuándo debemos regar y en qué áreas de la ciudad.

El paso más avanzado que ofrece el IoT es poder conectar todo este sistema, ya de por sí muy eficiente, a los opendata meteorológicos disponibles en Internet como el de la aemet http://www.aemet.es/es/datos_abiertos/AEMET_OpenData y que nuestro sistema obtenga datos de prediciones meteorológicas y decida no regar si la predicción de lluvia es mayor del 80% en los próximos dos días o simplemente ajustar el algoritmo de riego en función los valores de los sensores + es de los datos meteorológicos. También puede recibir alertas de tormenta o pedrisco y tomar determinadas acciones o simplemente mandar un email o SMS al propietario del huerto. ¿Podríamos hacer esto con un sistema comercial?

Esto podría extenderse a explotaciones agrícolas usando un servicio como el sistema de información agroclimática de La Rioja:

Un ejemplo práctico de esto es el proyecto Aggrofox: 

Aggrofox: IoT sensing, notifications and analytics platform for urban and large-scale agriculture with automated irrigation, using Sigfox technology: https://www.hackster.io/107329/aggrofox-large-scale-and-urban-agriculture-iot-solution-8155fe 

IoT no es que un coche se pueda conectar a Internet para ver videos de youtube, sino que este coche esté conectado a Internet para que pueda actualizar su firmware automáticamente para dotar de nuevas funcionalidades sin necesidad de ir al concesionario, pueda ser inmovilizado en caso de robo o pueda mandar datos de los parámetros internos del coche para que sean analizados y poder detectar alertas precoces de fallo y actualizar automáticamente ese fallo sin que el usuario tenga que hacer nada o avisar al usuario para que lleve el coche a reparar y parar el coche si el usuario no ha llevado a revisión al cabo de unos kms para evitar males mayores.

Interesantes reflexiones sobre IoT: 

Ejemplo de Aplicaciones IoT

El conectar dispositivos a Internet puede tener muchos usos y aplicaciones que hasta ahora no hubiéramos imaginado.

Aplicaciones de IoT: https://temboo.com/iot-applications 

http://www.dragino.com/media/k2/galleries/119/LG01-40.jpg 

Algunos ejemplos

  • Monitorización en Tiempo real
  • Avisos precoces
  • Control remoto de instalaciones
  • Eficiencia energética
  • Automatización de procesos
  • Automatización de informes/Cuadros de mando
  • Mantenimientos Predictivos
  • PRL (Prevención de Riesgos Laborales)
  • análisis de datos (data mining, etc…)
  • Monitorización y notificación
  • Business intelligence (detectar problemas comunes, medir cuellos de botella, etc…) y ayudar en el mantenimiento predictivo.
  • Integrar con el software corporativo. ERP, CRM, GMAO (Gestión del Mantenimiento Asistido por Ordenador), CMMS
  • Recoger datos y tenerlos en tiempo real por ejemplo datos para sanidad en cámaras frigoríficas.
  • Automatizar todo el papeleo siendo recogidos los datos y guardados y generados los informes.

Ejemplos de uso:

  • Estación meteorológica: medidas de temperatura y humedad exterior (tiempo real)
    • Posible caso de uso 1:controlar la temperatura interior (encender/apagar el aire acondicionado, los radiadores, etc.)
    • Posible caso de uso 2: jardinería (urbanizaciones, comerciales o incluso smart cities que gestionan grandes jardines comunitarios) el riego fácil gracias a las previsiones.
  • Sistema de alarma: basado en la detección de personas, la seguridad del edificio puede ser más fácil.
    • Posible caso de uso 1: despliegue de varias aplicaciones de alarma, sensores de personas o de llama/calor en combinación con aplicaciones para smartphones, para estar siempre conectados a edificios públicos o locales comerciales.
  • Previsión del tráfico: a partir de medidas de tráfico regulares, se pueden construir ciudades inteligentes.
    • Posible caso de uso 1: escenarios para comunicarse con la gente que está en la calle -> tráfico potencial en la carretera con sugerencias directas de alternativas -> muy útil para los servicios de entrega de alimentos en las grandes ciudades.
  • Servicios de entrega (por ejemplo, servicio de pizza): seguimiento de los vehículos de entrega, búsqueda de las rutas más rápidas y posterior análisis de marketing (basado en datos históricos) para centrar las futuras actividades de marketing en las «zonas calientes».

Interesante web donde sacar más información de IoT: https://www.insight.tech/ 

Ejemplo real de uso empresa riojana: https://www.encore-lab.com/es/proyectos/humecfol 

Buen artículo de Luis del Valle sobre Proyectos IoT: https://programarfacil.com/podcast/proyectos-iot-con-arduino/

Ejemplo Práctico IoT

Riego automático de un jardín personal, explotación agrícola o ciudad. Fases:

  • Riego manual
  • Riego automatizado por horario y remoto → Temporizador
  • Riego bajo demanda con sensores de humedad, etc… → PLCs
  • Riego sostenible aprovechando las lluvia y las previsiones → IoT

Conectar a Internet los sistemas de riego para obtener las previsiones de lluvia y programar en función de los sensores de lluvia y las previsiones de lluvia ¿cómo?:

Para ello hay que leer la documentación de la API, buscar el “comando” que nos interesa, darse de alta en el servicio para obtener la API key (contraseña) y ejecutar en nuestro sistema.

Y un paso más, predecir enfermedades de los cultivos: http://apisiar.larioja.org/help 

AEMET

Llamada desde acceso: https://opendata.aemet.es/opendata/api/prediccion/especifica/municipio/diaria/39075/?api_key=111111111111

Obtengo:

{
  "descripcion" : "exito",
  "estado" : 200,
  "datos" : "https://opendata.aemet.es/opendata/sh/b904851e",
  "metadatos" : "https://opendata.aemet.es/opendata/sh/dfd88b22"
}

Visores JSON:

Predicción diaria por municipio: https://opendata.aemet.es/dist/index.html?#!/predicciones-especificas/Predicci%C3%B3n_por_municipios_diaria_Tiempo_actual 

Ejemplo con Node-RED: https://github.com/aprendiendonodered/AEMET_Prediccion_Dias 

OpenWeatherMap

Llamada: https://api.openweathermap.org/data/2.5/forecast?q=santander&units=metric&appid=1111

Ejemplo con Node-RED: 

[{"id":"ceb7af605b6e347f","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"4f69f0089f144b46","type":"openweathermap","z":"ceb7af605b6e347f","name":"","wtype":"forecast","lon":"","lat":"","city":"santander","country":"ES","language":"en","x":260,"y":60,"wires":[["0ecd1ae54f3fc616"]]},{"id":"4a4ee3087a02a1bb","type":"inject","z":"ceb7af605b6e347f","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":60,"wires":[["4f69f0089f144b46"]]},{"id":"0ecd1ae54f3fc616","type":"debug","z":"ceb7af605b6e347f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":410,"y":60,"wires":[]}]