Midiendo la presión atmosférica con Raspberry Pi
Si queremos conocer y monitorizar la presión atmosférica de una forma barata… como no… este es tu documento! Podemos hacerlo rápidamente con una Raspberry Pi y un sensor que a penas pasa de los 2 euros! En este post veremos todos los pasos que necesitarás para conseguirlo, además como siempre… almacenaremos las mediciones en una base de datos de MySQL y luego visualizaremos con preciosas gráficas los valores gracias a Grafana!
Usaremos un pequeño sensor de presión barométrica BMP180, con él podremos obtener la temperatura, la presión atmosférica e incluso la altitud!
El conexionado GPIO del BMP180 sería muy sencillo, con la Raspberry Pi obviamente apagada, conectamos del BMP180 la conexión VCC al Pin 1 (3.3v), GND a un puerto de tierra de la Raspberry Pi, el SCL al Pin 5 (GPIO03) o SCL1; y por último la conexión SDA irá al Pin 3 (GPIO02) o SDA1 de la Pi.
Entendemos que tenemos una Raspberry Pi funcional con Raspbian instalado, si no tenemos las conexiones I2C habilitadas, lo tenemos que hacer ejecutando
“sudo raspi-config” > Vamos a “Interfacing Options”, habilitamos “I2C” y reiniciamos la Raspberry Pi.
Y ahora lo maravilloso, gracias a Matt Hawkins, podremos descargarnos su script de Python y ejecutarlo para obtener los datos!!
[sourcecode]wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bme280.py
python bme280.py[/sourcecode]
Como vemos este script es para el BME280, que también tendría sensor de humedad, el script es totalmente compatible, así que genial! Ahora lo dicho, cada uno debe tratar los datos como quiera, como siempre, y como ya sabéis, yo lo que suelo hacer es crear una tarea programada con cron que ejecute el script y el valor de presión atmosférica lo almacene en una base de datos de MySQL, luego los datos los veo con Grafana que queda chulisimo como ya sabéis! Así que si añadimos esto mismo al final del script conseguiremos almacenar la presión atmosférica en la BD:
[sourcecode]import sys
import MySQLdb
db = MySQLdb.connect("SERVIDOR_MYSQL","USUARIO","CONTRASEÑA","BASE_DE_DATOS")
cursor = db.cursor()
cursor.execute("""INSERT INTO presion_atmosferica (presion) VALUES (%s) """,( pressure))
db.commit()[/sourcecode]
Y como siempre, por si os interesa os pego el texto que necesitáis para crear la tabla exáctamente igual que la tengo yo, pero vaya que no tiene ningún misterio, tiene 2 columnas, una para almacenar la presión y otra la fecha (que al no permitir NULL pues se autocompleta cada vez que se mete el valor de presión):
[sourcecode]CREATE TABLE `presion_atmosferica` (
`presion` FLOAT NULL DEFAULT NULL,
`fecha` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
COLLATE=’latin1_swedish_ci’
ENGINE=InnoDB
ROW_FORMAT=COMPACT
;[/sourcecode]
Y listo en Grafana, en un Dashboard que tengamos, super fácil añadir un panel de tipo Graph y personalizarlo a gusto, dedicarle 5 minutos que Grafana es super intuitivo, en mi caso tengo un conector MySQL que conecta contra la BD y con esta Query tengo esa gráfica tan chula:
[sourcecode]SELECT presion as value, "Presion" as metric, UNIX_TIMESTAMP(fecha) as time_sec FROM presion_atmosferica WHERE $__timeFilter(fecha) order by time_sec asc[/sourcecode]
Listo!!! Espero que os resulte interesante! Ya tenemos la presión atmosférica monitorizada! Perfecto para una estación meteorológica o que? Éxito!