Lectura de sensores con Raspberry Pi 3
Hace un tiempo atrás recibí un regalo de un amigo que estaba de visita en Barcelona por algunos días, este regalo era una Raspberry Pi 3, desde ese mismo momento comencé a pensar en que hacer para usarla, inmediatamente conseguí un proyecto de estación meteorológica usando sensores de temperatura y humedad.
Para este proyecto utilizé:
- 1 Raspberry pi 3
- 1 sensor DHT11
- Tres cables jumper hembra a hembra
- Código que ejecuta la lectura de los sensores
- Una cuenta en Dropbox + un script que usa la api de dropbox
- 1 cron job para automatizar el proceso de actualizar el archivo json con los datos
El primer paso fué instalar la raspberry con raspbian y conectarla a la wifi.
El segundo paso fué conectar el sensor a la Raspberry
El tercer paso fué descargar el código para las lecturas del sensor de una cuenta oficial, he de mencionar que cambié el código para guardar los datos de la siguiente manera:
import RPi.GPIO as GPIO
import dht11
import time
import datetime
import json
# initialize GPIO
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)
# read data using pin 4
instance = dht11.DHT11(pin=4)
try:
while instance is not None:
#Create a dictionary
setInfo={}
#create a list(array)
setInfo['maresme']=[]
result = instance.read()
if result.is_valid() and result is not ' ':
#Array with the data
data=str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
temp="%-3.1f C" % result.temperature
hum="Humidity: %-3.1f %%" % result.humidity
setInfo['maresme'].append({"Date":data,"Temp":temp,"Hum":hum})
#To save the data in the file lecturasPy.json
with open("readingsPy.json", "a") as p:
json.dump(setInfo, p, indent=2)
#Uncomment below to see the readings in the shell
#print(setInfo)
#Uncomment to make readings every certain seconds
#time.sleep(1800)
except KeyboardInterrupt:
print("Cleanup")
GPIO.cleanup()
Al ejecutar este código verá las lecturas en el siguiente formato:
{'maresme': [{'date': '2020-10-21 15:13:58', 'Temp': '23.1 C', 'Hum': '95.0 %'}]}
{'maresme': [{'date': '2020-10-21 15:14:08', 'Temp': '23.2 C', 'Hum': '95.0 %'}]}
Estos datos se guardan en el archivo readingsPy.json que he creado en una carpeta de mi usuario.
Para no tener miles de lecturas en el shell simplemente comenté la línea de impresión en pantalla.
Para establecer cada cuanto tiempo se realizan las lecturas (en segundos) se modifica la línea "time.sleep(1800)"
Lo siguiente ha sido configurar el script que se conecta a la API de dropbox para realizar el upload el archivo y tenerlo disponible online, para este fin seguí las instrucciones de este blog o de éste otro.
Una vez creado el script necesitamos una tarea que ejecute este comando cada x tiempo, para ello creé una tarea crontab.
Para ello teclea crontab -e (Sin usar sudo), este comando abrirá una ventana como ésta, si quieres más información acerca del comando cron vista ésta web.
En mi caso particular he creado una tarea que ejecuta el script de dropbox cada hora:
59 * * * * /home/pi/Dropbox-Uploader/dropbox_uploader.sh upload /home/pi/projectsPython/sensortemp/lecturasPy.json /
Para ver el archivo que he creado en su momento puedes visitar mi dropbox aquí.
Aparte de ese método también podrías usar SCP ó Rsync para subir el archivo a cualquier carpeta que quieras, si quieres que postee acerca de estos métodos escríbeme e-mail.
Espero que te haya gustado la lectura, ¡Gracias por venir!