Arduino & Raspberry Pi como estación meteorológica casera

Para un cusro he tenido que montar un ejercicio sencillito sobre Arduino que trataba de regular la intensidad de un led usando una aplicación web como regulador. Cambiando un par de componentes y añadiendo un poco más de código podemos llegar a tener una estación meteorológica muy sencilla que vuelque sus datos en un servidor y así puedan ser consultados desde cualquier dispositivo. Vamos a explicar a continuación como conseguirlo:

¿Qué hemos usado?

Hardware

  • Raspberry Pi con Raspbian instalado.
  • Placa Arduino o similar.
  • Sensor DHT11 (hemos utilizado KY-015 montado en su PCB).

Software

  • NodeJS – La Raspberry Pi la vamos a usar como servidor web usando NodeJS (a continuación explicamos qué versión).
  • Express – Framework para NodeJS.
  • Socket.IO – Librería que facilita la comunicación cliente-servidor en tiempo real.
  • SerialPort – Librería de NodeJS para poder comunicarnos vía puerto serie con nuestra placa Arduino.
  • Plantilla HTML y JS para la visualización de datos a tiempo real

A lo largo de los siguientes puntos iremos contando los diferentes pasos que hemos tenido que dar para llegar a construir nuestro propio servidor meteorológico.

Paso 1 – Instalar NodeJS y sus librerías

Para realizar este ejemplo hemos elegido el servidor Node por su facilidad de instalación y puesta en marcha con pocos conocimientos. Además se integra a la perfección con la librería socket.IO . Necesitaremos también instalar la librería SerialPort que nos permite comunicarnos vía puerto serie con el Arduino.

El problema que nos vamos a encontrar es que SerialPort funciona en versiones antiguas de Node, por lo que tendremos que instalar esa versión anterior de Node mediante los siguientes comandos:
wget http://conoroneill.net.s3.amazonaws.com/wp-content/uploads/2015/04/node-v0.12.2-linux-arm-pi.tar.gz
tar -zxvf node-v0.12.2-linux-arm-pi.tar.gz
cd node-v0.12.2-linux-arm-pi
sudo cp -R * /usr/local/

Ya tendremos nuestro servidor Node preparado para ejecutarse (mediante el comando node) dentro de la carpeta /usr/local.

Las librerías que vamos a necesitar para ejectuar nuestro ejemplo van a ser Express, Socket.io y SerialPort. Todas ellas podremos instalarlas mediante npm:
npm install express
npm install socket.io
npm install serialport

Con estos pasos ya habríamos dejado preparado nuestro servidor

 

Paso 2 – Montar el sensor en Arduino

ArduinoDHT11En algunos casos el sensor DHT-11 se presenta ya montado en una placa con la resistencia y leds indicando su funcionamiento. En caso contrario, habrá que poner una resistencia de 220 Ohm. El circuito no tiene más misterio.

Para ver el código del sketch de Arduino, puedes acceder al repositorio GitHub del proyecto y descargarte este y otros ejemplos.

Paso 3 – Comunicaciones SPI (vía puerto serie)

Quizás este es el paso más interesante de todo el proyecto. Gracias a las comunicaciones por puerto serie vamos a ser capaces de comunicar Arduino con la RaspberryPi. Desde Arduino habrá que inicializar la comunicación con la instrucción:
Serial.begin(9600);
En ella indicamos la velocidad de transmisión, en este caso 9600.

Cada iteración iremos volcando la humedad y la temperatura en ese bus para que Node lo reciba. En el repositorio podemos ver las sentencias completas para recibir los datos desde Node

Paso 4 – Visualización de datos a tiempo real

Una vez recibidos los datos en Node, solo nos queda tratarlos y mostrarlos en una gráfica a tiempo real. Para ello he utilizado una plantilla ya creada: SB Admin 2. Esta plantilla trae un ejemplo de gráficas a tiempo real que he reutilizado para nuestro ejemplo.graficas

Cada vez que Node recibe un dato, pasamos ese dato procesado a la interfaz de cliente. Para ello utilizamos la librería Socket.io que nos facilita la comunicación entre cliente y servidor a tiempo real.

Cada vez que la interfaz recibe un dato, lo vuelca en la gráfica inmediatamente dando lugar a nuestra estación meteorológica accesible mediante una aplicación web.

Una futura mejora sería que el sensor no se consultara hasta pasado un tiempo razonable (una hora por ejemplo) para que se pudiera observar las variaciones en la gráfica.

Todo el código utilizado para estos ejemplos está en el repositorio de Github, que poco a poco va cogiendo forma y se van subiendo diferentes ejemplos de pruebas entre Node y Arduino.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *