RaspberryPi Temperature Sensor: Difference between revisions

From Wurst-Wasser.net
Jump to navigation Jump to search
Line 88: Line 88:
  echo "set xdata time" >> "${GFILEPLOTCOMMANDS}"
  echo "set xdata time" >> "${GFILEPLOTCOMMANDS}"
  echo "set format x \"%H:%M\"" >> "${GFILEPLOTCOMMANDS}"
  echo "set format x \"%H:%M\"" >> "${GFILEPLOTCOMMANDS}"
  echo "set style data linespoints" >> "${GFILEPLOTCOMMANDS}"
  echo "set style data lines" >> "${GFILEPLOTCOMMANDS}"
  echo "set xtics \"01:00\" rotate by 90 offset 0,-2 out" >> "${GFILEPLOTCOMMANDS}"
  echo "set xtics \"01:00\" rotate by 90 offset 0,-2 out" >> "${GFILEPLOTCOMMANDS}"
  echo "set title \"Temperature on day ${GTIMESTAMPDATEHUMANREADABLE}\"" >> "${GFILEPLOTCOMMANDS}"
  echo "set title \"Temperature on day ${GTIMESTAMPDATEHUMANREADABLE}\"" >> "${GFILEPLOTCOMMANDS}"
Line 103: Line 103:


