While searching for a simple way to measure temperature using my Raspberry Pi I came across the DS18B20 1-wire digital temperature sensor. This promised an accurate way of measuring temperature with a few wires and almost no external components. The device only cost a few pounds and it seemed too good to be true.
So I bought one. Within a few minutes I was measuring the temperature with it. It is so simple to use and the perfect starting point for creating a Raspberry Pi based temperature data logger.
Pin 1 is Ground. Pin 2 is the data pin and Pin 3 is the power pin. The only external component required is a single 4.7Kohm resistor.
In my testing I didn’t have one of these so I used 2 x 2.2Kohm resistors in series. This worked fine.
I used a small piece of breadboard and some jumper cables to connect it to the GPIO header on my Raspberry Pi.
Pin 1 was connected to P1-06 (Ground)
Pin 2 was connected to P1-07 (GPIO4)
Pin 3 was connected to P1-01 (3.3V)
A 4.7Kohm resistor was placed between Pin 2 and Pin 3.
It is important to double check that you don’t confuse Pin 1 and Pin 3 on the device otherwise the power will be applied the wrong way round!
Once you have connected everything together you can power up your Raspberry Pi.
It’s always best to tackle new projects with an updated SD card. I tend to use the latest Raspbian image from the RaspberryPi.org download page and then update it from time to time using the following two commands :
sudo apt-get update sudo apt-get upgrade
In order to configure the sensor you just need to run the following commands at the command prompt :
sudo modprobe w1-gpio sudo modprobe w1-therm
Hopefully this will have set up the device to report its temperature via GPIO4. Use the commands below to go to the directory that contains the detected 1-wire devices :
cd /sys/bus/w1/devices ls
This will list the directories associated with your 1-wire devices. Each one has a unique ID and in my case it is 28-00000482b243. Your ID will be different so be sure to use that in the example code below. Using “cd” we can change to the temperature sensor directory, list the contents and then view the “w1_slave” file :
cd 28-00000482b243 ls cat w1_slave
The complete command line setup process looks like this :
The “w1_slave” file contains a bunch of data but the “t=23062″ at the end is the temperature reading. In this example the temperature is 23.062 degrees Celsius (centigrade).
Try touching the sensor with your finger and then using “cat w1_slave” to take another reading …
My next project will be using this setup to create a simple temperature data logger.