Cómo hacer un registrador de temperatura online con Raspberry Pi

51

Hace tiempo vimos en Nergiza cómo hacer un registrador de temperatura con Arduino, como despertó bastante interés y hace poco hemos presentado la Raspberry Pi 2 B en sociedad, vamos a hacer un registrador de temperatura online con la Rasp de forma que pueda leer la temperatura de una sonda cada X minutos y volcarla en una web para poder consultarla desde cualquier sitio.

Regsitrador de temperatura Raspberry Pi

La verdad es que cuanto más utilizamos la Raspberry más nos damos cuenta de la gran cantidad de posibilidades que existen con este microPC de bajísimo consumo, así que vamos allá con este DIY que no será el último que hagamos con la Rasp.

 

Montando nuestro registrador de temperatura Raspberry

El montaje es muy sencillo, utilizaremos la misma sonda de temperatura que utilizamos con Arduino, la Dallas DS18B20. Este tipo de sonda la podéis encontrar en varios formatos, aunque en algunas fotos veís que hemos usado una más pequeña, creo que este tipo (foto) es más versatil ya que se puede sumergir en agua y viene con el cable incorporado.

Sonda de temperatura DS18B20

Para la conexión de la sonda con la Raspberry Pi utilizaremos el puerto GPIO 4 y una resistencia de 4,7K tal y como aparece en este esquema.

Esquema sonda de temperatura Raspberry Pi

 

Subiendo los datos de temperatura a ThingSpeak

Como servidor donde volcar los datos de nuestro registrador de temperatura vamos a usar el servicio ThingSpeak, una web gratuita que ofrece facilitarnos el “Internet de las cosas” registrando y creando gráficos con cualquier tipo de dato que el envíemos. El proceso aquí es muy sencillo.

  1. Nos registramos en ThingSpeak
  2. Agregamos un nuevo canal “New Channel”
  3. En el apartado “Name” ponemos “Raspberry”
  4. En el apartado “Field label” ponemos “Temperatura”
  5. Pinchamos en “API Keys” dentro del canal y copiamos la clave que aparece en “Write API Key” ya que la necesitaremos luego

 

Configurando la Raspberry Pi

Ahora nos queda configurar la Raspberry Pi para que suba los datos a ThingSpeak, para ello nos ponemos en modo Fulgencio ya que vamos a tener que teclear algunos datos en la consola de Raspbian, así que cogemos nuestra bolsa de Doritos y apagamos la luz.

En primer lugar vamos a configurar la Raspberry para que sea capaz de leer la información de la sonda de temperatura conectada al puerto GPIO, abrimos un terminal y tecleamos sudo nano /boot/config.txt para editar el archivo de arranque, al final del mismo incluimos el siguiente código:

Salimos con crt+X y decimos “yes” cuando nos pregunte si queremos guardar (con el mismo nombre).

Volvemos al terminal y tecleamos: sudo nano registradortemperatura.py . Mediante este comando creamos un archivo llamado registradortemperatura.py (extensión de python) y aparecemos directamente en el editor de archivos (nano). Ahora pegamos el siguiente código:

Recordar salir del editor con crt+X y poner “yes” cuando nos pregunte si queremos guardar.

Ojo, es necesario cambiar el ‘Pon_aquí_tu_key” por la key que hemos copiado de ThingSpeak en el apartado anterior.

Ahora tenemos un script en python que cada vez que ejecutemos enviará nuestro dato de temperatura a nuestro canal en Thingspeak.

Solo nos queda configurar la Raspberry de forma que ejecute ese script cada cierto tiempo para tener un verdadero registrador de temperatura. Para ello editaremos el archivo crontab que nos permite programar tareas de este tipo. Tecleamos en una sesión de terminal: crontab -e , y pegamos el siguiente texto.

Puedes sustituir el “1” por la cadencia de registro de datos que necesites (en minutos).

Recordar salir del editor con crt+X y poner “yes” cuando nos pregunte si queremos guardar.

Una vez tenemos todo montado, podremos ver en nuestro canal de ThingSpeak registros como el de la imagen o incluso descargar los datos en un archivo .csv para hacer “cosas Nergizas” con excel.

Gráfico registro temperatura Raspberry Pi

 

Lista de ingredientes

