PASO 3: Codificación y Almacenamiento de Datos

Buenos días a todos, en este post vamos ha identificar las partes que debe tener el programa o código que aporta la funcionalidad a nuestra aplicación.

Fases del Código:
- Importación de librerías:
            Librería HTTP y MQTT : implementa las funcionalidades básicas (solicitudes, recepción
                      de mensajes, etc) para realizar comunicaciones.
            Librerías Sensor BMP y DHT: necesarias para realizar las lecturas de los sensores.
            Librería JSON: se usa para dar formato JSON a los datos que se desea enviar a
                      ThingSpeak, ya que la plataforma trabaja con este formato (InformacionJSON).
            Librería Raspberry: permite configurar los pines de la raspberry (Input/Output).
            Librería Math: para poder realizar operaciones matemáticas.
            Librería Time: para poder establecer tiempos de espera.

- Creación de un canal ThingSpeak:
           1- Creación de parámetros asociados a la información del canal ThingSpeak:
                        Channel_Name: String con el nombre que deseamos poner al canal
                        User_API_Key: clave propia que se asigna  a cada usuario al registrarse en
                                    la plataforma ThingSpeak. 
                                    Para consultarla:
                                    Account - MyProfile - ThingSpeak Settings - User API Key
                        Write_API_Key, Read_API_Key: inicialmente desconocidas ya que se generan 
                                    al crear los canales. Inicializamos los parámetros como un 
                                    string vacío.
           2- Crear una conexión TCP a través de la que poder establecer comunicaciones HTTP
           3- Establecer comunicación con ThingSpeak y solicitar la información de los canales
               existentes en la plataforma. Al recibir la información, buscaremos si ya existe un
               canal con el nombre asignado en Channel_Name.
                   a) Si el canal existe: registraremos el identificador de canal (Channel_Id) y
                       solicitaremos las claves del canal (Write/Read API Key)
                       Guía ThingSpeak: read_settings_channel
                   b) Si NO existe, crearemos el canal: crearemos un mensaje HTTP en el que
                       mandaremos la información necesaria para crear un canal ( clave de usuario,
                       campos que deseamos, privacidad del canal).
                       Guía ThingSpeak: create_channel
               Nota: este paso podría realizarse de muchos otros modos, como simplificarlo
               haciendo que siempre se cree el canal, destruir el canal si ya existe y crearlo de
               nuevo siempre, etc. Existen múltiples opciones, por lo que sois libres de escoger
               como lo haréis, recordad que tenéis la guía de ThingSpeak como ayuda. 
           
- Lectura de los sensores y envío de información a ThingSpeak:
           1- Configuración de los pines GPIO de la raspberry. En este punto vamos a indicar que 
                los pines de la raspberry son de tipo entrada, de modo que peritirán leer la
                información que manden los sensores.
           2- Bucle infinito de lectura, procesamiento y envío de datos a ThingSpeak. Este
               apartado puede estructurarse del siguiente modo:
                  a) Lectura del sensor DHT y BMP. En este punto he incluido la visualización de
                      los datos por pantalla, pero no sería necesario.
                  b) Realización de cálculos para obtener información derivada de los valores
                      captados por los sensores. Por ejemplo: cálculo del punto de rocío a partir
                      de la medición de temperatura y humedad. Este punto puede extenderse tanto
                      como uno quiera.
                  c) Realizar una solicitud de escritura de datos sobre el canal ThingSpeak
                      mediante comunicaciones MQTT. Para llevar a cabo este tipo de comunicación
                      es preciso crear un topic y un host. La creación de estos elementos solo
                      debe hacerse una vez, por lo que se debe realizar justo antes del bucle. 
                      Por otro lado, debe construirse el mensaje (parámetro llamado payload) que
                      contiene la información a que deseamos enviar a ThingSpeak. El payload toma
                      un valor distinto en cada iteración, por lo que se genera dentro del bucle.
                      En nuestra aplicación el mensaje tendría definidos los valores de
                      temperatura, humedad, punto de rocío y presión  obtenidos/calculados por los
                      sensores. Una vez definidos el topic, host y payload puede realizarse el
                      envío de la información o publicación  ya que se trata de una comunicación
                      Publish/Subscribe.
                      Guía ThingSpeak: publish_to_a_channel_feed
           3- Establecer un tiempo de espera de 15 segundos. Este paso provoca que el bucle se
               duerma durante 15 segundos y por tanto no realice envíos de información a
               ThingSpeak. El motivo por el que debe hacerse esto es que la plataforma
               ThingSpeak no permite la subida de datos a un frecuencia superior de 15 segundos
               a los usuarios creados de forma gratuita, que es nuestro caso. Por tanto, si no
               hiciéramos este paso, simplemente realizaríamos envíos que no se publicarían
               realmente.

Las fases del código son las descritas y como podéis ver la plataforma ThingSpeak proporciona muchos recursos para facilitar la tarea. Aún así, os voy a dejar colgado el código que mi compañero y yo hemos desarrollado para que os sirva de guía. Comentaros que hemos hecho uso del lenguaje Python, que  es un lenguaje de programación interpretado cuya filosofía es una sintaxis que favorezca el código legible. Además es un lenguaje de programación multiparadigma (soporta orientación a objetos, programación imperativa y programación funcional), usa un tipado dinámico y es multiplataforma. Como puede que muchos de vosotros no conozcáis este lenguaje, os dejo unos enlaces que conducen a manuales que yo misma he usado para aprender Pyhon:

A continuación tenéis el código Python creado por mi compañero y yo para desarrollar la aplicación. Espero os sirva de ayuda o incluso de plantilla para que apliquéis mejoras o ampliaciones. 
(No dudéis en preguntar las dudas que os surjan en la zona de comentarios)

El próximo día explicaré cómo podemos ejecutar nuestro código sobre la RPi. La ejecución es sencilla, no obstante deben instalarse y configurarse un par de cositas en la RPi para que todo funcione correctamente.







Comentarios

Entradas populares de este blog

Conociendo ThingSpeak

Las TICs en la Investigación Científica

PASO 3: Conocimientos previos