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)
Comments