diff options
-rw-r--r-- | temp.py | 63 |
1 files changed, 39 insertions, 24 deletions
@@ -1,29 +1,35 @@ +#!/usr/bin/python3 # -*- coding: utf-8 -*- -"""Python script to read temperature. +"""Python script to read temperature from DS18B20. I plug the sensor data into pin 4 on the raspberry pi which requires pin 4 to be a gpio pin. If the modprobe commands don't results in the device showing up -in the bus folder then make sure the following line is in `/boot/config.txt` +in the bus folder then make sure the following line is in `/boot/config.txt`: ``` dtoverlay=w1-gpio,gpiopin=4 ``` -After rebooting the files should show up. +After rebooting and the script should work. """ import glob import os import time -os.system('modprobe w1-gpio') -os.system('modprobe w1-therm') +def enable_kernel_modules(): + """Enable kernel modules.""" + 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 get_device_file(): + """Get the path to the the data file.""" + base_dir = '/sys/bus/w1/devices/' + device_folder = glob.glob(base_dir + '28*')[0] + device_file = device_folder + '/w1_slave' + return device_file -def read_temp_raw(): +def read_device_file(device_file): """Read the raw temperature from the device.""" f = open(device_file, 'r') lines = f.readlines() @@ -31,20 +37,29 @@ def read_temp_raw(): return lines -def read_temp(): - """Read the temperature of the probe.""" - 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 +def parse_raw_input(raw_input): + """Parse raw data into temperatures.""" + # Error reading, return nothing + if raw_input[0].strip()[-3:] != 'YES': + return None, None + equals_pos = raw_input[1].find('t=') + if equals_pos != -1: + temp_string = raw_input[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 + else: + return None, None +def main(): + """Main Function.""" + enable_kernel_modules() + device_file = get_device_file() + while True: + raw_input = read_device_file(device_file) + print(parse_raw_input(raw_input)) -while True: - print(read_temp()) - time.sleep(1) + +if __name__ == '__main__': + """Run main routine.""" + main() |