From 9d2c6929f610fafe4eb8000af813c95be78536d3 Mon Sep 17 00:00:00 2001 From: Sandy Macdonald Date: Fri, 14 Jun 2019 10:30:18 +0100 Subject: [PATCH] Improvements to compensated temperature code --- examples/all-in-one.py | 20 +++++++++++++++++++- examples/compensated-temperature.py | 10 +++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/examples/all-in-one.py b/examples/all-in-one.py index 0ec440b..cf34f89 100755 --- a/examples/all-in-one.py +++ b/examples/all-in-one.py @@ -10,6 +10,7 @@ import ltr559 from bme280 import BME280 from pms5003 import PMS5003 from enviroplus import gas +from subprocess import PIPE, Popen from PIL import Image from PIL import ImageDraw from PIL import ImageFont @@ -76,6 +77,18 @@ def display_text(variable, data, unit): draw.text((0, 0), message, font=font, fill=(0, 0, 0)) st7735.display(img) +# Get the temperature of the CPU for compensation +def get_cpu_temperature(): + process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE) + output, _error = process.communicate() + return float(output[output.index('=') + 1:output.rindex("'")]) + +# Tuning factor for compensation. Decrease this number to adjust the +# temperature down, and increase to adjust up +factor = 0.8 + +cpu_temps = [0] * 5 + delay = 0.5 # Debounce the proximity tap mode = 0 # The starting mode last_page = 0 @@ -113,7 +126,12 @@ try: if mode == 0: variable = "temperature" unit = "C" - data = bme280.get_temperature() + cpu_temp = get_cpu_temperature() + # Smooth out with some averaging to decrease jitter + cpu_temps = cpu_temps[1:] + [cpu_temp] + avg_cpu_temp = sum(cpu_temps) / float(len(cpu_temps)) + raw_temp = bme280.get_temperature() + data = raw_temp - ((avg_cpu_temp - raw_temp) / factor) display_text(variable, data, unit) if mode == 1: diff --git a/examples/compensated-temperature.py b/examples/compensated-temperature.py index 64d7a8b..b572ad5 100755 --- a/examples/compensated-temperature.py +++ b/examples/compensated-temperature.py @@ -20,16 +20,24 @@ Press Ctrl+C to exit! bus = SMBus(1) bme280 = BME280(i2c_dev=bus) +# Get the temperature of the CPU for compensation def get_cpu_temperature(): process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE) output, _error = process.communicate() return float(output[output.index('=') + 1:output.rindex("'")]) +# Tuning factor for compensation. Decrease this number to adjust the +# temperature down, and increase to adjust up factor = 0.8 +cpu_temps = [0] * 5 + while True: cpu_temp = get_cpu_temperature() + # Smooth out with some averaging to decrease jitter + cpu_temps = cpu_temps[1:] + [cpu_temp] + avg_cpu_temp = sum(cpu_temps) / float(len(cpu_temps)) raw_temp = bme280.get_temperature() - comp_temp = raw_temp - ((cpu_temp - raw_temp) / factor) + comp_temp = raw_temp - ((avg_cpu_temp - raw_temp) / factor) print("Compensated temperature: {:05.2f} *C".format(comp_temp)) time.sleep(1.0) -- 2.30.2