Proyecto Estación Meteorológica 3: Obtención y Envío de Datos Mediante Python

Obtención y Envío de Datos Mediante Python

Una vez se ha configurado la Raspberry como es debido, se comienza la codificación. Lo primero que se codifica es el programa de Python. La función de este programa es el de crear automáticamente los canales necesarios en ThingSpeak, recoger datos del sensor y subir estos a los canales previamente mencionados.

Para ello, primero se observan las especificaciones del usuario para definir la problemática. Haciendo esto, se observa que hay que subir datos con una frecuencia de 10 segundos, pero los canales de ThingSpeak solo aceptan datos cada 15 segundos. Para solucionar este problema, se crean dos canales, a los cuales se suben datos alternamente.

En cuanto al código, lo primero es importar las librerías. Ya que la comunicación con ThingSpeak se hace mediante peticiones http, se importan las librerías urllib y httplib, además de json, la cual será necesaria para interpretar las respuestas. También se importan la librería de Adafruit_DHT para poder usar el sensor y time para tener un control del tiempo. Una vez importadas las librerías, se definen algunas constantes que se utilizarán durante el código, lo cual hará que el código esté más limpio y ayudará en caso de querer cambiar alguna constante.

Después, se definen algunas funciones que se utilizarán durante el código. La primera de ellas es “create_channel”, la cual se encarga de crear los canales en ThingSpeak. Esta función tiene una entrada: el nombre que se desea poner al canal. En ella se crea una petición http de tipo POST y se envían las características que se desea que tenga el canal en formato formulario. Por último, se recibe la respuesta, la cual es traducida a json. Esto último es lo que devuelve la función.

La segunda función es “subir_datos”. Esta función se encarga de subir los datos leídos a los canales de ThingSpeak. Tiene 4 entradas, las cuales son el nombre del canal al que se quieren subir los datos, la clave API de escritura de dicho canal y los 2 datos que se desean subir. En este caso también se crea una petición http de tipo POST, en el cual se suben los datos en formato formulario.

Una vez se ha definido todo lo necesario, comienza la ejecución acíclica del programa; es decir, la parte del código que solo se ejecuta una vez al comienzo de la ejecución. Lo primero es establecer una conexión TCP entre la Raspberry en la que correrá el programa y el servidor de ThingSpeak. Cuando la conexión ha sido establecida, se crean los canales con la función previamente definida. Desde la respuesta de dicha función, se pueden recuperar tanto las ID de los canales como las claves API de escritura de estos. Por último, se inicializan algunas variables que se utilizan durante la ejecución cíclica.

Por último, se ejecuta el programa principal; es decir, la parte cíclica de este. En esta parte, se lee el sensor y se espera hasta que sea momento de subir los datos leídos. Durante esta espera, si los datos leídos por el sensor son erróneos o este no puede ser leído por algún fallo, es posible volver a leerlo hasta un máximo de 3 veces más. Tras estos intentos, si sigue habiendo problemas con los datos leídos, se sube un valor por defecto, el cual es el último dato leído. Al llegar el momento, se suben los datos con la función previamente definida. Esta parte se vuelve a repetir una vez más para subir los datos al segundo canal. Al finalizar este proceso, vuelve a iniciar el ciclo. Esta parte puede ser interrumpida en cualquier momento pulsando las teclas ctrl+c desde el teclado.


Así acaba el código de Python, el cual, al juntarlo todo, tiene el siguiente aspecto:

Comentarios

Entradas populares de este blog

Proyecto Estación Meteorológica 4: Visualización de Resultados Mediante HTML y D3.js

Diferentes técnicas de las redes neuronales