entramado.net

Monitorizar la temperatura desde Raspberry Pi

En este pequeño tutorial os voy a enseñar como monitorizar la temperatura de una habitación con sólo una Raspberry Pi, un sensor de temperatura DS18S20 y un poco de software.

Vamos a utilizar Emoncms, del que ya os he hablado anteriormente, instalarlo es realmente fácil, no tengáis miedo de seguir estas instrucciones, enseguida lo tendréis funcionando.

El siguiente paso va a ser conectar a la Raspberry Pi el sensor DS18S20+, podéis pedir una muestra gratuita a Maxim Integrated. El sensor se conecta usando los pines que tenemos disponibles en la RPi. Para conectarlo hay que seguir el siguiente esquema:

DS18s20 conectado a Raspberry Pi.

DS18S20 conectado a Raspberry Pi.

Es muy sencillo de conectar utilizando unos conectores para jumpers, yo he reciclado los que venían para la placa base de un PC de sobremesa antiguo, los que la conectan con los LEDs y los botones de encender y reiniciar.

El siguiente paso es poner en marcha una aplicación que recoja la temperatura del sensor y la envíe al servidor EmonCMS. Para ello voy a utilizar Python, un lenguaje interpretado muy sencillo que se utiliza mucho en la comunidad Raspberry Pi. El acceso al sensor se realiza a través de un driver que nos proporciona ya nuestra distribución de Raspbian.

El siguiente código es plenamente funcional, aunque posiblemente algo espartano, es necesario que añadáis vuestra apikey de Emoncms, la encontraréis entrando a vuestro servidor Emoncms, en la ruta /emoncms/input/api, hay que elegir la “Read & Write:” puesto que vamos a escribir los valores.

También podéis modificar cada cuanto tiempo queréis que se envíen los datos, en este caso cada 10 segundos, pero es posible modificar la línea “time.sleep(10)” por el número de segundos que queráis.

import os
import glob
import time
import urllib2, httplib
os.system('sudo modprobe wire')
os.system('sudo modprobe w1-gpio')
os.system('sudo modprobe w1-therm')
base_dir = '/sys/bus/w1/devices'
f = open(base_dir + '/w1_bus_master1/w1_master_slave_count', 'r');
sensorCount = f.readlines()
sensorCount = [int(l[0]) for l in sensorCount]
f.close()
f = open(base_dir + '/w1_bus_master1/w1_master_slaves', 'r');
devices = f.readlines()
f.close()
def read_temp_raw(sensor):
device_file = base_dir + '/' + devices[sensor][:-1] + '/w1_slave'
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines

def read_temp(sensor):
lines = read_temp_raw(sensor)
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw(sensor)

equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
return temp_string[0:4]

while True:
url = "http://localhost/emoncms/input/post?json={"
for x in range(0, sensorCount[0]):
url = url + devices[x][:-1] + ":" + read_temp(x) + ","
url = url[:-1]+"}&apikey=LA_APIKEY_VA_AQUI"
print(url)
urllib2.urlopen(url)
time.sleep(10)

Acordaos de respetar la indentación (tabuladores) en el código, si no no funciona bien en Python. Guardamos este código como un archivo .py, por ejemplo temperatura.py y ya lo podemos ejecutar de la siguiente forma:

python temperatura.py

Ahora ya nos podemos ir a Inputs en Emoncms y encontrar la entrada correspondiente a nuestro sensor de temperatura. En su configuración añadiremos un proceso “x 0.01” para que nos muestre la temperatura en ºC y bajo de eso un “Log to feed” para poder mostrarla. Ahora ya aparecerá en la pestaña Feeds, donde la editaremos y la seleccionaremos como REALTIME. Por último en la pestaña Vis seleccionamos el visor Realtime y el feedid de nuestro sensor de temperatura. El resultado será algo parecido a esto:

Temperatura en tiempo real.

Temperatura en tiempo real.

Ahora podemos poner este visualizador en el Dashboard y habremos terminado.

Actualización: Ahora puedes bajar el archivo python desde mi Github: https://github.com/carsanbu/tipi-web/blob/master/utils/temp_DS18S20_emoncms.py

14 respuestas a “Monitorizar la temperatura desde Raspberry Pi”

  1. pablo dice:

    Pedí los sensores y me llegaron en menos de una semana. Ya te contare como ha ido

  2. Litox dice:

    ¡Que bien! Tengo desarrollos en mente para el tema de la monitorización de temperatura.

  3. Flor Castro dice:

    Estoy intentado compilarlo y me arroja error el scripts en esta linea, me he cansado de revisar y no se que podria ser

    device_file = base_dir + ‘/’ + devices[sensor][:-1] + ‘/w1_slave’

    Graias de antemano!

  4. Litox dice:

    El script en principio funciona, lo único que se me ocurre es que no tengas bien los tabuladores, en Python tienen una función específica, no se ponen por mejorar la lectura como en otros lenguajes.
    Te recomiento que lo bajes de mi github directamente en lugar de copiar y pegar:
    https://github.com/carsanbu/tipi-web/blob/master/utils/temp_DS18S20_emoncms.py

  5. Flor Castro dice:

    Me sigue arrojando error, podria ser que estoy utilizando un sensor Ds18b20? compare ambos datasheet y no deberia der ser ese el problema.

  6. Andrés Arcela dice:

    Hola amigo como estas?. Una pregunta más hacia la parte de instalar emoncms. Cuando le doy a la dirección localhost/emoncms no aparece nada. Sabes por casualidad a que se debe?. Ya he realizado los pasos muchas veces y nada

  7. Litox dice:

    ¿Donde le das la dirección localhost/emoncms? ¿En el navegador de la Raspberry? Porque si es en tu PC tendrás que poner la dirección IP de la Raspberry en lugar de localhost. Algo en plan http://192.168.x.y/emoncms
    PD: He corregido tu post para que se entienda bien.

  8. Litox dice:

    Tienes razón, que sea el DS19B20 no debería influir. Mira a ver si puedes seguir este tutorial para comprobar si está todo bien conectado y el SO puede acceder al sensor correctamente:
    https://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/ds18b20

  9. andres arcela dice:

    si en Midori, el navegador de raspberry, me dice que la respuesta del servidor esta vacia. Dale ya reviso el link . Muchas Gracias

  10. andres arcela dice:

    ya arregle lo del localhost!! wuju.. pero me sale el mismo error del la persona de arriba 0.o

  11. Litox dice:

    ¿Podéis poner el error que os muestra, a ver si así sacamos el problema?

  12. andres arcela dice:

    Amigo muchas gracias!! ya se soluciono todo disculpa las moelestias jajajaj era un error como dijiste de indentación, lo que pasa es que si haces un espacio y luego presionas tabular aunque parezca que quedan en el mismo sector no lo están, muchas gracias!

  13. Algún tutorial para instalar emoncms ya que no sé como hacerlo, está bastante interesante el tutorial ya me funciona el sensor de temperatura, pero me falta graficar

  14. Litox dice:

    Por lo visto han desaparecido las instrucciones que yo seguí, ahora hay varias formas de hacerlo, esta parece la más rápida:
    https://github.com/emoncms/emoncms/blob/master/docs/DebianInstall.md

Deja un comentario

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

Todos usamos cookies, acéptalo ya. más información

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close