Lectura del sensor y subida de datos a Thingspeak
Una vez se hayan creado los dos
canales, lo próximo es leer datos desde el sensor y subirlos a ThingSpeak. Este
apartado se puede dividir entonces en dos subapartados: lectura de datos, y
subida de datos.
Lectura de datos del sensor:
Existe una librería que nos
facilitará mucho el leer los datos del sensor, se encuentra en GitHub (https://github.com/adafruit/Adafruit_Python_DHT/blob/master/README.md)
junto a las instrucciones de instalación.
Primero de todo, para instalar la
librería, ejecutaremos ciertos comandos en la línea de comandos de la Raspberry
Pi (bien estemos controlándolo directamente o indirectamente por SSH). La placa
trae preinstalado la versión 2.7 de Python, pero actualizaremos el sistema por
si hay alguna actualización:
sudo apt-get update
sudo apt-get install python-pip
sudo python -m pip install --upgrade pip setuptools Wheel
sudo pip install Adafruit_DHT
En caso de que no funcione el
comando pip, se puede instalar desde el repositorio:
sudo apt-get install git build-essential
python-dev python-smbus
clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
Una vez instalada la librería,
hay que conectar el HW, es decir, hay que realizar las conexiones del sensor.
El sensor tiene 3 conexiones: Vcc, GND y Data. Vcc puede ir a 3.3V o a 5V, pero
nosotros lo conectaremos a los 3.3V, ya que es suficiente para realizar las
lecturas. Como se ha explicado en las características del sensor, se usa un
solo canal para transferir los datos de humedad y temperatura, por lo que solo
tendremos que conectar el puerto a una conexión de la Raspberry Pi. La
distribución de los pines de la placa es el siguiente:
Por lo que el Vcc del sensor lo
conectaremos al pin 1, el GND al pin 6, y en nuestro caso la conexión Data al
pin 7 (que corresponde al pin lógico GPIO4, el que usaremos en el código). En
nuestro caso el sensor venía con la resistencia (y un condensador) soldado, por
lo que no hace falta incluir una resistencia extra. En caso de que no sea así,
hay que implementar una resistencia pull-up de la siguiente manera:
Donde la resistencia pull-up
tendrá un valor entre los 4.7k – 10kΩ. Una vez realizados las conexiones,
estamos en disposición de realizar las lecturas. Para comprobar la correcta
instalación de las librerías y de las conexiones, simplemente hay que ejecutar
el ejemplo que se encuentra dentro del repositorio instalado haciendo lo
siguiente:
python example.py
Una vez comprobado el
funcionamiento del anterior ejemplo, se procederá a crear nuestro propio
código. Primero se importarán la librería que hemos instalado y otra librería
que nos permitirá usar funciones relacionadas con el tiempo. A su vez, se
definirán el pin de entrada y el tipo de sensor que tenemos:
En la librería, existe una
función que realizará lecturas del sensor hasta que obtenga unos valores que no
sean nulos. Esta función a veces tarda cierto tiempo en realizarse, y por ello
calcularemos el tiempo transcurrido para poder compensarlo después y cumplir
así con la restricción de los 10 segundos. El código se repetirá de forma
indefinida:
Ahora, ya tenemos un programa que
haga mediciones cada 10 segundos. En el segundo subapartado se explicará cómo
subir los datos a ThingSpeak mediante el protocolo MQTT.
Subida de los datos a ThingSpeak:
Se utilizará el protocol MQTT
para subir los datos a ThingSpeak. Este protocolo basado en editor-subscriptor
es más ligero que http y por eso se hará uso de él. Cómo establecer una
conexión MQTT con ThingSpeak se especifica en el siguiente enlace https://es.mathworks.com/help/thingspeak/publishtoachannelfeed.html.
Antes de todo hay que instalar la
librería MQTT. Para eso se ejecutará la siguiente línea de comando:
sudo pip install paho-mqtt
Hay que especificar 3 apartados
para establecer una comunicación:
·
Broker: El intermediario entre el editor y el
subscriptor.
·
Tópico: El tema al que se subscriben los
subscriptores o donde publican los editores.
·
Payload: Los datos.
El código es el siguiente:
Integrando las dos últimas líneas
de código con el anterior apartado, después de la lectura del sensor,
tendríamos una subida automática de los datos del sensor a ThingSpeak. Para
subir los datos cada 10 segundos, necesitamos dos canales tal como se ha especificado
al comienzo, por lo que, para ir alternando la subida entre los dos canales,
haremos uso de un flag:
Con estas instrucciones debería
de ser suficiente para subir los datos leídos de un sensor a dos canales de
ThingSpeak de forma alterna.
Comentarios
Publicar un comentario