Estacion Metereologica

David E. Barrera
proyectos
electronica
iot
python
javascript
json
sqlite

Implementé mi pequeña estación meteorológica y la visualización de datos es bellísima…

Como les había contado antes, tenía en mente hacer una pequeña estación metereológica para medir patrones del clima, especialmente temperatura, humedad y presión, para tener una idea de las condiciones correctas para la lluvia, para épocas secas, etc. Hasta ahí parecía cálculos numéricos y cosas aburridas… Pero cuando hice la visualización de datos mediante gráficos, fue absolutamente hermoso…

Iniciemos con los materiales:

  • Raspberry Pi Zero (Recomiendo usar el W)
  • DHT11
  • BMP180
  • 128x64 OLED Display

Lenguajes usados:

  • Python
  • JavaScript

Procedimiento

Al principio tenía la idea de hacer toda una aplicación web para leer los datos de una base de datos, tanto así que hasta pensaba en usar MySQL! Pero durante el diseño del programa para obtener los datos, me di cuenta que usar MySQL sería un gran desperdicio de recuros, por lo cual lo reduje a SQLite, ya que se usa una sola tabla donde se almacenan 4 datos: Temperatura, Presión, Humedad y Tiempo de Lectura. Hasta ahí, todo viento en popa. Pero luego dije, así como fue con la base de datos, será conveniente usar todo un framework de aplicación web para una base de datos (tabla de datos?) así de pequeña? Aunque la cantidad de datos si es considerable, ya veremos esto más luego.

Entonces decidí, aparte de guardar en una base de datos, almacenar en un archivo por dia, como un log. Escogí el formato JSON para hacerlo más fácil de escribir y leer por cualquier lenguaje de programación. El script escrito en Python lee cada minuto los sensores y almacena los datos en SQLite y JSON. Que tengo hasta ahora? Leo datos, almacenos datos… Me falta ver datos!

Manteniendo la idea de usar la web para mostrar los datos, y sin usar un framework, me puse en la busqueda de leer archivos JSON usando JavaScript, porque tiene algo de sentido, verdad? Fue entonces que encontre este sitio donde explica cómo usar XMLHttpRequest para leer un archivo. Perfecto, ahora cómo hago para cargar un archivo en particular? Pues fácil, lo meto en una función, le paso el nombre del archivo como parámetro y listo!

Hasta ahí, leo el archivo JSON, lo cargo en una tabla en HTML y bonito (14000+ registros)… Pero los sitios meteorológicos no solo ofrecen información texto, usan muchos gráficos para visualizar datos! Recuerdo que cuando hice la botonera inalámbrica, hice uso de una librería para visualizar datos de una base de datos (pero estaba usando PHP entonces), entonces tuve que buscar algo diferente, que use JsvaScript. Encontré la librería perfecta, chartjs. Al principio quería poner las tres mediciones en un solo gráfico, pero al no tener unidades similares, el gráfico se vería muy mal, por lo cual decidí hacer tres gráficos diferentes.

Al final de todo, yo creo que es hermoso. Al ver la fluctuación de los valores (especialmente la presión), fue un momento muy chevere, el poder visualizar estos cambios a lo largo del día que rara vez notamos, a menos que el cambio sea agresivo (por ejemplo, lluvia).

Si desean, pueden revisar el código (y darle una estrellista) en Github.