El internet de las cosas

En este blog se muestran los pasos, de manera detallada, para lograr subir datos sensados a la nube en internet. A partir de un sensor construido con Arduino, los valores sensados se leen en Python y de éste se sube a la nube (plataforma Xively).

TECNOLOGÍA

J. Miranda & R. Rivera

2/27/20244 min read

Sensor en ARDUINO y datos publicados en la nube XIVELY a través de PYTHON:

Para mostrar la factibilidad de subir datos a la nube, haremos un sensor bastante simple. Se usa un potenciómetro, conectando uno de su terminal central a cualquiera de las entradas analógicas en Arduino, por ejemplo en A0. Uno de los terminales extremos del potenciómetro lo conectamos a 5V y el otro a GND, como se muestra en la figura:

El esquema de esta parte es como se muestra en la figura siguiente:

Luego, escribimos el siguiente código:

Podemos usar el monitor serial y ver los valores sensados.

Previamente a los siguientes pasos se debe crear una cuenta en Xively. Ya creada la cuenta, desde la pestaña DEVELOP, agregamos un dispositivo haciendo clic en el botón Add Device. Completamos los datos que solicitan. Hemos nombrado al dispositivo como SensorPucp. Debemos considerar los valores del FEED y del API KEY, en la figura se muestra encerrados de rojo, pues los introduciremos en el código en Python. El valor 72 que aparece en channels, es un valor que uno puede configurarlo a cero o al valor que tomaría el sensor cuando esté apagado.

Los valores sensados por Arduino deben ser leídos por Python. Para ello instalamos la librería pyserial la cual leerá valores en el puerto USB que Arduino envía. Instalamos luego la librería setuptools, la cual es un ejecutable y se importa en el proceso de instalación de la librería xively. La librería xively es para poder conectar Python con xively y subir datos a la nube por medio de esta plataforma. La instalación de estas librerías se debe hacer desde la ventana de comandos de Windows. Hay que dirigirse hacia las carpetas descomprimidas de las librerías que se han descargado, y desde ahí hacer la instalación. De igual manera debería instalarse la librería xively. Primero nos dirigimos, desde la línea de comandos, hacia donde se encuentra la carpeta descomprimida de la librería xively, luego ejecutamos: setup.py install.

Luego que se hayan instalado todas las librerías, copiamos el “FEED” y el “API KEY” que son identificadores para cada sensor del usuario. Escribimos el siguiente código y lo guardamos en la carpeta Scripts, que se encuentra dentro de Python, con el nombre proyecto1.py (o en su defecto por el nombre que prefiera, nosotros lo llamamos así).

Luego ejecutamos desde la ventana de comandos de Windows y finalmente podemos ver en nuestra cuenta en xively, ya se están subiendo datos en tiempo real.

Leyendo data de XIVELY a través de PYTHON y ejecutando una respuesta con ARDUINO:

El esquema de esta parte es como se muestra en la figura siguiente:

Para mostrar la factibilidad de leer datos de la nube, haremos un sistema de ejecución bastante sencillo, que se encienda unos leds rojo y verde según un rango de valores leídos desde Xively. El arreglo es como se muestra en la figura abajo (Es recomendable poner una resistencia a la salida “7” y a la salida “8” y los respectivos leds). El Reader recibe los datos de xively que fueron leídos por Python. Estos valores se han configurado entre [0-255]. Se encenderá el led verde para valores comprendidos entre [0-127] y para valores superiores, comprendidos entre [128-255], se encenderá el led rojo.

Escribimos este código en Phyton y lo guardarmos en la carpeta Scripts, con el nombre proyecto.py (o en su defecto por el nombre que prefiera, nosotros lo llamamos así). Notar que se han utilizado el “FEED” y el “API KEY” identificadores para el sensor que creamos. Luego, ejecutamos desde la ventana de comandos de Windows. Finalmente podemos ver en nuestra cuenta en xively, se están subiendo datos (PUT) en tiempo real; y a la vez se están extrayendo (GET) datos de xively en tiempo real desde otra PC, y se enciende un led verde si el valor es < 128 y se enciende un led rojo si el valor está entre [128-255].