Proyecto IoT, para medir temperatura y humedad de una planta y consumirlo en un front (2024)

Resumen

Cuerpo

A continuación, presento de manera speudo-técnica, sin profundizar demasiado, el proyecto final de IoT. El concepto es sencillo, el internet de la cosas está permeando todo el mundo, la idea es hacer una aplicación con enfoque de industria (potencialmente escalable): tener unos sensores que permanezcan conectados una planta 24h/7 días, y que cuyos datos, sean visualizables desde una interfaz gráfica estética, para así poder tener un control de cualquier planta o cultivo, poder consultar esta información desde cualquier parte del planeta, en cualquier momento, y tener predicciones con IA, del comportamiento futuro de las magnitudes registradas.

 

Para este proyecto, se ha trabajado sobre el framework de aplicaciones de internet futuro de la Unión Europea: FIWARE (Inicio - Aprende FIWARE en Español)

Se utilizaron para la TX y RX de información placas TTGO-T-Beam de la empresa LilyGo, con un microcontrolador ESP8266 de Espressif. 

Se utilizó para “el primer tramo” tecnología Long Range (LoRaWAN™), la cuál es ampliamente utilizada en la industria por sus características de bajo consumo de energía y alcance de 10-15km con obstáculos en entornos rurales. Para el “segundo tramo”, se utilizó WiFi.

Arquitectura para captar la información de los sensores y llevarlos al servidor:

A close-up of a computer

Description automatically generated

S: sensores.

TX: placa encargada de la trasmisión de los datos captados desde la planta.

RX: placa encargada de la recepción de los datos enviados por la TX, de decodificarlos y empaquetarlos, para enviarlos al servidor en un paquete HTTP. 

Conexiones del TX al sensor de temperatura y humedad:

A hand holding a circuit board

Description automatically generated

 

A hand holding a small piece of electronic equipment

Description automatically generated
A close-up of a computer chip

Description automatically generated

 

 

 

En la primera imagen el sensor de temperatura y humedad.

En la segunda la placa TTGO.

En la tercera imagen, se observa un módulo GPS, que no hará parte del dominio del proyecto.

 

A continuación, se presenta la infraestructura de software utilizada:

Imagen

 

En este caso, no explicaré el funcionamiento de FIWARE, pero haré algunas aclaraciones grosso modo: en la BB.DD. mongo, se guarda el ultimo valor de la entidad (estructura de datos para guardar la información de los sensores, junto un id, una meta data y demás) enviada desde el hardware, mientras que en Crate, una BB.DD. relacional distribuida, se guarda el histórico de las entidades (series de tiempo).

Son los middlewares diseñados por mí, los que tienen dos trabajos:

1) databaseload: se encarga de extraer la información de Crate y almacenarla en la BB.DD. Postgress, de manera tal que se guarde “limpia”

2) prediction: se encarga por medio de un modelo ForecasterAutoregressor que con base con el histórico de datos (mínimo de 1 día), hace una predicción para el día inmediatamente siguiente del último día de datos registrados. Tanto para temperatura, como humedad.

 

La visualización, hecha con la librería dash de Python, la cual, tiene 3 pestañas:

1) Información (quemada) de la planta, sus cuidados…

2) Últimas medidas de las magnitudes de temperatura y humedad, junto con gráficos, que permiten ver de acuerdo con el día seleccionado, el comportamiento de dichas variables.

3) Un apartado de predicción con dos gráficas para ver cómo se comportará las variables en el próximo día, inmediatamente posterior a la última fecha de mediciones.

 

Pestaña 1:

Imagen

 

Pestaña 2:

A screenshot of a dashboard

Description automatically generated
A graph with lines and text

Description automatically generated with medium confidence

 

Pestaña 3:

A graph on a white background

Description automatically generated

 

El despliegue de la aplicación se hizo en la nube de AWS, en una instancia EC2, con las siguientes características: t2.large Ubuntu 22.04 

Se utilizó Docker Compose para hacer un despliegue “automático’’, de los contenedores a nivel de cada capa.

Se utilizó la siguiente estructura de directorios, para la parte del software:

Imagen

De acuerdo con el repositorio de GitHub, este es el porcentaje de lenguajes utilizados en desarrollo de la solución:

Imagen

 

Etiquetas: IoT, Nube, AWS, Contenedores, Docker, Dash, PlatformIO, Agricultura, Python, Fiware