Temperature Sensor

Introduction

Temperature Sensor DS18B20 is a commonly used digital temperature sensor featured with small size, low-cost hardware, strong anti-interference capability and high precision. The digital temperature sensor is easy to wire and can be applied a various occasions after packaging. Different from conventional AD collection temperature sensors, it uses a 1-wire bus and can directly output temperature data.

https://www.sunfounder.com/learn/sensor-kit-v2-0-for-raspberry-pi-b-plus/lesson-26-ds18b20-temperature-sensor-sensor-kit-v2-0-for-b-plus.html

Circuit

Step 1:Build the circuit according to the following method

Raspberry Pi DS18B20 Temperature Sensor
GPIO7 SIG
5V VCC
GND GND

Configuration

Step 2:Upgrade your kernel
sudo apt-get update
sudo apt-get upgrade

Step 3:You can edit that file with nano

sudo nano /boot/config.txt 

Then scroll to the bottom and type
dtoverlay=w1-gpio

Then reboot with
sudo reboot. 

Mount the device drivers and confirm whether the device is effective or not
sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices/
ls

The result is as follows:
root@rasberrypi:/sys/bus/w1/devices# ls
28-00000495db35 w1_bus_master1

28-00000495db35 is an external temperature sensor device, but it may vary with every client. This is the serial number of your ds18b20. 

Step 4:Check the current temperature
cd 28-00000495db35
ls

The result is as follows:
root@rasberrypi:/sys/bus/w1/devices/28-00000495db35# ls

driver  id name  power subsystem  uevent  w1_slave
cat w1_slave

The result is as follows:
root@raspberrypi:/sys/bus/w1_slave/28-00000495db35# cat w1_slave
a3 01 4b 46 7f ff 0d 10 ce : crc=ce YES
a3 01 4b 46 7f ff 0d 10 ce t=26187

The second line t=26187 is current temperature value. If you want to convert it to degree Celsius, you can divide by 1000, that is, the current temperature is 26187/1000=26.187 ℃.

Python Code

#!/usr/bin/env python
#----------------------------------------------------------------
#   Note:
#       ds18b20's data pin must be connected to pin7.
#       replace the 28-XXXXXXXXX as yours.
#----------------------------------------------------------------
import os

ds18b20 = ''

def setup():
    global ds18b20
    for i in os.listdir('/sys/bus/w1/devices'):
        if i != 'w1_bus_master1':
            ds18b20 = i

def read():
#   global ds18b20
    location = '/sys/bus/w1/devices/' + ds18b20 + '/w1_slave'
    tfile = open(location)
    text = tfile.read()
    tfile.close()
    secondline = text.split("\n")[1]
    temperaturedata = secondline.split(" ")[9]
    temperature = float(temperaturedata[2:])
    temperature = temperature / 1000
    return temperature

def loop():
    while True:
        if read() != None:
            print "Current temperature : %0.3f C" % read()

def destroy():
    pass

if __name__ == '__main__':
    try:
        setup()
        loop()
    except KeyboardInterrupt:
        destroy()