-
Griefed authored
Renamed cpu.py to cpu_rainbow.py to make room for an alternative version, where the colour of the text depends solely on the temperature.
Griefed authoredRenamed cpu.py to cpu_rainbow.py to make room for an alternative version, where the colour of the text depends solely on the temperature.
cpu_rainbow.py 1.65 KiB
#!/usr/bin/env python
import colorsys
import time
from gpiozero import CPUTemperature
from PIL import Image, ImageDraw, ImageFont
import unicornhathd
print("""Unicorn HAT HD: CPU Temperature
Displays the CPU Temperature on your Unicorn HAT HD, in fancy rainbow colours!
Should the temperature exceed 55Degrees Celsius, the text will be coloured red to get your attention!
Exit with CTRL + C!
""")
FONT = ('/usr/share/fonts/truetype/piboto/PibotoCondensed-Regular.ttf', 12)
unicornhathd.rotation(270)
unicornhathd.brightness(0.3)
width, height = unicornhathd.get_shape()
text_x = 0
text_y = 0
font_file, font_size = FONT
font = ImageFont.truetype(font_file, font_size)
degree_sign= u'\N{DEGREE SIGN}'
warning = 55 #Temperature at which alarms go off
try:
while True:
cpu = CPUTemperature()
TEXT = (str(int(cpu.temperature))+degree_sign)
text_width, text_height = font.getsize(TEXT)
text_width += width + text_x
image = Image.new('RGB', (text_width, max(height, text_height)), (0, 0, 0))
draw = ImageDraw.Draw(image)
draw.text((text_x, text_y), TEXT, fill=(255, 255, 255), font=font)
for scroll in range(text_width - width+ 90):
for x in range(width):
if int(cpu.temperature) <= warning:
hue = (x + scroll) / float(text_width)
else:
hue = 0.0 #red
br, bg, bb = [int(n * 255) for n in colorsys.hsv_to_rgb(hue, 1.0, 1.0)]
for y in range(height):
pixel = image.getpixel((x, y))
r, g, b = [float(n / 255.0) for n in pixel]
r = int(br * r)
g = int(bg * g)
b = int(bb * b)
unicornhathd.set_pixel(width -1 -x, y, r, g, b)
unicornhathd.show()
time.sleep(0.02)
except KeyboardInterrupt:
unicornhathd.off()