Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Iot Plataformas de Bajo Coste TFM SergioPonsVillanueva
Iot Plataformas de Bajo Coste TFM SergioPonsVillanueva
i
En primer lugar, quiero agradecerle a mi tutor, Dr. Eloy Irigoyen Gordo, por su ayuda y disposición
durante el desarrollo de este trabajo final de máster.
También quiero agradecer al GICI por brindarme todos los recursos y herramientas que fueron
necesarios para llevar a cabo el proceso de investigación.
y en especial;
A mis padres, Ana y Ramón, por haber sido un apoyo constante a lo largo de mi vida.
ii
RESUMEN
iii
Resumen
En este Proyecto Fin de Máster se plantea y resuelve la implementación de un sistema
de captura de señales fisiológicas en una persona, para poder enviarlas a un recurso remoto
donde procesarlas, analizarlas y extraer información.
Se ha seguido una estructuración de cuatro niveles basada en el modelo OSI, todo ello construido
desde un planteamiento de uso de plataformas de bajo coste y software de libre acceso (open
source).
En primer lugar, se ha realizado un estudio minucioso de las distintas alternativas existentes en
relación a la captura de señales fisiológicas con dispositivos tipo Arduino Nano, dónde el
Arduino Nano 33 IoT fue seleccionado. Posteriormente, se han analizado los distintos protocolos
de comunicación y middlewares existentes, descartando las opciones no válidas y seleccionando
WiFi y MQTT como protocolos de comunicación y Eclipse Mosquitto como middleware MQTT
(servidor/broker). Se ha seleccionado InfluxDB como base de datos y Node-RED como
herramienta puente entre el broker y la base de datos. Acto seguido, se ha utilizado Grafana
como software para la monitorización de los datos recopilados.
Por último, se han realizado unos primeros estudios de la gestión de avisos y alertas mediante
Node-RED y se han realizado pruebas iniciales con otro dispositivo basado en el ESP32 de
Espressif.
Como resultado, se ha obtenido un sistema IoT capaz de almacenar y monitorizar en tiempo real
señales biológicas.
iv
INDICE DE CONTENIDOS
v
Índice de contenido
AGRADECIMIENTOS…………………………………………………………….….. i
RESUMEN………………………………………………………………..………..….. iii
ÍNDICE DE CONTENIDO………………………………………………………….… v
ÍNDICE DE FIGURAS..…………………...…………………………………….…… ix
1 INTRODUCCIÓN ................................................................................................... 1
1.1 Contexto actual. .................................................................................................... 2
3 BENEFICIOS........................................................................................................... 8
3.1 Beneficios sociales ................................................................................................. 8
3.2 Beneficios económicos .......................................................................................... 8
3.3 Beneficios técnicos ................................................................................................ 8
vi
5.1.3 Tabla comparativa ........................................................................................... 23
5.2 Sensores .............................................................................................................. 24
5.3 Protocolos de comunicación ............................................................................... 25
5.3.1 Capa física y de enlace .................................................................................... 25
5.3.2 Capa de aplicación........................................................................................... 26
5.4 Brokers................................................................................................................. 28
5.4.1 Mosquitto ........................................................................................................ 28
5.4.2 EMQ ................................................................................................................. 28
5.4.3 Tabla comparativa - Brokers ........................................................................... 29
5.5 Servidores de almacenamiento de datos ............................................................ 29
5.5.1 InfluxDB .......................................................................................................... 29
5.5.2 Tabla comparativa – Bases de datos ............................................................... 30
5.6 Aplicaciones ......................................................................................................... 30
5.6.1 Node-RED ........................................................................................................ 30
5.6.2 Visualización de datos - Grafana ..................................................................... 31
5.7 Selección final ...................................................................................................... 32
5.7.1 Resumen de la selección final ......................................................................... 35
vii
9 CONCLUSIONES Y TRABAJOS FUTUROS ................................................... 74
9.1 Conclusiones ........................................................................................................ 74
9.2 Trabajos Futuros .................................................................................................. 75
viii
INDICE DE FIGURAS
ix
Ilustración 1 - Arquitectura de alto nivel IoT de cuatro niveles. ............................................... 10
Ilustración 2 - Arduino Nano 33 IoT.[17] ................................................................................. 21
Ilustración 3 - Arduino Nano 33 BLE (izq.) y Arduino Nano 33 BLE Sense (dcha.).[69][70] 21
Ilustración 4 - Arduino Nano RP2040 Connect [73]................................................................. 22
Ilustración 5 – Espressif ESP32 DevKit [75] ............................................................................ 22
Ilustración 6 - AZDelivery ESP32 ESP-WROOM-32 NodeMCU [77].................................... 23
Ilustración 7 - Sensor GY-MAX30100 [79] ............................................................................. 24
Ilustración 8 - Sensor LM324 [80] ............................................................................................ 25
Ilustración 9 - Funcionamiento del protocolo MQTT [4]. ........................................................ 27
Ilustración 10 - Dashboard de Node-RED [88]. ........................................................................ 31
Ilustración 11 - Dashboard Grafana [65]................................................................................... 31
Ilustración 12 - Plugins Grafana [65]. ....................................................................................... 32
Ilustración 13 - Arduino Nano 33 IoT.[17] ............................................................................... 32
Ilustración 14 - Imagen de arranque de Arduino IDE [16]. ...................................................... 32
Ilustración 15 – Logo de Mosquitto . ........................................................................................ 33
Ilustración 16 – Sensor GY-MAX30100 [79] ........................................................................... 33
Ilustración 17 - Grove GSR [80]. .............................................................................................. 33
Ilustración 18 - Portátil Asus ROG Strix G531Gv.[89] ............................................................ 34
Ilustración 19 - Máquina virtual VMware v16.[45] .................................................................. 34
Ilustración 20 - Ubuntu 20.04.2 LTS [90] ................................................................................ 34
Ilustración 21 - Lodo de Node-RED [57]................................................................................. 35
Ilustración 22 – Logo de InfluxDB [53].................................................................................... 35
Ilustración 23 – Logo de Grafana [65]. ..................................................................................... 35
Ilustración 24 - Elementos de la solución final. ........................................................................ 36
Ilustración 25 – Elementos de la solución final clasificados en sus niveles. ............................ 36
Ilustración 26 - Esquema solución final. ................................................................................... 36
Ilustración 27 – Flujograma del código proporcionado por GICI (GICI.ino). .......................... 39
Ilustración 28 - Flujograma de la prueba de conexión WiFi (WifiScan.ino) ............................. 40
Ilustración 29 – Flujograma de la lectura del sensor MAX30100 (Oximetro_y_pulsimetro.ino).
........................................................................................................................................... 42
Ilustración 30 – Monitorización del ritmo cardíaco y oxigenación en sangre. ......................... 42
Ilustración 31 - Esquema de conexión del sensor MAX30100 [17][79]. .................................. 43
Ilustración 32 - Flujograma del sensor LM324 (GSR.ino). ...................................................... 43
Ilustración 33 - Monitorización de la respuesta galvánica de la piel (GSR). ............................ 44
x
Ilustración 34 - Esquema de conexión del sensor LM324 (Grove GSR) [17][80]. ................... 44
Ilustración 35 - Flujograma de publicación (WifiSimpleSender.ino). ...................................... 46
Ilustración 36 – Visualización de la ejecución del código de publicación. ............................... 47
Ilustración 37 - Visualización de datos con MQTTLens. ......................................................... 47
Ilustración 38 – Flujograma de subscripción (WiFiSimpleReciver.ino) ................................... 48
Ilustración 39 - Visualización de la ejecución del código de subscripción. .............................. 49
Ilustración 40 - Visualización de datos publicados con MQTTLens. ....................................... 49
Ilustración 41 - Flujo de trabajo en Node-RED (izq.) y monitor serie Arduino (dcha.) ........... 50
Ilustración 42 - Ficheros creados en RaspberryPi. .................................................................... 50
Ilustración 43 - Flujograma del código TFM_v2.ino ................................................................ 53
Ilustración 44 - Broker Mosquitto en máquina virtual. ............................................................. 54
Ilustración 45 - Vista detallada de los topics enviados al broker Mosquitto en la máquina
virtual. ............................................................................................................................... 54
Ilustración 46 - Flujo realizado en Node-RED. Tercera prueba................................................ 54
Ilustración 47 - Datos almacenados en InfluxDB. .................................................................... 55
Ilustración 48 - Grafana. Visualización de datos. ..................................................................... 55
Ilustración 49 – Flujograma de Velocidad_GSR.ino ................................................................ 56
Ilustración 50 - Prueba de velocidad de adquisición. Archivo wiring.c por defecto................. 57
Ilustración 51 - Prueba de velocidad de adquisición. Archivo wiring.c modificado. ............... 57
Ilustración 52 – Prueba de velocidad. Escenario final. ............................................................. 58
Ilustración 53 - Flujo Node-red. Escenario final. ...................................................................... 58
Ilustración 54 - Monitorización del GSR y el número de paquetes. Escenario final. ............... 59
Ilustración 55 - Monitor serie. Escenario final. Modificaciones de rendimiento. ..................... 59
Ilustración 56 - Flujo Node-RED con dos dispositivos............................................................. 60
Ilustración 57 - Base de datos InfluxDB. Varios dispositivos. ................................................. 60
Ilustración 58 - Broker Mosquitto. Varios dispositivos. ........................................................... 61
Ilustración 59 - Node-red. Envío de alertas............................................................................... 61
Ilustración 60 - Mensaje de alerta. ............................................................................................ 62
Ilustración 61 - Az-Delivery ESP32-WROOM-32 NodeMCU [77]. ........................................ 62
Ilustración 62 - Funcionamiento de los núcleos del ESP32. ..................................................... 63
Ilustración 63 - Esquema de conexión ESP32 con dos ledes [98]. ........................................... 63
Ilustración 64 – Monitorización del estado de los ledes. .......................................................... 63
xi
xii
INDICE DE TABLAS
XIII
Tabla 1 - Comparación de dispositivos IoT. ............................................................................. 24
Tabla 2 - Análisis comparativo de los protocolos de capa física y de enlace.[4][84][83]......... 26
Tabla 3 - Análisis comparativo de los protocolos de la capa de aplicación [4][48]. ................. 28
Tabla 4 - Comparativa entre brokers MQTT [20][86]. ............................................................. 29
Tabla 5 – Comparativa de bases de datos de series temporales [52] ........................................ 30
XIV
XV
Capítulo 1: Introducción
CAPÍTULO 1
INTRODUCCIÓN
0
Capítulo 1: Introducción
1 INTRODUCCIÓN
Hace años que vivimos en la era de la información, donde todo está conectado a Internet.
Desde ciudades inteligentes (SmartCities) hasta relojes inteligentes (SmartWatches), se pretende
dotar de una denominada “inteligencia” a los dispositivos para obtener información y que
puedan comunicarse entre ellos para trabajar de forma conjunta.
En 2009, surgió el Internet de las Cosas o IoT (Internet of Things) cuando Kevin Ashton,
profesor del Instituto Tecnológico de Massachusetts (MIT), utilizó el término por primera vez,
aunque el concepto ya se utilizó en 1990.[1] El IoT se basa en “una red de objetos físicos (cosas)
que incorporan sensores, software y otras tecnologías con el fin de conectar e intercambiar
datos con otros dispositivos y sistemas a través de Internet”. [1]
Aunque actualmente se fabrican objetos físicos que incorporan sensores capaces de comunicarse
mediante WiFi y/o Bluetooth, como toda novedad en el mercado, tienen un coste elevado en
comparación a los que carecen de esas capacidades. Es por ello que en los últimos años ha habido
un auge de la creación de microcontroladores o plataformas de desarrollo de bajo coste para
realizar proyectos caseros o DIY, por sus siglas en inglés (Do It Yourself), y de esta forma
incorporar elementos que en un principio carecían de las capacidades IoT a la red de Internet.
Hoy en día el IoT se aplica en diversos campos como la industria, la domótica, la agricultura o
la salud. En base al campo de aplicación y teniendo en cuenta los dispositivos de los que se
disponen, se han generado multitud de plataformas digitales dedicadas a la generación de nuevas
funcionalidades, herramientas y proyectos que impulsen aún más su uso.
Soluciones orientadas al uso sanitario que utilizan estos dispositivos están proliferando tanto
en el mercado como en el mundo académico. Uno de los principales desafíos que presentan es
el tratamiento de la información recopilada del usuario/paciente. El protocolo de comunicación
escogido debe ser seguro, estable y robusto. Al trabajar con información sensible, se debe
garantizar en todo momento la confidencialidad y seguridad de los datos manejados.
Con el fin de lograr desarrollar una solución económica y accesible, tanto en el ámbito socio-
sanitario, como en el de atención a peronas dependientes, incidiendo principalmente en la
comunicación entre dispositivos y el servidor, este TFM se ha estructurado en los siguientes
capítulos:
- Capítulo 1: Introducción. En este capítulo se realiza una presentación del proyecto,
donde se incluye el contexto.
- Capítulo 2: Objetivos y alcance.
- Capítulo 3: Beneficios.
- Capítulo 4: Estado del arte. Aquí se detalla el estado de los últimos años en relación a
la captura de señales fisiológicas disponibles, tanto propuestas, como soluciones
comercializadas.
- Capítulo 5: Análisis de alternativas. Este capítulo estudia en detalle las propuestas
que mayor relevancia tienen para este trabajo, permitiendo seleccionar posteriormente
para cada elemento que conforma el escenario de trabajo, aquella que cumpla con los
requisitos fundamentales de una comunicación estable, segura y robusta. Para finalizar
este capítulo, se indican los elementos finales con los que se ha realizado el trabajo.
- Capítulo 6: Desarrollo de trabajo. Este capítulo se centra en la implementación de los
elementos seleccionados en el capítulo anterior. Se han realizado las pruebas de
1
Capítulo 1: Introducción
2
Capítulo 2: Objetivos y alcance
CAPÍTULO 2
OBJETIVOS Y ALCANCE
3
Capítulo 2: Objetivos y alcance
2 OBJETIVOS Y ALCANCE
2.1 Objetivos
En este TFM se plantea dar continuidad a una línea de trabajo en el Grupo de Investigación
de Control Inteligente (GICI), llegando a implementar un sistema integral que pueda ofrecer
resultados de aplicación real, a través de un primer prototipo.
El objetivo principal es la validación de una solución capaz de capturar y monitorizar variables
fisiológicas basado en tecnologías IoT y plataformas de bajo coste.
Los objetivos parciales a abordar en este TFM son los siguientes:
Estudiar las capacidades de medida y gestión de los datos del dispositivo IoT
seleccionado para lograr obtener la información deseada lo más rápida y
eficientemente posible de forma que se pueda exprimir todo su potencial. Para ello
se estudiarán las características intrínsecas del dispositivo y se realizarán pruebas
para determinar dónde se localizan las limitaciones físico-temporales del mismo.
Realizar las primeras pruebas de una implementación que tras analizar los datos
ofrezca un resultado en cuanto a la identificación de eventos patológicamente
anómalos o peligrosos. Complementarlo con un sistema generador de alarmas y
comunicación, tanto al usuario, como a las personas de su entorno médico y social.
4
Capítulo 2: Objetivos y alcance
2.2 Alcance
5
Capítulo 2: Objetivos y alcance
6
Capítulo 3 Beneficios
CAPÍTULO 3
BENEFICIOS
7
Capítulo 3 Beneficios
3 BENEFICIOS
Este TFM utiliza una metodológica que permite determinar la viabilidad de los
dispositivos de bajo coste, en concreto el Arduino Nano IoT 33, en función de los requisitos y
escenario determinados.
De esta forma, se pretende comprobar si el dispositivo seleccionado para la realización del
proyecto de GICI es viable. Obtener una valoración positiva como resultado del estudio
permitirá la continuación del proyecto en el cual se aplicarán técnicas inteligentes relacionadas
con el Machine Learning y Deep Learning.
8
Capítulo 4: Estado del Arte
CAPÍTULO 4
9
Capítulo 4: Estado del Arte
La realización de un proyecto IoT tiene que tener en cuenta una serie de elementos
hardware y software para su correcto funcionamiento.
Un estudio exhaustivo del marco tecnológico del IoT es realizado por D. Yacchirema Vargas [4]
en su tesis doctoral. Esta detalla las características, componentes fundamentales de construcción,
arquitecturas de referencia, desafíos y aplicaciones potenciales del IoT.
Siguiendo la siguiente arquitectura de alto nivel de cuatro etapas o niveles [4] se ha realizado un
estudio del arte de los diferentes elementos que las componen.
En el caso de este TFM, los elementos que forman parte de su arquitectura son:
1. Nivel de percepción:
a. Dispositivo: Es el hardware principal donde se implementará el control a
nivel de Edge Computing. También puede ser software en caso de usarse una
máquina virtual. La elección del dispositivo restringe la opción de la
plataforma o marco de desarrollo con la que se puede trabajar.
b. Sensor: Son los elementos hardware encargados de obtener las variables
fisiológicas para posteriormente trabajar con ellas.
2. Nivel de conectividad:
a. Protocolo de comunicación: Determina las normas de comunicación entre
los distintos elementos que conforman el proyecto. Estos protocolos engloban
las capas física/enlace, red/transporte y aplicación del modelo OSI.
3. Nivel de servicio:
a. Bróker de mensajería: Software intermediario entre dispositivo de bajo
coste y el servidor de datos. Se encarga de la distribución de datos.
b. Servidor de datos: Elemento software y hardware donde se almacenan los
datos recopilados por el sensor tras haberse establecido la conexión a través
del broker.
4. Nivel de aplicación:
a. Software complementario: Software auxiliar que ha servido de ayuda y/o
mejora para la implementación de la solución creada.
A continuación, se describe información relevante reciente para cada uno de ellos.
10
Capítulo 4: Estado del Arte
4.1.1 Dispositivos
del sistema operativo (SO) que posea el teléfono móvil. Una comparativa de todos estos
productos puede encontrarse en [15].
Sin embargo, un aspecto negativo de estos productos comercializados es que no se dispone de
acceso al software, abstrayendo totalmente al consumidor de cómo están programados, de forma
que únicamente se centre en su uso. Al no ser de libre acceso, no se puede ver cómo han hecho
el proceso, ni obtener la documentación para entender totalmente su funcionamiento.
Empresas dedicadas a la creación de dispositivos de bajo coste, normalmente placas de
microcontrolador, permiten el desarrollo de proyectos OpenSource. El hecho de tener acceso a
toda la documentación y no estar sujeto a las restricciones de confidencialidad de una empresa,
permite que se creen plataformas digitales en las que compartir el trabajo realizado y ayudarse
mutuamente.
Una de las empresas de desarrollo de software y/o hardware más conocidas es Arduino [16], la
cual posee una larga lista de placas de microcontrolador con distintas funcionalidades. Dentro
de los modelos disponibles, destaca el Arduino Nano 33 IoT [17], que como el nombre indica,
tiene como objetivo su uso en proyectos relacionados con el Internet de las Cosas. Al mismo
tiempo, Arduino posee una plataforma de desarrollo propia, Arduino IDE [18], y su propio foro,
Arduino Forum [19].
Como con todo gran éxito, existen dispositivos que le hacen la competencia, el trabajo realizado
por R. Requena recoge algunos de ellos [20], como Adafruit [21] y Sparkfun [22]. Ambas crean
sus propias placas de microcontrolador, pero hacen uso del entorno Arduino IDE para su
programación en la mayoría de ellas.
Otras empresas, como Bitalino [23], crean soluciones más orientadas específicamente al ámbito
de la salud. Dispone entre sus productos, placas all in one (todo en uno) que incorporan de todo
lo necesario para trabajar con señales biológicas como el microcontrolador, los sensores y los
actuadores. Sin embargo, también obliga al consumidor a utilizar su propio software para la
visualización de datos en tiempo real.
Por otro lado se encuentra Espressif Systems [24] que se dedica más a la fabricación de chips y
módulos de comunicación. Dos de sus modelos más destacados son el ESP8266 [25] y su versión
más reciente, el ESP32 [26]. A partir de ellos, otras empresas fabrican sus propias placas de
desarrollo con las que se ha realizado los trabajos académicos más recientes. La empresa ofrece
su propio Development Framework (marco de desarrollo), ESP-IDF [27], no obstante también
es posible utilizar Arduino IDE realizando una serie de pasos para importar las librerías
necesarias.[28]
La empresa Raspberry Pi [29] también dispone de dispositivos de bajo coste, sin embargo, a
diferencia de los anteriores, que son microprocesadores, estos son microcontroladores. Una
comparativa entre microcontroladores y microprocesadores es realizada por el autor E. Crespo
[30].
Existen libros dedicados a la realización de proyectos IoT con Arduino, como “IoT: Building
Arduino-Based Projects” [31], “Beginning Arduino Nano 33 IoT” [32], “Building Arduino
Projects for the Internet of Things” [33]. Al igual que con Arduino, los modelos de Espressif
también cuentan con libros dedicados a su uso en proyectos. Algunos ejemplos son “Internet of
Things Projects with ESP32” [34] o “Interget of Things with ESP8266” [35].
Si bien no son libros especializados en el IoMT, sirven de gran utilidad para adentrarse en esta
temática del IoT y permiten realizar los primeros pasos que, aunque a simple vista parezcan
sencillos, son vitales para el desarrollo de trabajos de mayor complejidad.
También hay una gran variedad artículos de investigación que utilizan dispositivos Arduino para
proyectos IoT relacionados con la monitorización de pacientes [36].
12
Capítulo 4: Estado del Arte
Por otro lado, también existen investigaciones y trabajos realizados con los modelos basados en
los chips de Espressif [37][38][39]. O páginas web dedicadas a los modelos ESP32 y ESP8266
que contienen toda la información para realizar proyectos [40][41].
El trabajo final de master realizado por A. Martín Muñoz [42] presenta un análisis del
funcionamiento de distintos tipos de redes formadas por dispositivos ESP8266. Aunque el
estudio de topologías no entra dentro del ámbito de estudio de este proyecto, es necesario tener
en cuenta las capacidades que presenta el dispositivo para futuras aplicaciones y desarrollos.
4.1.2 Sensores
Existe una gran variedad de sensores, sin embargo, los que aquí conciernen son aquellos
utilizados para la obtención de bioseñales. Estos biosensores permiten monitorizar parámetros
del cuerpo humano y realizar pruebas tales como la electromiografía (EMG), electrocardiografía
(ECG), actividad electrodermal (EDA), electroencefalografía (EEG), fotopletismografía (PPG)
o respiración (PZT).
La combinación del IoT con estos sensores crean la posibilidad de realizar aplicaciones que
incluyen diagnósticos clínicos y monitorizaciones de diversas actividades como pueden ser el
ritmo cardiaco, salud femenina, glucosa o el sueño. [3].
Un estado del arte de los sensores para el IoMT es realizado por P. Ray et al. [3]. Este trabajo
posee tablas comparativas donde se muestran características importantes para su selección como
el nombre del producto, su fiabilidad para el testeo, si tiene soporte IoT, su propósito de uso, la
usabilidad de los datos recolectados, la energía consumida y el coste comparado con el resto de
sensores pertenecientes a la misma tabla.
En Bitalino se pueden encontrar kits [46] que, en función del modelo, incorporan unos sensores
u otros. Sin embargo, no se especifica el modelo en ninguna fuente de información accesible, al
menos, sin realizar la compra del producto que, debido a su alto coste, no están al alcance de
todo el mundo.
El trabajo realizado por F.Medina y A. Paternina [47] se realiza el diseño y construcción de un
oxímetro de pulso inalámbrico con un sensor MAX30100.
13
Capítulo 4: Estado del Arte
Con el objetivo en mente de obtener mejores aplicaciones IoT, se están diseñando nuevas
tecnologías y rediseñando otras existentes para satisfacer las necesidades que tienen los
dispositivos inalámbricos IoT. Algunos de estos requisitos son: rango de cobertura amplio,
costos operativos y de implementación o el bajo consumo de energía [4].
En la capa física y de enlace, destacan el uso de Wi-Fi, WiFi HaLow, Bluetooth, ZigBee,
LoRaWAN entre otros. Son los protocolos y mecanismos de comunicación tradicionales para
los sensores que más se usan para la conectividad de dispositivos IoT, cada una con sus pros y
sus contras.
14
Capítulo 4: Estado del Arte
(Message Queing Telemetry Transport). Al final, tras la comparativa, el autor concluye que
MQTT es el protocolo más indicado para proyectos IoT.
Existen libros que realizan comparativas más exhaustivas como en “IoT: Building Arduino-
Based Projects” [31] que además de comparar los tres protocolos mencionados en el párrafo
anterior, también se incluyen los protocolos HTTP (Hypertext Transfer Protocol), UPnP
(Universal Plug and Play) y CoAP (Constrained Application Protocol). U otros como “Building
Arduino Projects for the Internet of Things.” [33] que directamente se centran en las dos
posibilidades más factibles, HTTP y MQTT, en función del objetivo que tenga el proyecto.
Dada la importancia del protocolo MQTT para las soluciones IoT, hay libros dedicados
exclusivamente a dicho protocolo. El libro “MQTT Essentials – A Lightweight IoT Protocol”
[50] permite al lector adentrarse en la utilización de este protocolo y conocer todas las
posibilidades que ofrece.
Múltiples trabajos de investigación también seleccionan MQTT como protocolo de
comunicación para proyectos IoT relacionados con la monitorización en tiempo real de la salud
[37][39][51].
El trabajo realizado por I. Ibiricu Elizondo [39] muestra la importancia de disponer de servidor
DHCP (Dynamic Host Configuration Protocol) en el caso de tener que administrar múltiples
direcciones IP. Como su nombre indica, es un protocolo de configuración dinámica del host
basado en un modelo cliente/servidor que proporciona automáticamente a un host IP parámetros
relacionados con la configuración de red como dirección IP, puerta de enlace predeterminada o
máscara de subred. Dado que no puede haber dos dispositivos con los mismos parámetros
mencionados, su utilización simplifica el proceso y evita posibles errores humanos en el caso de
introducirlos manualmente.
15
Capítulo 4: Estado del Arte
considera requisitos imprescindibles, siendo motivo justificado para descartar un broker como
opción en el caso de no cumplir alguno de ellos.
Por otro lado, R. Roberto [20] toma como protocolo de comunicación MQTT, por lo que se
centra únicamente en realizar una comparativa de las características que ofrecen los brokers
MQTT. En esta comparativa, además de los brokers mencionados en el párrafo anterior, incluye
otros como RSMB, MQTT.js o Mosca.
El libro “MQTT Essentials – A Lightweight IoT Protocol”[50] ofrece una serie de proyectos
realizados con el broker Mosquitto en varios sistemas operativos, Linux, macOS y Windows.
El trabajo realizado por I. Ibiricu [39], en los últimos año ha crecido exponencialmente el
uso de bases de datos temporales (Time Series Databases) debido su uso en aplicaciones IoT o
Big Data . Muchas de ellas son de código abierto, lo que permite su uso gratuito.
Lo que se pretende con ellas es almacenar grandes cantidades de datos, normalmente generados
en tiempo real, en el histórico para posteriormente visualizarlos con otra herramienta o trabajar
con ellos [52].
W. Nazco [52] realiza un estudio detallado sobre las diferentes bases de datos temporales
disponibles. Algunas de las más utilizadas son InfluxDB [53], Graphite [54], OpenTSDB [55]
o Prometheus [56]. Tras realizar la comparativa de sus características, la base de datos
seleccionada por el autor es InfluxDB.
4.4 Nivel de aplicación
16
Capítulo 4: Estado del Arte
El trabajo realizado por I. Ibiricu Elizondo [39] identifica ESPHome como la mejor opción, ya
que mediante él es posible controlar y configurar múltiples dispositivos desde la configuración
de un archivo YALM.
ESPHome soporta múltiples sensores, y posee de un listado de sensores típicos para la
automatización del hogar para poder configurarlos. Lo que lo hace interesante es que también
tiene una opción de “custom components”, permitiendo, mediante código C++, escribir la
programación necesaria para aquellos sensores que no estén listados.
En ocasiones es necesario ver en persona los valores que se están tomando con los
sensores. Existen múltiples herramientas de visualización de datos que nos permiten
monitorizarlos y de forma que la información esté plasmada de forma más clara.
Son representaciones gráficas de los datos almacenados en la base de datos como diagramas de
barras, mapas, diagramas de quesos, etc.
El trabajo realizado por W. Nazco Torres [52] realiza una comparativa entre algunas de estas
herramientas que permiten la visualización de datos mediante la producción de cuadros de
mando y basadas en series temporales, en concreto Grafana [65] y Chronograf.
4.5 Conclusión
En este capítulo se ha visto como el despliegue de una solución IoT es necesario tener
conocimientos de varias disciplinas, como redes de telecomunicaciones, computación en los
distintos niveles (Edge, Fog, Cloud) o seguridad informática. Son muchos los elementos a tener
en cuenta, pudiéndose realizar estudios dedicados a la realización de comparativas de cada uno
de ellos.
En el siguiente capítulo se realizará un estudio comparativo de las diferentes alternativas de cada
elemento tenidas en cuenta para realización de este proyecto.
17
Capítulo 4: Estado del Arte
18
Capítulo 5: Análisis de alternativas
CAPÍTULO 5
ANÁLISIS DE ALTERNATIVAS
19
Capítulo 5: Análisis de alternativas
5 ANÁLISIS DE ALTERNATIVAS
Siguiendo la misma estructura que la establecida en el estado del arte, en este capítulo se
estudian las distintas posibilidades de selección en cada elemento del escenario de trabajo,
comparando sus características, para formar parte de la solución final y realizar el desarrollo de
este TFM.
El domino de aplicación de este proyecto se centra en el campo de la salud y medicina. Teniendo
esto en cuenta y considerando la información recopilada en el Estado del Arte (capítulo 4),
únicamente se han realizado comparativas de las distintas alternativas que pueden llegar a ser
válidas para el ser seleccionadas como solución final.
Puesto que este trabajo es una continuación de lo realizado en el GICI [66], algunos de los
elementos que conforman la selección final han sido determinados previamente. Aun así, se ha
considerado relevante mostrar una comparativa de los mismos con otras opciones competitivas.
Esto permite verificar si los elementos seleccionados son válidos o si sería necesario
modificarlos en trabajos futuros.
En función de los requerimientos establecidos a partir de los objetivos definidos al inicio para
este proyecto, a continuación, se procede a la realización de la comparativa de los distintos
elementos que conformarán la solución final propuesta.
NOTA: Información más detallada de cada apartado puede encontrarse en los Anexos.
5.1 Dispositivos
5.1.1 Arduino
20
Capítulo 5: Análisis de alternativas
Dentro de las posibilidades que ofrece para el desarrollo de aplicaciones orientadas al IoT, las
placas a considerar como posible solución para este proyecto son las siguientes:
- Arduino Nano 33 IoT
- Arduino Nano RP2040 Connect
El AN-33IoT salió al mercado en 2019 como la versión reducida de la placa MKR WiFi
1010 [67]. Para lograr reducir sus dimensiones y precio, este modelo no posee cargador de
batería ni compatibilidad con escudos [68].
Es considerado por la propia empresa Arduino como “el punto de entrada más fácil y barato
para mejorar los dispositivos existentes (y crear otros nuevos) para formar parte del IoT”[17].
Por otro lado, dentro de la familia Nano 33, también existen las placas Arduino Nano 33 BLE
[69] y su versión con más sensores incluidos, Arduino Nano 33 BLE Sense [70]. Poseen, entre
otras cosas, un procesador diferente al del AN-33IoT, pero la principal característica que los
descarta como opción válida para este proyecto es su ausencia de capacidad de comunicación
WiFi sin el uso de escudos. En la propia página de Arduino se pueden encontrar comparativas
detalladas entre estos tres dispositivos [71][72].
Ilustración 3 - Arduino Nano 33 BLE (izq.) y Arduino Nano 33 BLE Sense (dcha.).[69][70]
21
Capítulo 5: Análisis de alternativas
5.1.2 Espressif
Los productos desarrollados por la marca Espressif tienen dos posibles formas: chip o
módulo. Haciendo uso de ellos, se pueden encontrar en el mercado distintas placas creadas por
diversas compañías como Adafruit o Sparkfun, incluida la propia Espressif. Un listado de las
placas originales se puede encontrar en la propia página de productos de Espressif para las dos
series [75].
El ESP32 es el sucesor del ESP8266, lo que le permite hacer como mínimo todo lo que hacía su
versión antigua. Por este motivo se descarta el uso de la versión ESP8266 como posible solución,
sin embargo, toda la documentación relacionada con proyectos que lo utilizan es válida para el
ESP32.
El ESP32, al igual que su versión anterior, es un chip/módulo de bajo coste con WiFi y Bluetooth
que le permite realizar aplicaciones IoT [76] .
Dentro de las distintas posibilidades a la hora de estudiar las características de una placa para
cada familia, se ha optado por las distribuidas por la empresa Az-Delivery [77]. Obtener los
modelos originales no era factible por motivos de presupuesto y disponibilidad. Todas las placas
22
Capítulo 5: Análisis de alternativas
El modelo de la ilustración superior tiene un procesador ESP32 con una CPU de dos núcleos
Tensilica LX6, con una frecuencia de reloj de hasta 240 MHz, 448KB de ROM y 512 KB de
SRAM. La frecuencia CPU del microcontrolador puede ser modificada desde ESP-IDF o el
Arduino IDE, pero para este último se requiere realizar la instalación manual de las librerías
necesarias para su uso [78].
Posee un sensor de efecto Hall para detectar cambio en el campo magnético de su entorno y un
sensor de temperatura con un rango de 40ºC a 125ºC [78].
23
Capítulo 5: Análisis de alternativas
5.2 Sensores
24
Capítulo 5: Análisis de alternativas
En este apartado se realiza una comparativa para los distintos protocolos de comunicación
IoT para cada capa del modelo OSI.
Bluetooth
LoRaWAN
LoRaWAN es una especificación de una red LPWAN (Low Power Wide Area Network).
Fue creada con la idea de comunicar dispositivos de bajo coste y bajo consumo alimentados por
baterías [83]. Se ha optimizado de forma que se pueda aplicar a grandes redes con cantidades
masivas de dispositivos (del orden de millones) de forma que se pueda aplicar tanto en el entorno
rural como en el urbano.
25
Capítulo 5: Análisis de alternativas
Zigbee
MQTT
26
Capítulo 5: Análisis de alternativas
casi en tiempo real. Trabaja sobre TCP/IP, lo que asegura que los mensajes se reciban en el
mismo orden y sin errores, y soporta comunicaciones Máquina-a-Máquina (M2M) [49][50].
Fue ideado para ser ligero, simple, abierto y fácil de implementar de forma que se pudiera usar
en redes poco fiables y poco ancho de banda con dispositivos de recursos limitados de
procesamiento y memoria, lo que lo hace ideal para aplicaciones IoT [20].
Destacan dos entidades o actores dentro de la red: el broker y el cliente (pueden ser múltiples
clientes). El broker es un nodo central que se encarga de la recepción de los mensajes enviados
por los clientes asignándoles un nombre de evento (topic) para después redireccionarlos a
aquellos otros clientes que estén subscritos a dichos topics. Por otro lado, un cliente puede ser
cualquier elemento que pueda interactuar con el broker para enviar (publicar) o recibir
(subscribirse) mensajes [42]. Casi todas las plataformas importantes basadas en la Nube (Cloud)
lo soportan [48].
Es posible establecer relaciones padre-hijo gracias a su estructura jerárquica de topics. Cada
topic puede ser separado en varios niveles, como un sistema de carpetas. Se puede acceder a
múltiples topics al mismo tiempo mediante el uso de comodines (# o +). Es fiable, es decir,
garantiza la confiabilidad de sus transmisiones entre el broker y el cliente pub/subs.
Dependiendo del nivel de calidad de servicio QoS (Quality of Service) [4].
Tiene mecanismos de notificación antes desconexiones inesperadas, como el último deseo y
testamento (last will and testament). Soporta que el almacenamiento persistente de mensajes por
parte del broker. Y la conexión TCP puede cifrarse mediante SSL/TSL (Secure Sockets Layer /
Transport Layer Security) [20].
Su principal desventaja es que es un protocolo centralizado. A costa de aumentar la complejidad
del sistema, es posible desplegar réplicas como solución a este problema [49].
La siguiente imagen es una representación del funcionamiento del protocolo MQTT [4]:
La siguiente tabla es una comparativa entre los protocolos más usados con aplicaciones IoT:
27
Capítulo 5: Análisis de alternativas
5.4 Brokers
5.4.1 Mosquitto
Eclipse Mosquitto se define como “un broker de mensajes de código abierto (con licencia
EPL/EDL) que implementa las versiones 5.0, 3.1.1 y 3.1 del protocolo MQTT” [85]. Se trata de
un broker ligero y que se puede utilizar un una gran variedad de dispositivos, desde ordenadores
de placa única de baja potencia como Raspberry Pi, hasta servidores más complejos [85].
Es portable, fácil de instalar y está disponible para una amplia gama de plataformas. Además
permite trabajar con MQTT simple, MQTT sobre TLS, MQTT sobre TLS (con certificado de
cliente), MQTT sobre WebSockets y MQTT sobre WebSockets con TLS [85].
5.4.2 EMQ
Este software es uno de los últimos servidores/broker que han salido al mercado y se
presenta como un buen candidato para el despliegue de múltiples dispositivos. Permite crear
28
Capítulo 5: Análisis de alternativas
réplicas del broker, para garantizar que habrá siempre uno funcionando en caso de que la
principal sufra una caída.
Sin embargo, debido a su novedad no existen tantos trabajos en los que basarse para realizar este
proyecto. Dadas las necesidades de este proyecto no se requiere de la característica extra que
presenta frente a Mosquitto.
Teniendo en cuenta esto, y dada la complejidad que presenta su utilización frente a Mosquitto,
no se ha seleccionado como solución final.
Los datos recogidos mediante los dispositivos se tienen que almacenar en un lugar externo
cuando se trabaja cantidades elevadas de información.
La decisión de que servidor de datos utilizar ha venido condicionada por las elecciones previas.
La base de datos de series temporales seleccionada deberá ser compatible en este caso con
MQTT.
Al igual que en el apartado anterior, no se entra en detalle sobre las características de todos los
servidores de datos disponibles, pero sí que muestra una tabla comparativa de algunos de los
requisitos más importantes que deben de tener. En este caso, tras observar el trabajo realizado
por W. Nazco se ha tomado la decisión de utilizar InfluxDB como base de datos.
5.5.1 InfluxDB
InfluxDB es una plataforma para construir y operar aplicaciones de series temporales [53].
Sus principales usos están relacionados con la monitorización de servidores o datos recopilados
con sensores IoT [52].
29
Capítulo 5: Análisis de alternativas
Aunque para este proyecto se ha seleccionado su versión gratuita, tiene una versión de pago
denominada InfluxDB Enterprise que convierte cualquier instancia de InfluxData en un clúster
listo para la producción que puede funcionar en cualquier lugar [53].
Su versión InfluxDB Cloud permite a los usuarios centrarse en la creación de software con una
plataforma de series temporales sin servidor, fácil de usar y escalable, disponible en AWS, Azure
y Google Cloud [53].
A continuación, se muestra una tabla comparativa de algunos de las bases de datos disponibles
actualmente [52]:
5.6 Aplicaciones
5.6.1 Node-RED
30
Capítulo 5: Análisis de alternativas
Su principal motivo de uso es por que simplifica el uso de tecnologías que en un principio se
podrían considerar como complejas.
Su estructura mínima se denomina nodo, y mediante el conexionado de ellos en la interfaz
gráfica, se crean flujos o agrupaciones de nodos mediante los que se realizan tareas con una
programación mínima.
Algunas de estas tareas pueden ser la subscripción o creación de un topic, envío de mensajes al
correo o Twitter o la generación de documentos como Excel (.csv) o de texto plano (.txt).
Grafana es una aplicación open source mediante la cual es posible generar gráficos
interactivos (mediciones basadas en series de tiempo) o usar un sistema de alarmas, donde todo
ello es configurable desde la interfaz gráfica del usuario.
Permite, mediante el uso de plugins, conectar las fuentes de datos existentes a través de las API
y presentan los datos en tiempo real sin necesidad de migrar o ingerir los datos [65]. Dentro de
las muchas opciones disponibles, se encuentra la base de datos InfluxDB seleccionada para el
desarrollo de este proyecto.
31
Capítulo 5: Análisis de alternativas
Desde el punto de vista del desarrollado y administrador del sistema, presenta el inconveniente
de que no se puede realizar la gestión y administración de la base de datos, únicamente visualiza
los datos obtenidos de la base de datos. Viéndolo desde el punto de vista positivo, de esta forma
es imposible comprometer los datos, permitiendo de esta forma conceder permisos a terceros
mediante cuentas de usuario.
5.7 Selección final
Basándose en los requisitos descritos en los respectivos análisis de los elementos en los
apartados anteriores, en este apartado se ha procedido a la selección de aquellos que conformarán
la solución final de este proyecto.
Observando la Tabla 1 del apartado 5.1.3 y dado el alcance de este proyecto, el dispositivo
Arduino Nano IoT 33 (AN-33IoT) se presenta como una de las mejores opciones junto al
dispositivo basado en el ESP32.
Ambos presentan características presentadas como objetivo para este proyecto, como sus
capacidades de conexión inalámbricas (WiFi y Bluetooth) y son de bajo coste (10 euros el
AzDelivery ESP32 y 16 euros el AN-IoT).
El framework utilizado para la programación del dispositivo ha sido Arduino IDE. Esta
plataforma permite su utilización de forma intuitiva y permite la incorporación de librerías
externas en el caso de ser necesarias, como para el ESP32.
32
Capítulo 5: Análisis de alternativas
conectividad. No obstante, hay que tener en cuenta la existencia Wi-Fi HaLow para futuros
desarrollos con dispositivos que permitan su uso.
El protocolo de comunicación seleccionado ha sido MQTT debido a que cumple con las
características descritas en apartados anteriores. Además, dispone de una amplia selección de
middlewares que se pueden desplegar y configurar fácilmente.
La elección del broker ha estado rivalizada entre Mosquitto y EMQ. Ambos cumplen todos los
requisitos para ser seleccionados como elemento final. La única diferencia teórica es que EMQ
garantiza la disponibilidad del sistema en todo momento mediante la creación de réplicas del
broker. Aunque es una gran cualidad para su despliegue, implica un aumento de la complejidad
de implementación de la solución final. Teniendo en cuenta el alcance de este proyecto,
Mosquitto ha sido finalmente la opción seleccionada.
Los señores utilizados son los preseleccionados por GICI. El GY-MAX30100 para obtener los
valores de oxígeno en sangre y el ritmo cardíaco; y el Grove GSR con un (LM324) para obtener
la respuesta galvánica de la piel.
Es importante que el GY-MAX30100 sea la versión morada, puesto que la verde tiene un diseño
defectuoso
El ordenador utilizado como HW donde se instala la máquina virtual es un portátil Asus ROG
Strix G531GV con un procesador i7-9750H CPU 2.60GHz, 16 GB de memoria RAM, 1 TB de
disco duro SSD, una tarjeta gráfica dedicada NVIDIA GeForce RTX 2060 con Windows 10 64
Bits como sistema operativo.[89]
33
Capítulo 5: Análisis de alternativas
Aunque en una primera instancia se seleccionó una Raspberry Pi como hardware donde instalar
el servidor, posteriormente fue descartado como opción válida y sustituido por una máquina
virtual de VMware v16.
Está máquina virtual, aunque es de pago, tiene una versión gratuita que se ha utilizado para la
realización de este proyecto. El hecho que sea de pago no supone un problema para los objetivos
de reducir el coste económico de la solución deseada dado que para aplicaciones desplegadas en
el mundo real se utilizarían los ordenadores disponibles donde se instalaría el OS de Linux.
Obviamente, en el caso de un despliegue desde cero, el coste del ordenador utilizado como
hardware donde instalar el broker y servidor se tendrían que tener en cuenta en el cómputo final.
La máquina virtual tiene instalado un sistema operativo basado en Linux, concretamente Ubuntu
20.04.2 LTS, y se le han asignado 4 GB de memoria RAM, 2 procesadores, 40 GB de disco duro
del portátil.
34
Capítulo 5: Análisis de alternativas
Dentro de las múltiples bases de datos se ha seleccionado IbfluxDB, dado que posee las
características necesarias para el desarrollo de este proyecto y puede implementarse fácilmente
mediante el uso de Node-RED.
En este apartado se puede observar una tabla listando los elementos finales
seleccionados y una figura a modo ilustrativo de dónde corresponden siguiendo la arquitectura
por niveles establecida en el Capítulo 4.
35
Capítulo 5: Análisis de alternativas
36
Capítulo 6: Desarrollo del trabajo
CAPÍTULO 6
37
Capítulo 5: Análisis de alternativas
Este capítulo está dividido en apartados en función de las tareas acometidas a lo largo del
desarrollo de este TFM a partir de los materiales y herramientas seleccionadas en el capítulo
anterior, incluyendo algunas pruebas y resultados parciales, para validar y valorar los hitos
alcanzados.
Aunque en el capítulo anterior se describió los elementos finales de la solución desarrollada, tal
y como se detallará en los siguientes apartados, el escenario de trabajo ha ido variando durante
la realización de las pruebas de forma que se pudieran realizar las pruebas para cumplir los
objetivos marcados para este proyecto.
Un análisis más detallado las conclusiones de cada apartado se mostrará en el siguiente capítulo,
“análisis de resultados”. Por otro lado, toda la implementación de los códigos utilizados se
encontrará en los anexos.
6.1 Preparación del entorno de trabajo
El GICI [66] proporcionó un código (GICI.ino) inicial e inacabado, con el que empezar a
trabajar. A continuación, se muestra su diagrama de flujo a modo de representación gráfica:
38
Capítulo 6: Desarrollo del trabajo
39
Capítulo 5: Análisis de alternativas
Establecer una arquitectura IoT implica implementar algún tipo de conexión inalámbrica,
en este caso el dispositivo AN33-IoT se conectará a través del protocolo WiFi. Por lo tanto, una
de las funciones que deberá implementar el código de la solución será la del establecimiento de
conexión WiFi.
Tras incluir las librerías necesarias (WiFiNINA.h), es necesario especificar la red (SSID) con la
que se desea establecer la conexión y su contraseña (password).
La primera acción a realizar será comprobar que la placa o dispositivo tiene el módulo necesario
para realizar la comunicación vía WiFi. En el caso de no lo tenga, no ejecutara ninguna acción
más. Se mostrará un mensaje por el terminal indicando el fallo y se requerirá apagar el
dispositivo y realizar los ajustes necesarios en la red o el código.
En el caso de que la conexión se establezca se realizará un escaneado de las redes disponibles
mediante una función, en este caso denominada scanWifi(). Mediante esta función se puede
conocer los nombres de las redes disponibles, las fuerzas de las redes (dBm) y el tipo de
encriptación que utilizan.
Por último, se procederá al intento reiterado de la conexión con la red indicada al inicio siempre
y cuando el número de intentos realizados no supere al establecido, 15 intentos en este caso. Si
se establece la conexión, se muestra el nombre de la red y su dirección IP.
En el caso de superar el límite de intentos, se mostrará por pantalla un mensaje de fallo en el
establecimiento de la conexión, para posteriormente finalizar su ejecución.
40
Capítulo 6: Desarrollo del trabajo
Pulso y oxigenación
41
Capítulo 5: Análisis de alternativas
42
Capítulo 6: Desarrollo del trabajo
GSR
43
Capítulo 5: Análisis de alternativas
En este apartado se realizarán unas pruebas para comprobar el funcionamiento del entorno
final, desde la comprobación ente el dispositivo al broker, del broker a la base de datos pasando
por el puente de datos (Node-RED) y finalmente de la base de datos al software de visualización
(Grafana).
44
Capítulo 6: Desarrollo del trabajo
Después se ha utilizado MQTTLens [92] para la visualización de los topics y sus datos. Es una
aplicación de Google Chrome, que se conecta al broker MQTT y que es capaz de suscribirse y
publicar en temas MQTT .
Publicación
45
Capítulo 5: Análisis de alternativas
46
Capítulo 6: Desarrollo del trabajo
En la ilustración superior se observa cómo hay mensajes que indican la confirmación de las
conexiones con la red WiFi y el broker. También se ve la notificación de que se está publicando
un mensaje, el nombre del topic donde se publica y el contenido del topic.
En la siguiente ilustración se observan los tres últimos mensajes enviados al broker con el topic
“arduino/simple”.
Subscripción
Aunque no es necesario para este proyecto, también se ha realizado una prueba para
comprobar si era posible subscribirse a un topic.
Este código (WiFiSimpleReciver.ino) [93], al igual que el anterior, requiere de la instalación de
la librería correspondiente para crear un cliente MQTT además de la correspondientes a la
conexión WiFi. Al no utilizar ningún sensor no es necesario incorporar ninguna librería más.
Al igual que con la publicación, primero se establecen los parámetros de conexión WiFi y se
instancian los clientes WiFi y MQTT. Después se establecen los parámetros del broker como su
dirección IP y su puerto de enlace. Se indica también el topic al que se quiere subscribir
(TFM/Sergio).
47
Capítulo 5: Análisis de alternativas
Una vez establecida la conexión WiFi se procederá a realizar la conexión con el broker. En el
caso de que no se estableciera, se mostrará por pantalla un mensaje de error y su código de
identificación para saber a qué se debe.
Si la conexión con el servidor/broker resulta exitosa se realizará la subscripción al topic indicado
previamente y se ejecutará en bucle una función que comprueba si hay algún mensaje nuevo
publicado.
48
Capítulo 6: Desarrollo del trabajo
En la ilustración superior se observa cómo hay mensajes que indican la confirmación de las
conexiones con la red WiFi y el broker. También se puede ver el topic al que se ha subscrito y
posteriormente, cada vez que se publica un nuevo mensaje, el nombre del topic al que se ha
subscrito, el tamaño del mensaje en bytes y su contenido.
La siguiente ilustración muestra como el último mensaje publicado en el topic “TFM/Sergio”,
el cual contenía “Biomedicina”, coindice con el visualizado en el monitor serie de Arduino.
Hasta este punto se ha logrado comunicar de forma exitosa vía Wifi el dispositivo IoT con
un servidor/broker de forma que fuera posible publicar datos a un topic o subscribirse a él para
recibirlo, todo ello realizado en el portátil.
A partir de aquí, se realiza instalación del broker (Mosquitto), el puente de datos (Node-RED),
la base de datos (InfluxDB) y la herramienta software de visualización (Grafana) en un
dispositivo diferente al portátil.
49
Capítulo 5: Análisis de alternativas
En la introducción de este capítulo ya se dijo que el escenario de trabajo ha ido variando durante
el desarrollo de la solución final. En un principio se utilizó Raspberry Pi como elemento físico
donde instalar el broker, el servidor de datos y el software complementario (Node-RED y
Grafana). Pero, tras observar la lentitud con la que funcionaba la RaspberryPi, se optó por utilizar
una máquina virtual (descrita en la solución final en el capítulo 5) que actúa como si fuera otro
portátil más en la red.
Para este primer escenario únicamente se utilizará el sensor GSR.
Para esta prueba se generó un código nuevo (TFM_v1.ino) que incluía el envío de dos
topics, uno para el valor GSR y otro el tiempo que tardaba en recopilar los datos. Al igual que
con la prueba de la Raspberry Pi , se utiliza el broker de Eclipse Mosquitto para hacer pruebas
(test.mosquitto.org).
Sin embargo, dónde se produce cambios interesantes dignos de mencionar es en su segunda
versión (TFM_v2.ino). En esta nueva versión, que toma algunas ideas del proyecto de
50
Capítulo 6: Desarrollo del trabajo
- initWiFi(): Función basada en los desarrollos previos para realizar la conexión con la
red WiFi. En el caso de no conectarse muestra mensaje de error.
- updateReadings(): Aquí se actualiza la lectura realizada por los sensores, muestra por
pantalla (monitor serie) cuanto ha tardado en realizarlas, crea el paquete con los datos
recopilados y los envía al mismo tiempo que se visualiza la información por el monitor
serie. Para realizar estas acciones hace las llamadas a las funciones showTimeNeeded(),
reportToMqtt() y reportToSerial(). Finaliza vaciando el paquete.
51
Capítulo 5: Análisis de alternativas
- NewclientID(): Genera la identificación del nuevo cliente MQTT con las iniciales del
usuario o paciente y lo muestra por pantalla. Para este proyecto no tiene mucha utilidad,
los valores se introducen previamente a mano en el código, no obstante, podría utilizarse
para desarrollos futuros.
- showTimeNeeded(): Función auxiliar utilizada para saber cuánto tardad en realizar una
acción. Calcula la diferencia entre dos variables que han hecho uso de la función
micros(). Esta es la versión con más precisión de la función millis() utilizada en pruebas
anteriores que “devuelve el número de milisegundos (microsegundos para la función
micros() ) desde que la placa Arduino empezó a ejecutar, luego de un reinicio o el
encendido”[95] . No es necesaria para el uso de la solución desarrollada, pero aporta
información valiosa al programador.
Ya en el setup(), primero se inicializa la conexión con el puerto USB y se establece la
identificación del paciente/usuario. Después se configuran los topics para publicar las lecturas
de los sensores insertando el ID único, el resultado tiene la forma "arduino_1/GSR/valorID".
Por último, se configura el cliente MQTT los datos del archivo de configuración. Aquí también
se realiza la modificación de tamaño del paquete que puede enviar por MQTT que por defecto
es de 128 bytes.
A partir de aquí se realiza una ejecución en bucle. Si la conexión con la red WiFi es correcta, se
comprueba el estado de conexión del cliente con el broker. En caso de desconexión, se intentará
restablecer mediante la función reconnectMqtt().
Independientemente del estado de la conexión WiFi y de la conexión con el broker, se ejecutará
una función para procesar cualquier mensaje MQTT pendiente (mqqttClient.loop()) y se
actualizarán las lecturas de los sensores mediante la función updateReadings().
52
Capítulo 6: Desarrollo del trabajo
53
Capítulo 5: Análisis de alternativas
Ilustración 45 - Vista detallada de los topics enviados al broker Mosquitto en la máquina virtual.
54
Capítulo 6: Desarrollo del trabajo
Mediante este flujo es posible extraer la información de los topics individuales y de topic JSON,
para posteriormente guardarlos en la base de datos InfluxDB.
Desde el terminal de Linux se puede ejecutar InfluxDB y ver su contenido. Como se puede
observar en la siguiente imagen, se han almacenado el contenido de los topics utilizados.
Luego mediante Grafana es posible visualizar estos datos en tiempo real. La siguiente imagen
muestra la monitorización del topic “arduino_1/IDSPV001/GSR/tiempo” cuyo valor en el
código se genera aleatoriamente a modo de prueba de visualización.
Node-RED es una herramienta muy eficaz y útil para el desarrollo de proyectos IoT.
Raspberry Pi 3 B+ es un dispositivo que aún carece de las características necesarias para manejar
estos programas con fluidez.
Hay que tener en cuenta que a mayor seguridad más lenta será la comunicación.
Observando los resultados obtenidos en el primer escenario que contenía todos los
elementos finales escogidos para formar parte de la solución final se observó que la frecuencia
máxima estable (controlada) con la que se podía capturar y enviar lo datos era de 100Hz.
55
Capítulo 5: Análisis de alternativas
Sin la modificación de los parámetros internos, el tiempo necesario para la captura de 360
muestras es de 833.34 microsegundos por muestra, equivalente a una frecuencia de muestreo de
1200Hz.
56
Capítulo 6: Desarrollo del trabajo
Sin embargo, como se puede observar en el flujograma, esté código es una versión simple que
no contempla el envío de los datos al broker, únicamente se centra en comprobar el efecto de las
modificaciones en los parámetros internos del AN-33IoT.
Una de las opciones disponibles para mejorar el tiempo de muestro consiste en modificar el valor
del parámetro PRESCALER (pre-escalador) en el archivo wiring.c ubicado en
“C:\Users\username\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.11\cor
es\arduino”.
Este parámetro permite modificar la velocidad con la que se realizar una conversión ADC.
Alterando el retardo de propagación de una medición ADC esta función puede utilizarse para
reducir/aumentar la frecuencia de reloj del sistema y su consumo energético [96][97].
Al cambiar la división del reloj de 512 a 64 se consigue mejorar la frecuencia de muestreo a casi
9000 Hz, 111.44 microsegundos por muestra. Esto es una velocidad de lectura de casi 7.5 veces
más rápido.
57
Capítulo 5: Análisis de alternativas
El escenario final hace uso del código TFM_v3.ino. Este código sigue la misma estructura
de diagrama de flujo de su versión anterior con la diferencia de se han introducido las variables
necesarias para indicar la frecuencia de muestreo deseada y las relacionadas con la nueva función
para visualizar, a través del monitor serie, las frecuencias máxima y mínima de envío del paquete
(mostrarFrecuencias()).
Se ha depurado el código, eliminando errores y partes innecesarias como comentarios,
visualizaciones de parámetros (reportToSerial() ya no se ejecuta) o variables que, tras la
modificación de la estructura del código, dejaban de ser necesarias.
Siguiendo el mismo procedimiento desarrollado en apartados anteriores, mediante Node-RED
se seleccionarán los parámetros y se enviarán a la base de datos InfluxDB.
58
Capítulo 6: Desarrollo del trabajo
59
Capítulo 5: Análisis de alternativas
Aquí se incluyen las pruebas realizadas en relación a los objetivos secundarios: estos son
conectar varios dispositivos al servidor al mismo tiempo, diseñar un sistema de envío de alertas
y estudiar las capacidades de un dispositivo ESP32
Haciendo uso del código final (TFM_v3.ino), este se implantó en otro dispositivo AN33-
IoT cambiando únicamente el ID del cliente de 001 a 002.
Haciendo las modificaciones oportunas en los nodos de Node-RED para hacer referencia a los
nuevos topics se ha conseguido que se almacenen datos de ambos dispositivos al mismo tiempo.
60
Capítulo 6: Desarrollo del trabajo
Node-RED permite mediante sus nodos crear un flujo de trabajo con el que, introduciendo
un código muy simple, es posible generar alertas y enviar el mensaje que se especifique a Twitter
o el correo electrónico que se desee.
En este caso se va a utilizar una cuenta de correo Gmail para el envío de mensajes por correo.
Para que Node-RED realice el envío del mensaje es necesario habilitar la opción de utilizar “apps
menos seguras” desde las opciones de seguridad de Google Account.
61
Capítulo 5: Análisis de alternativas
Con el objetivo de solucionar el inconveniente que plantea que el AN33-IoT sólo posea
un núcleo y por lo tanto sólo pueda leer y ejecutar el código de forma secuencial, se ha optado
por realizar unas pruebas con una placa con dos núcleos, en concreto un Az-Delivery ESP32-
WROOM-32 NodeMCU.
Lo que se pretende con esta prueba es entender como trabajar con dos núcleos. Para ello se
dispone de dos ledes, uno rojo y otro verde, y lo que se pretende es que funcionen de manera
independiente. El código utilizado ha sido task_different_cores.ino.
62
Capítulo 6: Desarrollo del trabajo
Conclusiones - ESP32
Se puede observar en los resultados mostrados como los dos leds realizan acciones de
encendido/apagado exactamente al mismo momento.
63
Capítulo 5: Análisis de alternativas
64
Capítulo 8: Análisis de resultados. Discusión final
CAPÍTULO 8
ANÁLISIS DE RESULTADOS
65
Capítulo 8: Análisis de resultados. Discusión final
7 ANÁLISIS DE RESULTADOS.
Durante la realización de estos dos códigos se han incorporado una serie de mejoras
respecto a los anteriores.
Entre ellas, se ha incluido un fichero extra (arduino_secrets.h) donde se introduce el SSID y
PASS de la red a la que se quiere conectar, de forma que en el caso de que se comparta el código
no figuren en él.
Se ha introducido en el setup el código necesario para que tras inicializar el puerto serie espere
a que se abra antes de continuar ejecutando código. Antes de introducir esto, el monitor serie
tardaba 0,2 segundos aproximadamente en comenzar a mostrar lo que se estaba transmitiendo,
por lo que si había algo que estaba codificado en el setup() se ejecutaba tan rápido que no
aparecía por el monitor serie.
Incluye como opción añadir seguridad a la comunicación mediante SSL/TLS entre el dispositivo
y el broker. Esta opción está a modo de comentario en el código, por lo que habría que
descomentarlo para que el framework lo pudiera ejecutar y realizar unas modificaciones mínimas
(también indicadas en los comentarios).
Por otro lado, la herramienta MQTTLens ha permitido verificar el correcto funcionamiento de
los dos códigos.
7.3 Análisis – Primer escenario de trabajo con los elementos de la solución final
Mediante Node-RED es posible guardar los datos de diversas formas dependiendo del
nodo seleccionado. Entre algunas de las opciones disponibles se encuentran la generación de
archivos .JSON, texto plano (.txt) o CSV que podría ser abierto posteriormente con Excel.
Como curiosidad Mosquitto permite implementar desde el terminal un comando para que se
guarden en un texto plano los datos recibidos, sin embargo, no se tiene un control para guardarlos
de forma ordenada.
66
Capítulo 8: Análisis de resultados. Discusión final
Se descubrió un fallo importante del código en la versión implementada en la Raspberry Pi, este
consistía en que no se vaciaba el paquete que contenía la información generando un error en el
envío debido a que se superaba el tamaño permitido del paquete.
La biblioteca PubSubClient limita el tamaño de los mensajes MQTT a 128 bytes. Aunque es
posible que un mensaje de formato largo funcione si el tamaño del búfer del mensaje se ha
aumentado en la configuración.
Incorporar un mecanismo de seguridad usuario/contraseña para hacer uso del broker implica que
deberá de ser tenido en cuenta para acceder a él tanto desde el AN-33IoT como desde Node-
RED. Además, dentro de Node-RED se puede especificar el QoS con el que se recibe o envía
un mensaje.
Obviamente, el parámetro de la velocidad de la consola serie USB se tiene que poner al máximo
de la capacidad del AN-33IoT (115200 baudios) para que la comunicación entre el dispositivo
y el portátil sea la más rápida posible.
7.4 Análisis – Modificaciones para mejorar el rendimiento
67
Capítulo 8: Análisis de resultados. Discusión final
Se ha visto que la lectura secuencial del código imposibilita realizar dos tareas al mismo tiempo.
Por lo que se genera una nueva línea de investigación sobre posibilidad de utilizar otros
dispositivos de dos núcleos como solución para realizar varias tareas al mismo tiempo
(multitasking).
7.6 Análisis – Gestión de alertas
Se puede observar en los resultados mostrados como los dos leds realizan acciones de
encendido/apagado exactamente al mismo momento.
Para asignar partes de código a un núcleo específico es necesario la creación de tareas . Su
sistema de prioridades empieza en 0, siendo esta la de menor prioridad. El procesador ejecutará
las tareas con mayor prioridad primero.
Este dispositivo se podría usar para desarrollos futuros realizando las modificaciones oportunas
en el código.
- El núcleo 0 podría encargarse de recoger las muestras (a frecuencia controlada) e ir
guardándolas en el buffer o paquete.
- El núcleo 1 se encargaría de enviar el paquete al broker.
Sin embargo, sería necesario realizar un estudio más complejo. Una solución podría consistir en
tener dos paquetes de forma que cuando se esté escribiendo en él no se pueda estar enviando la
información que contiene.
Otra observación realizada con esta placa en concreto basada en el ESP32 de Espressif es que
es necesario mantener pulsado el botón “BOOT/FLASH” para cargar un nuevo sketch. No es un
problema grave, pero sí que puede resultar molesto para el programador.
Este dispositivo implementa una función que le permite asignar un ID único al dispositivo a
diferencia de las placas Arduino.
68
Capítulo 9: Plan de proyecto y planificación
CAPÍTULO 9
PLAN DE PROYECTO Y
PLANIFICACIÓN
69
Capítulo 9: Plan de proyecto y planificación
En este capítulo se reflejan los diferentes hitos alcanzados, mostrando los pasos que se
han seguido para el desarrollo de este proyecto.
70
Capítulo 9: Plan de proyecto y planificación
71
Capítulo 9: Plan de proyecto y planificación
72
Capítulo 10: Conclusiones y trabajos futuros
CAPÍTULO 10
CONCLUSIONES Y TRABAJOS
FUTUROS
73
Capítulo 10: Conclusiones y trabajos futuros
9.1 Conclusiones
74
Capítulo 10: Conclusiones y trabajos futuros
Como se ha podido comprobar las posibilidades de desarrollar una solución IoT son muy
amplias. El IoT está basado en multitud de tecnologías en constante evolución. Se trabaja a diario
en la creación de nuevas versiones de protocolos de comunicación, middlewares posibilitando
la implementación de nuevas soluciones.
Es por ello que, aun habiéndose cumplido los objetivos establecidos inicialmente, quedan
pendientes de estudio algunas vías de investigación con las que se cree se mejoraría el presente
trabajo:
1. Implementación de otros sensores. Como se describió anteriormente, queda pendiente
la incorporación del sensor MAX30100. Es una próxima línea futura que se en la que
ya se está trabajando y en la que se continuará realizando en el seno de la línea de
investigación del GICI.
75
Capítulo 10: Conclusiones y trabajos futuros
76
Capítulo 11: Referencias bibliográficas
CAPÍTULO 11
REFERENCIAS BIBLIOGRÁFICAS
77
Capítulo 11: Referencias bibliográficas
10 REFERENCIAS BIBLIOGRÁFICAS
[1] “El origen e historia del Internet de las Cosas (IoT).” https://www.bcendon.com/el-
origen-del-iot/.
[2] C. Chakraborty, A. Banerjee, L. Garg, and J. J. P. C. Rodrigues, Internet of Medical
Things for Smart Healthcare. Springer.
[3] P. P. Ray, D. Dash, and N. Kumar, “Sensors for internet of medical things: State-of-the-
art, security and privacy issues, challenges and future directions,” Comput. Commun.,
vol. 160, pp. 111–131, Jul. 2020, doi: 10.1016/J.COMCOM.2020.05.029.
[4] D. C. Yacchirema Vargas, “Arquitectura de interoperabilidad de dispositivos físicos para
le internet de las cosas (IoT),” Universidad Politécnica de Valencia, 2019.
[5] L. Greco, G. Percannella, P. Ritrovato, F. Tortorella, and M. Vento, “Trends in IoT based
solutions for health care: Moving AI to the edge,” Pattern Recognit. Lett., vol. 135, pp.
346–353, 2020, doi: 10.1016/j.patrec.2020.05.016.
[6] “Protección Senior - Securitas Direct.” http://proteccionsenior.com/.
[7] “iHealth Labs Europe - Connected Health.” https://ihealthlabs.eu/es/ (accessed Aug. 16,
2021).
[8] “Cómo funciona V-SOS Band | Ayuda Vodafone Particulares.”
https://ayudacliente.vodafone.es/particulares/iot/v-sos-band/como-funciona-v-sos-
band/.
[9] “Reloj Localizador Nock Senior - Neki.” https://neki.es/reloj-localizador-gps-
ancianos.html.
[10] “Sensovida, la teleasistencia más innovadora para personas mayores – Solidaridad
Intergeneracional.” https://solidaridadintergeneracional.es/wp/sensovida-la-
teleasistencia-mas-innovadora-para-personas-mayores/.
[11] “Mi Smart Band 6 | Xiaomi España丨Mi.com.” https://www.mi.com/es/mi-smart-band-
6/.
[12] “Watch - Apple (ES).” https://www.apple.com/es/watch/.
[13] “Relojes | Samsung España.” https://www.samsung.com/es/watches/?product1=sm-
r855fzdaeub&product2=sm-r855fzdaeub&product3=sm-r845fzkaeub.
[14] “Huawei Band 6 - HUAWEI España.”
https://consumer.huawei.com/es/wearables/band6/.
[15] “El mejor smartwatch 2021: guía de compra y comparativa de relojes inteligentes.”
https://www.xataka.com/analisis/mejor-smartwatch-2020-guia-compra-comparativa-1.
[16] “Arduino - Home.” https://www.arduino.cc/.
[17] “Arduino Nano 33 IoT | Arduino Official Store.” https://store.arduino.cc/arduino-nano-
33-iot.
[18] “Software | Arduino.” https://www.arduino.cc/en/software.
[19] “Arduino Forum.” https://forum.arduino.cc/.
78
Capítulo 11: Referencias bibliográficas
79
Capítulo 11: Referencias bibliográficas
[42] A. Martín Muñoz, “Despliegue de una red de sensores basada en chips ESP-8266,”
Universidad Complutense de Madrid, 2020.
[43] “Máquinas virtuales: qué son, cómo funcionan y cómo utilizarlas.”
https://www.xataka.com/especiales/maquinas-virtuales-que-son-como-funcionan-y-
como-utilizarlas.
[44] “Oracle VM VirtualBox.” https://www.virtualbox.org/.
[45] “Máquina virtual Windows | Workstation Pro | VMware | ES.”
https://www.vmware.com/es/products/workstation-pro.html.
[46] “Bitalino.” https://bitalino.com/products.
[47] F. M. Medina Núñez and A. F. Paternina De La Rosa, “Diseño y construcción de
Oxímetro de pulso inalámbrico,” pp. 1–4.
[48] E. Al-Masri et al., “Investigating Messaging Protocols for the Internet of Things (IoT),”
IEEE Access, vol. 8, pp. 94880–94911, 2020, doi: 10.1109/ACCESS.2020.2993363.
[49] G. Gil Inchaurza, “Comparativa teórica y práctica de middlewares MQTT,” Euskal
Herriko Unibertsitatea, 2018.
[50] Gastón C. Hillar, MQTT Essentials – A Lightweight IoT Protocol. Packt, 1967.
[51] A. Faro, D. Giordano, and M. Venticinque, “Deploying Wifi , RF and BLE sensors for
pervasive monitoring and control,” in 2020 IEEE International Workshop on Metrology
for Industry 4.0 & IoT, 2020, pp. 605–610, doi:
10.1109/MetroInd4.0IoT48571.2020.9138187.
[52] W. Nazco Torres, “Almacenamiento y Visualización de Series Temporales,”
Universidad de la Laguna, 2018.
[53] “InfluxDB: Purpose-Built Open Source Time Series Database | InfluxData.”
https://www.influxdata.com/.
[54] “GitHub - graphite-project/graphite-web: A highly scalable real-time graphing system.”
https://github.com/graphite-project/graphite-web.
[55] “OpenTSDB - A Distributed, Scalable Monitoring System.” http://opentsdb.net/.
[56] “Prometheus - Monitoring system & time series database.” https://prometheus.io/.
[57] “Node-RED.” https://nodered.org/.
[58] “Medidor PZEM-004 + Arduino Nano Modbus RTU (RS232) & Plataforma IoT Node-
RED - PDAControl.” http://pdacontroles.com/medidor-pzem-004-arduino-nano-
modbus-rtu-rs232-plataforma-iot-node-red/.
[59] “#41: Datalogging with MQTT, Node-RED, InfluxDB, and Grafana – SuperHouse
Automation.” https://www.superhouse.tv/41-datalogging-with-mqtt-node-red-influxdb-
and-grafana/.
[60] D. L. Llinares, “Desarrollo de aplicación IoT Para la monitorizacion de consumos
eléctricos de una vivienda,” 2020.
[61] “ESPHome.” https://esphome.io/.
[62] “News - Tasmota.” https://tasmota.github.io/docs/.
[63] “SONOFF Official Homepage| Smart Home automation SONOFF Official.”
https://sonoff.tech/.
[64] “Home Assistant.” https://www.home-assistant.io/.
80
Capítulo 11: Referencias bibliográficas
81
Capítulo 11: Referencias bibliográficas
https://docs.emqx.io/en/broker/v4.3/introduction/checklist.html.
[87] C. Ballesteros De Andrés, “Sistema IoT para la monitorización del estado de un centro
de proceso de datos de grandes dimensiones,” 2017.
[88] “Qué es Node-RED | Aprendiendo Arduino.”
https://aprendiendoarduino.wordpress.com/2020/03/05/que-es-node-red/.
[89] “ROG Strix G G531 | ROG Strix G G531 | Gaming Laptops|ROG - Republic of Gamers
|ROG Global.” https://rog.asus.com/laptops/rog-strix/rog-strix-g-g531-series/.
[90] “Nuevo Ubuntu 20.04.3 LTS, novedades y cómo descargar este Linux.”
https://www.softzone.es/noticias/open-source/ubuntu-20-04-3-lts-novedades-descargar-
linux/.
[91] “test.mosquitto.org.” http://test.mosquitto.org/.
[92] “MQTTLens - Chrome Web Store.”
https://chrome.google.com/webstore/detail/mqttlens/hemojaaeigabkbcookmlgmdigohjo
bjm?hl=es.
[93] “ArduinoMqttClient/examples at master · arduino-libraries/ArduinoMqttClient.”
https://github.com/arduino-libraries/ArduinoMqttClient/tree/master/examples.
[94] “AQS/AirQualitySensorD1Mini.ino at main · SuperHouse/AQS.”
https://github.com/SuperHouse/AQS/blob/main/Firmware/AirQualitySensorD1Mini/Ai
rQualitySensorD1Mini.ino (accessed Sep. 09, 2021).
[95] “Arduino: Usando la función millis() en lugar de delay() | Robots Didácticos.”
https://robots-argentina.com.ar/didactica/arduino-usando-la-funcion-millis-en-lugar-de-
delay/.
[96] “speeding up analogread() at the Arduino Zero - Hardware / Arduino Zero - Arduino
Forum.” https://forum.arduino.cc/t/speeding-up-analogread-at-the-arduino-
zero/426099.
[97] “Nano IOT 33 - analogRead() is Slower than expected - Nano Family / Nano 33 IoT -
Arduino Forum.” https://forum.arduino.cc/t/nano-iot-33-analogread-is-slower-than-
expected/635209/2.
[98] “How to use ESP32 Dual Core with Arduino IDE.”
https://randomnerdtutorials.com/esp32-dual-core-arduino-ide/.
[99] Miguel Ángel, “Configuración de una máquina VMware para internet y red privada por
WIFI y LAN indistintamente | Espacio de Miguel Ángel.”
https://magomez4269.wordpress.com/2011/03/21/configuracion-de-una-maquina-
vmware-para-internet-y-red-privada-por-wifi-y-lan-indistintamente/.
82
Anexo I: Documentación de los componentes
ANEXO I
83
Anexo I: Documentación de los componentes
84
Anexo I: Documentación de los componentes
85
Anexo I: Documentación de los componentes
Documentación del sistema de medición Grove GSR obtenida en la tienda SeedStudio [80].
86
Anexo I: Documentación de los componentes
11.2.1 LM324
87
Anexo I: Documentación de los componentes
88
Anexo I: Documentación de los componentes
11.3 MAX30100
89
Anexo I: Documentación de los componentes
90
Anexo I: Documentación de los componentes
91
Anexo I: Documentación de los componentes
92
Anexo II: Implementación de los códigos
ANEXO II
93
Anexo II: Implementación de los códigos
12.1 GICI.ino
94
Anexo II: Implementación de los códigos
95
Anexo II: Implementación de los códigos
12.2 WiFiScan.ino
96
Anexo II: Implementación de los códigos
97
Anexo II: Implementación de los códigos
12.3 Oxymetro_y_pulsimetro.ino
98
Anexo II: Implementación de los códigos
12.4 GSR.ino
99
Anexo II: Implementación de los códigos
12.5 WiFiSimpleSender.ino
100
Anexo II: Implementación de los códigos
12.5.1 Arduino_secrets.h
101
Anexo II: Implementación de los códigos
12.6 WiFiSimpleReciever.ino
102
Anexo II: Implementación de los códigos
12.6.1 Arduino_secrets.h
103
Anexo II: Implementación de los códigos
12.7 TFM_v2.ino
104
Anexo II: Implementación de los códigos
105
Anexo II: Implementación de los códigos
106
Anexo II: Implementación de los códigos
107
Anexo II: Implementación de los códigos
108
Anexo II: Implementación de los códigos
12.7.1 Configuration.h
109
Anexo II: Implementación de los códigos
12.8 Velocidad_GSR.ino
110
Anexo II: Implementación de los códigos
12.9 TFM_v3.ino
111
Anexo II: Implementación de los códigos
112
Anexo II: Implementación de los códigos
113
Anexo II: Implementación de los códigos
114
Anexo II: Implementación de los códigos
115
Anexo II: Implementación de los códigos
12.9.1 Configuration.h
116
Anexo II: Implementación de los códigos
12.10 Task_different_cores.ino
117
Anexo II: Implementación de los códigos
118
Anexo III: Manuales de instalación e instrucciones
ANEXO III
MANUALES DE INSTALACIÓN E
INSTRUCCIONES
119
Anexo III: Manuales de instalación e instrucciones
Tras una investigación más profunda, se encontró que el problema radicaba en que la máquina
virtual estaba configurada por defecto en modo NAT, impidiendo así que se conectara de forma
independiente a la red de casa. La solución al problema consistió en seleccionar el modo de
funcionamiento bridged sobre la tarjeta inalámbrica [99].
Accediendo a las opciones de la máquina virtual (Virtual Machine Settings), se seleccionó como
opción de conexión de la red de trabajo (Network connection), permitiendo de este modo una
conexión directa a la red de trabajo física.
120
Anexo III: Manuales de instalación e instrucciones
Una vez establecida, la máquina virtual apareció, tras su conexión a la red WiFi, como un
dispositivo más conectado a la red de casa con la IP que tiene en Ubuntu.
A continuación, se muestran una serie de comandos que han sido de utilidad para manejar la el
servidor/broker Mosquitto obtenidas de su página oficial [85].
SUBSCRIBIRSE en Raspberry pi
mosquitto_sub -d -t TOPIC
SUBSCRIBIRSE a otro broker y no al de Raspberry pi
mosquitto_sub -d -h IP_BROKER -t TOPIC
PUBLICAR un topic
mosquitto_pub -d -h BROKER -t TOPIC -m MESSAGE
mosquitto_pub -h 192.168.1.33 -t arduino/simple -m "hola mundo"
PUBLICAR un topic CON USUARIO Y CONTRASEÑA
mosquitto_pub -d -t TOPIC -m MESSAGE -u USER -P PASSWORD
mosquitto_sub -d -t TOPIC -u USER -P PASSWORD
GUARDAR DATOS directamente en el dispositivo con Mosquitto instalado
mosquito_sub -h BROKER -p PORT -t TOPIC -v > TEXT.txt
mosquito_sub -h localhost -p 1883 -t toppicName -v > docexport.txt
121
Anexo III: Manuales de instalación e instrucciones
122
Anexo III: Manuales de instalación e instrucciones
13.3 InfluxDB
123
Anexo III: Manuales de instalación e instrucciones
ping-auth-enabled = true
Reiniciamos
sudo systemctl restart influxdb.service
Entrar con user/pass
influx -username 'admin' -password 'adminpassword'
Crear una base de datos
CREATE DATABASE sensors_db
Una vez todo conectado con Node-RED accedemos con la terminal a InfluxDB
Entrar con user/pass
influx -username 'admin' -password 'adminpassword'
Indicamos la base de datos a utilizar
use sensors_db
Mostramos las mediciones (topics)
show measurements
Mostrar datos
select * from "TOPIC" limit NUMBER
Borrar datos
DROP SERIES FROM /.*/
Mostrar identificaciones
SHOW FIELD KEYS
124