And this is how it looks:<br>
And this is how it looks:<br>
[[Image:RaspberryPiTemperaturePlotExample.svg|No, there's no mistake, it was hot all night and all day, until a lightning storm came]]
[[Image:RaspberryPiTemperaturePlotExample.svg|No, there's no mistake, it was veery hot in my living room all night and all day, until a lightning storm came]]


----
----
Line 111: Line 111:
** Nice to know: How to setup timezones: <tt>dpkg-reconfigure tzdata</tt>
** Nice to know: How to setup timezones: <tt>dpkg-reconfigure tzdata</tt>
** About various methods of connecting 1-wire devices: http://www.fhemwiki.de/wiki/Raspberry_Pi_und_1-Wire and http://blog.gegg.us/2013/03/4-different-methods-of-1-wire-access-on-raspberry-pi/
** About various methods of connecting 1-wire devices: http://www.fhemwiki.de/wiki/Raspberry_Pi_und_1-Wire and http://blog.gegg.us/2013/03/4-different-methods-of-1-wire-access-on-raspberry-pi/
** Where this well be used: [[Tomat-O-Mat]]
** [[:Category:RaspberryPi|More about Raspberry Pi on this website]]
** [[:Category:RaspberryPi|More about Raspberry Pi on this website]]
* Footnotes:
* Footnotes:

Revision as of 21:54, 20 June 2013

Time to build a temperature sensor with my Pi.

Schematics

RaspberryPiDS18B20.png

Configure the Pi

Update the OS

This not necessary, but generally a good idea.

apt-get update
apt-get ugrade

Install missing packages

If you have already installed them, you can skip this step.

apt-get install bc
apt-get install gnuplot

Setup kernel modules for GPIO and 1-wire device

modprobe w1-gpio
modprobe w1-therm

Check setup

Check whether there is now our sensor device:

cd /sys/bus/w1/devices
ls -1
10-000802ad5087[1]
w1_bus_master1

See it's content (values):

cd 10-000802ad5087[2]
cat w1_slave
39 00 4b 46 ff ff 03 10 9c : crc=9c YES
39 00 4b 46 ff ff 03 10 9c t=28562[3]

Code

This is how I read the device and generate a nice plot using GNUplot:

#!/bin/bash
#set -x
#
# Script: readTemperature.sh
# Author: Heiko Kretschmer
# Purpose: Reading the temperature and generating a nice plot
#
#

#
# Globals
#
GDEVICEID="10-000802ad5087"
GDEVICESPATH="/sys/bus/w1/devices"
GDEVICEVALUEFILE="w1_slave"
GTIMESTAMPFORMAT="%Y-%m-%d_%H:%M"
GTIMESTAMP="`date +${GTIMESTAMPFORMAT}`"
GTIMESTAMPTIME="`date '+%H:%M'`"
GTIMESTAMPDATE="`date '+%Y-%m-%d'`" # ISO 8601 date format
GTIMESTAMPDATEHUMANREADABLE="`date '+%A, %Y-%m-%d'`"
GFOLDERBASE="/home/pi/Development/temperature"
GFOLDERLOGS="${GFOLDERBASE}/logs"
GFOLDERGRAPHS="${GFOLDERBASE}/graphs"
GFOLDERTMP="${GFOLDERBASE}/tmp"
GFILELOG="${GFOLDERLOGS}/readTemperature_${GTIMESTAMPDATE}.log"
GFILEGRAPH="${GFOLDERGRAPHS}/readTemperature_${GTIMESTAMPDATE}.svg"
GFILEPLOTCOMMANDS="${GFOLDERTMP}/readTemperature-plot.cmd"

#
# Main
#

# Init
test ! -d "${GFOLDERLOGS}" && mkdir "${GFOLDERLOGS}"
test ! -d "${GFOLDERGRAPHS}" && mkdir "${GFOLDERGRAPHS}"
test ! -d "${GFOLDERTMP}" && mkdir "${GFOLDERTMP}"

# Get the temperature
VALUERAW="`cat \"${GDEVICESPATH}/${GDEVICEID}/${GDEVICEVALUEFILE}\" | grep t= | cut -d= -f2`"
VALUE="`echo \"scale = 3; ${VALUERAW} / 1000\" | bc`"
#echo Temperature: ${VALUE}

# Write it into the log (one logfile per day to get nice graphs)
echo -e "${GTIMESTAMPTIME}\t${VALUE}" >> "${GFILELOG}"

# Generate the graph
test -f "${GFILEPLOTCOMMANDS}" && rm "${GFILEPLOTCOMMANDS}"
echo "set key inside right top vertical Right noreverse enhanced autotitles columnhead nobox" >> "${GFILEPLOTCOMMANDS}"
echo "set timefmt \"%H:%M\"" >> "${GFILEPLOTCOMMANDS}"
echo "set xdata time" >> "${GFILEPLOTCOMMANDS}"
echo "set format x \"%H:%M\"" >> "${GFILEPLOTCOMMANDS}"
echo "set style data lines" >> "${GFILEPLOTCOMMANDS}"
echo "set xtics \"01:00\" rotate by 90 offset 0,-2 out" >> "${GFILEPLOTCOMMANDS}"
echo "set title \"Temperature on day ${GTIMESTAMPDATEHUMANREADABLE}\"" >> "${GFILEPLOTCOMMANDS}"
echo "set ylabel \"°C\"" >> "${GFILEPLOTCOMMANDS}"
echo "set xlabel \"Time\"" >> "${GFILEPLOTCOMMANDS}"
echo "set yrange [ 0.000 : ] noreverse nowriteback" >> "${GFILEPLOTCOMMANDS}"
echo "set term svg" >> "${GFILEPLOTCOMMANDS}"
echo "set output \"${GFILEGRAPH}\"" >> "${GFILEPLOTCOMMANDS}"
echo "plot \"${GFILELOG}\" using 1:2 title 'Temperature'" >> "${GFILEPLOTCOMMANDS}"
cat "${GFILEPLOTCOMMANDS}" | gnuplot 

You might want to use a cronjob like this:

*/15 * * * *    /home/pi/Development/temperature/readTemperature.sh > /dev/null 2&>1

And this is how it looks:
No, there's no mistake, it was veery hot in my living room all night and all day, until a lightning storm came


  1. This will differ, since this is the UID of my device.
  2. This will differ, since this is the UID of my device.
  3. This is the temperature in degrees celsius (multiplied by 1000), therefore I have 28.562°C in my living room. OMG! It's frickin' hot!