Parascheva NegruAlex CojocaruAlexandru-Eduard Balan
Published

Temperature Tracker using Raspberry Pi

Simple project that uses a Raspberry Pi 4 Model B in order to track the temperature from a sensor and display it on an Apache server.

BeginnerFull instructions provided6 hours291
Temperature Tracker using Raspberry Pi

Things used in this project

Hardware components

Raspberry Pi 4 Model B
Raspberry Pi 4 Model B
×1
DS18B20 Programmable Resolution 1-Wire Digital Thermometer
Maxim Integrated DS18B20 Programmable Resolution 1-Wire Digital Thermometer
×1
LED (generic)
LED (generic)
×10
SparkFun Solder-able Breadboard - Mini
SparkFun Solder-able Breadboard - Mini
×1
Breadboard (generic)
Breadboard (generic)
×1
Male/Female Jumper Wires
Male/Female Jumper Wires
×15
Male/Male Jumper Wires
×12
Through Hole Resistor, 470 ohm
Through Hole Resistor, 470 ohm
×11

Software apps and online services

Python 3.7
Apache Server
PHP
Raspberry Pi OS
SSH

Story

Read more

Schematics

Project Schematic

Code

Led Code

Python
import os
import glob
import time
import RPi.GPIO as GPIO 


os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
 
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
 
def read_temp_raw():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines
 
def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c, temp_f

ports = [17, 27, 22, 23, 24, 25, 8, 7, 1, 16]

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

for x in ports:
    GPIO.setup(x, GPIO.OUT)

last = 0

try:
    while True:
        (temp_celsius, _) = read_temp()

        min_temp = int(temp_celsius)
        max_temp = min_temp + 1

        x = 9 - int((max_temp - temp_celsius) * 10)
        print(f'[DEBUG] temperature_celsius={temp_celsius}  units={x} last_unit={last}')

        for i in range(x):
            GPIO.output(ports[i], GPIO.HIGH)
        
        if x < last:
            for i in range(x, last):
                GPIO.output(ports[i], GPIO.LOW)

        last = x
except KeyboardInterrupt:
    for port in ports:
        GPIO.output(port, GPIO.LOW)

Apache Server

PHP
<!DOCTYPE html>
<html>
      
<head>
    <title>
        Termometru
    </title>
</head>
  
<body style="text-align:center;">
	<center>
		<table witdh="400" border="1" bgcolor="silver">
		<td>
			<Font color='blue'>
			<b>
			<center>
				Universitatea Tehnica 'Gh.Asachi' Iasi - Fac. Automatica si Calculatoare
				<br>
				<br>
			</center>
			</Font>
			<b>
			<center> 
				<h1> <Font color='navy'>APACHE Server  for<br> Web of Things <br></h1>
			</font>
			<center>

    <form method="post">
  	<p id="show_temp">
<?php 
	exec("cat /sys/bus/w1/devices/28-00000c44180f/w1_slave 2>&1", $output, $return_val);
	$temp = substr($output[1], strpos($output[1], "t=") + 2);
	echo($temp * 0.001);
?>
	</p>
	<button name="temp">Get Temp</button>
    </form>
</head>
  
</html>

Credits

Parascheva Negru

Parascheva Negru

1 project • 2 followers
Alex Cojocaru

Alex Cojocaru

1 project • 2 followers
Alexandru-Eduard Balan

Alexandru-Eduard Balan

1 project • 2 followers

Comments