from enviroplus import gas
from subprocess import PIPE, Popen
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
from enviroplus import gas
from subprocess import PIPE, Popen
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
# Displays data and text on the 0.96" LCD
def display_text(variable, data, unit):
# Maintain length of list
values[variable] = values[variable][1:] + [data]
# Scale the values for the variable between 0 and 1
# Displays data and text on the 0.96" LCD
def display_text(variable, data, unit):
# Maintain length of list
values[variable] = values[variable][1:] + [data]
# Scale the values for the variable between 0 and 1
# Format the variable name and value
message = "{}: {:.1f} {}".format(variable[:4], data, unit)
# Format the variable name and value
message = "{}: {:.1f} {}".format(variable[:4], data, unit)
draw.rectangle((0, 0, WIDTH, HEIGHT), (255, 255, 255))
for i in range(len(colours)):
# Convert the values to colours from red to blue
colour = (1.0 - colours[i]) * 0.6
draw.rectangle((0, 0, WIDTH, HEIGHT), (255, 255, 255))
for i in range(len(colours)):
# Convert the values to colours from red to blue
colour = (1.0 - colours[i]) * 0.6
- r, g, b = [int(x * 255.0) for x in colorsys.hsv_to_rgb(colour, 1.0, 1.0)]
+ r, g, b = [int(x * 255.0) for x in colorsys.hsv_to_rgb(colour,
+ 1.0, 1.0)]
# Draw a 1-pixel wide rectangle of colour
draw.rectangle((i, top_pos, i+1, HEIGHT), (r, g, b))
# Draw a line graph in black
# Draw a 1-pixel wide rectangle of colour
draw.rectangle((i, top_pos, i+1, HEIGHT), (r, g, b))
# Draw a line graph in black
draw.rectangle((i, line_y, i+1, line_y+1), (0, 0, 0))
# Write the text at the top in black
draw.text((0, 0), message, font=font, fill=(0, 0, 0))
st7735.display(img)
draw.rectangle((i, line_y, i+1, line_y+1), (0, 0, 0))
# Write the text at the top in black
draw.text((0, 0), message, font=font, fill=(0, 0, 0))
st7735.display(img)
- process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE)
+ process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE, universal_newlines=True)
output, _error = process.communicate()
return float(output[output.index('=') + 1:output.rindex("'")])
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
# Tuning factor for compensation. Decrease this number to adjust the
# temperature down, and increase to adjust up
factor = 0.8
avg_cpu_temp = sum(cpu_temps) / float(len(cpu_temps))
raw_temp = bme280.get_temperature()
data = raw_temp - ((avg_cpu_temp - raw_temp) / factor)
avg_cpu_temp = sum(cpu_temps) / float(len(cpu_temps))
raw_temp = bme280.get_temperature()
data = raw_temp - ((avg_cpu_temp - raw_temp) / factor)
- data = pms5003.read()
- data = data.pm_ug_per_m3(1.0)
- display_text(variable, data, unit)
+ try:
+ data = pms5003.read()
+ except pmsReadTimeoutError:
+ logging.warn("Failed to read PMS5003")
+ else:
+ data = data.pm_ug_per_m3(1.0)
+ display_text(variables[mode], data, unit)
- data = pms5003.read()
- data = data.pm_ug_per_m3(2.5)
- display_text(variable, data, unit)
+ try:
+ data = pms5003.read()
+ except pmsReadTimeoutError:
+ logging.warn("Failed to read PMS5003")
+ else:
+ data = data.pm_ug_per_m3(2.5)
+ display_text(variables[mode], data, unit)
- variable = "pm10"
- unit = "g/m3"
- data = pms5003.read()
- data = data.pm_ug_per_m3(10)
- display_text(variable, data, unit)
+ # variable = "pm10"
+ unit = "ug/m3"
+ try:
+ data = pms5003.read()
+ except pmsReadTimeoutError:
+ logging.warn("Failed to read PMS5003")
+ else:
+ data = data.pm_ug_per_m3(10)
+ display_text(variables[mode], data, unit)