A continuación ponemos la lista de ingredientes necesarios para esta receta que puedes encontrar en la tienda online Banggood:

  • Raspberry Pi 2 B (46,80€): También puedes usar la versión B+ pero por la diferencia de precio creo que la 2 ofrece mejores prestaciones.
  • Sonda de temperatura DS18B (2,51€)
  • Resistencia 4,7K: puedes comprarla en cualquier tienda de electrónica por unos céntimos o utilizar un pack de resistencias (640 uds.) como este para tener disponibles para futuros DIY.
  • Bolsa de Doritos (1€)

Si estás pensando en llevar a cabo este DIY te recomendamos que leas nuestra review sobre la Raspberry Pi 2 B ya que tiene muchas otras utilidades que podrían interesarte.

¿Tienes pensado hacer este DIY?

Ver respuestas

Cargando ... Cargando ...

51 Comentarios

    • Cierto, el problema es que no tengo contador accesible para probarlo, por lo tanto va a ser complicado, pero a ver si puedo hacer algo.

      Un saludo

      Thumb up 0 Thumb down 0

  1. Hola, muy interesante el artículo. En realidad, tengo hecho este mismo montaje en casa excepto la parte de publicación en web, así que me ha venido muy bien para conocer el servicio de ThingSpeak. Eso sí, sugeriría que en la parte de configuración de la Raspberry Pi incluyeras los comandos para instalar los módulos de python necesarios (con apt-get o pip, lo que se prefiera).

    buen trabajo!
    jordi

    Thumb up 0 Thumb down 0

    • Gracias.

      Lo del precio ya se comentó en el anterior post, nosotros ponemos el enlace a Banggood ya que es quien colabora con nosotros y nos ha enviado en este caso la Raspberry para que hagamos este tutorial.

      La verdad es que estoy un poco cansadillo de Amazon desde el tema del libro de Tesla.

      Thumb up 0 Thumb down 0

  2. Interesante, voy a pedir la sonda y a montarme uno 😉
    Lo que habría que avisar es que la raspy no tiene ninguna protección el el puerto GPIO (por cierto: Entradas/Salidas de Propósito General) por lo que un error al montar cualquier “cosa de estas” puede quemar la placa. Tampoco es tanta perdida, es baratita 😉 pero mejor tener cuidado y no dejar que Fulgencio conecte los cables

    Thumb up 1 Thumb down 0

    • -En el caso de la Rasp tienes un ordenador en el cual una de sus funciones es hacer de registrador de temperatura, en el caso de Arduino tienes un “registrador de temperatura” a secas.

      -La Rasp registra los datos online en una web que puedes consultar desde cualquier lugar, en el caso del Arduino lo graba en una microSD que tienes que extraer y leer en un PC. Supongo que se podría hacer el registrador online con arduino pero haría falta una shield ethernet o wifi también.

      -El registrador con Arduino es más barato.

      Lo más importante es el primer punto creo yo, la Rasp tiene un abanico de posibilidades infinto que puedes simultanear con el registrador de temperatura. Yo por ejemplo al tengo registrando pero a su vez hace de servidor de descargas y de centro multimedia, además de plataforma para “experimientar” futuros DIY, todo ello en Raspbian.

      Thumb up 2 Thumb down 0

  3. Carlos:
    Mas que interes en la RB (que tambien), me interesa lo que se puede hacer/ ver con los datos subidos a la nube…
    Hay forma de ver ls datos que ha subido tu RB a Thingspeak?

    Thumb up 0 Thumb down 0

    • Creo que no permite compartir esos datos, pero si quieres registrate y pásame tu key y pongo mi Raspberry para que suba los datos a tu usario durante un tiempo para que lo pruebes.

      Un saludo

      Thumb up 0 Thumb down 0

      • No hace falta, gracias. Al final, en Thingspeak he visto que hay “piblic channels” de gente que conecta sus cosas a internet, con lo que me he hecho una idea de la potencia de explotacion de datos qur tiene.
        Es curioso ver a uno de Bilbao (ceo) que controla y publica los Kilometros que corre su hamster en la rueda de su jaula cada dia… 🙂

        Thumb up 0 Thumb down 0

    • Seguro que sí Argi, aunque no sabría decirte como ahora mismo, quizás lo más sencillo es que el smartphone cree un red wifi y que la raspberry se conecte a esa red pare enviar los datos.

      Thumb up 0 Thumb down 0

  4. Al parecer da un problema con la linea 8 a mi me sale esto. Si alguien sabe como solucionarlo o donde encontrar la solucion lo agradeceria enormemente.
    Me encanata NERGIZA

    Thumb up 0 Thumb down 0

    • Mmmm… de momento nadie ha tenido problema. Creo que te has olvidado de pegar cual es el error que te sale exactamente, cuando lo pongas vemos como podemos resolverlo. Gracias por seguirnos!!
      Un saludo

      Thumb up 0 Thumb down 0

  5. Decir tambien que en Thingspeak no recibia datos y por eso decidi ejecutrarlo a mano, de hacerlo con el modo crontab no se ve el error por eso nadie dice nada ,creo.
    pi@raspberrypi ~ $ python /home/pi/registradortemperatura.py
    ERROR: could not insert ‘w1_therm’: Operation not permitted
    Traceback (most recent call last):
    File “/home/pi/registradortemperatura.py”, line 8, in
    device_folder = glob.glob(base_dir + ’28*’)[0]
    IndexError: list index out of range

    P.D.
    Siento la falta de puntuaci’on aun tengo el teclado en otro idioma.

    Thumb up 0 Thumb down 0

    • Hola Samuel.

      Me tiene pinta de que no te encuentra la sonda de temperatura, a mi me da ese error si lo ejecuto sin sonda conectada. Comprueba que está bien conectada (ojo polaridad). Una vez conectada debería de aparecerte algo aquí: cd /sys/bus/w1/devices

      Thumb up 0 Thumb down 0

      • Una pregunta Carlos.
        A mi tambien me sale el mismo error, pero estoy usando el sensor DHT22 . Ya probe con otro aplicativo para ver si esta conectado, y me sale todo bien. Presiento que algo tiene que ver el código w1, porque estamos usando el GPIO 4 . Espero me puedas asesora. Gracias y saludos.

        Thumb up 0 Thumb down 0

  6. ¡Muchas gracias por el pequeño script! Por fin logré pasarlo a mi Pi B. Tenemos un solo DS1820 (no DS18B20) que parece produce 10 en vez de 28 como nombre de archivo pero al correr el programa con “python registradora…..py” me arroja un error en la línea 4 de sintáxis. Estoy usando nano para leer el archivo pero no tiene numerado las líneas y no sé cuál es la #4. Sería la de “base-dir”? ó la siguiente – lol.

    Lo siento – estoy en la étapa de “copy/paste” y pensaba que una vez que pudiera hacer correr bien este programa que podría hacer la traducción al inglés y subirlo al sitio de ThingSpeak con un enlace a tu página.

    Bueno, a ver qué piensas. Mientras, qué tengas una noche muy hermosa – 🙂

    Thumb up 0 Thumb down 0

    • Hola Fred.

      En primer lugar sería importante saber cual es la línea 4 en tu código, simplemente cuéntalas ya que en el que hemos puesto la línea 4 está en blanco.

      Un saludo

      Thumb up 1 Thumb down 0

      • Tienes razón. Empezando desde #Registrador de …, el cuarto renglón está en blanco.

        Gracias por contestar y ¡qué tengas un día hermoso!

        Thumb up 0 Thumb down 0

      • Muchas gracias, Carlos. Parece que hubo muchos problemas con el copy/paste por carácters no deseables – aunque lo guardé como “texto”.
        Bueno, parece que está funcionando. Me arroja dos datos: 200 y OK. Supongo que el 200 es debido a que este sensor es DS1820 y no el DS18B20. No hay cuete – solo divido entre 10,000 en vez de 1000. No programo en python pero me ayudó recordar que algunas de las programas son sensibles a la posición del rengón.

        Ahora a ver si logró subir el dato.

        Otra vez, gracias Carlos por ayudar. 🙂

        Thumb up 0 Thumb down 0

  7. Hola, ya realicé tu diy y funcionó perfectamente, lo adapté con la lectura de otras 4 variables..

    Pero ahora intento enviar los datos directamente a un host local, aún no me ha funcionado pero en caso de que sepas como manejar los comados de request con el metodo POST que usas te agradecería información.

    Saludos!

    Thumb up 0 Thumb down 0

  8. Hola, muchas gracias por el articulo. Tengo una sonda termica y no sé como programar en python, mi duda es ¿cómo quedaría el código si quisiera tomar lecturas locales en tiempo real?
    De antemano gracias

    Thumb up 0 Thumb down 0

  9. Carlos una consulta.
    Que Sistema Operativo se está usando en el raspberry, y si se requiere alguna aplicación extra para ingresar el código que nos compartes. Te agradeceria me puedas ayudar con mis inquietudes. Acabo de comprar el Raspberry PI 3 Model B y deseo hacer los mismo. Un cordial saludo.

    Thumb up 0 Thumb down 0

  10. Buenas tardes.
    Funciona perfectamente, pero tengo el siguiente problema.
    Al conectar un segundo sensor ds18b20. Si ejecutó cualquiera de los dos, funciona perfectamente, pero al ejecutarlo en cron. Solo me sube a thingspeak uno de los datos.
    Gracias

    Thumb up 0 Thumb down 0

    • No se que puede suceder, lo siento. En breve publicaremos un DIY similar pero para registrar en Thingspeak con Arduino, quizás te sea útil.

      Thumb up 0 Thumb down 0

  11. Estoy haciendo un proyecto similar, lo que tengo son 2 dudas:

    – con ese codigo py como lo modifico para que en vez de enviar los datos a thingspeak me los mande a una api propia ej: http://www.miservidor.com/api.php?temp=22.5 (donde ahi los guardo yo en un mysql y muestro los datos en una web) ???

    – se podria leer a tiempo real la temperatura remotamente desde un servidor externo, con una api php por ejemplo???

    Gracias

    Thumb up 0 Thumb down 0

    • Hola Rubén, ni idea de lo que me preguntas, no soy un experto en programación 🙁 aunque seguro que se puede hacer lo que preguntas.

      Thumb up 0 Thumb down 0

  12. Buenas,

    antes de nada muchas gracias por toda la información que proporcionáis.

    Soy nuevo en este mundillo de la Raspberry y viendo el esquema donde se indica cómo conectar la sonda de temperatura y la resistencia a los conectores de la Raspberry, me surge la duda de cómo se conecta la resistencia, ¿se puede conectar directamente en los mismos pines?.

    Muchas gracias de antemano.
    Un saludo.

    Thumb up 0 Thumb down 0

  13. Buenas,
    Gracias por compartir este fabuloso tutorial que reúne muchas de las ideas que llevo tiempo queriendo poner en práctica.
    He tratado de realizarlo y al ejecutar el programa Python, me da el error siguiente:

    Traceback (most recent call last):
    File “tempera.py”, line 8, in
    device_folder = glob.glob(base_dir + ’28*’)[0]
    IndexError: list index out of range

    Te agradecería alguna orientación.

    Saludos

    Thumb up 0 Thumb down 0

  14. Muy buen post, te queria preguntar si es posible conectar más de un sensor, lo quiero utilizar para 4 fermentadores de cerveza, si es posible, me indicarias como seria esa conexion?

    Thumb up 0 Thumb down 0

  15. Soy de Alemania y utilizo Google Translator. Lo siento, no puedo hablar español.
    Tengo un Raspberry Pi y quiero mostrar mi temperatura de la piscina y la temperatura exterior.
    Tengo que 2 DS18B20 sensores.
    ¿Cuántos sensores envía la secuencia de comandos de Python? Se transmiten todos los sensores conectados?

    Gracias

    Thumb up 0 Thumb down 0

  16. Buenos días, yo tengo tres conectados. Esta noche lo pongo aquí. Javier siento no haberte contestado hasta ahora, pero he estado fuera y no he podido hacerlo, esta noche copio el código

    Thumb up 1 Thumb down 0

  17. Buenas tardes.
    Como he indicado yo tengo tres sensores conectados en paralelo.
    Este es el codigo:
    # Open the file that we viewed earlier so that python can see what is in it. Re$
    tfile = open(“/sys/bus/w1/devices/28-************/w1_slave”)/los asteriscos se cambian por la numeracion de tu sensor
    # Read all of the text in the file.
    text = tfile.read()
    # Close the file now that the text has been read.
    tfile.close()
    # Split the text with new lines (\n) and select the second line.
    secondline = text.split(“\n”)[1]
    # Split the line into words, referring to the spaces, and select the 10th word $
    temperaturedata = secondline.split(” “)[9]
    # The first two characters are “t=”, so get rid of those and convert the temper$
    temperature = float(temperaturedata[2:])
    # Put the decimal point in the right place and display it.
    temperature = temperature / 1000
    print temperature

    /Este código se utiliza para cada sensor

    Thumb up 0 Thumb down 0

Dejar respuesta

Please enter your comment!
Please enter your name here