Wow. I have to say I never thought I was going to end up writing Python programs for fun and (no) profit. That is until I got a Raspberry Pi Sense Hat, at least.
The specific project I’m working on is a remote temperature monitor for an unoccupied site that I’m responsible for, to allow us to react if the furnace goes out there before the pipes burst.
Given the Python library for the Sense Hat, it was basically trivial to build a program that would watch for the temperature to go outside a given range, and send email to me if it did. It took a couple of hours longer than I expected it would to write, but my excuse is that it really was my first Python program. 🙂 (Also, it seems there are quirks around getting accurate temperature readings from the SH, so I’m still tweaking the program, but it’s basically working.)
Given the 8×8 display on the Hat, I even managed to provide a continuous temperature display. 8×8 is not enough pixels to make something look good, so you end up with something like this (as drawn by the Sense Hat Emulator developer tool):

Ugly but readable. For the inquisitive, here’s the “McQ’s First Python Program” version of a function to display the digits:
########################################################### # Display two digits on the sense hat. # Digit patterns digits0_9 = [ [2, 9, 11, 17, 19, 25, 27, 33, 35, 42], # 0 [2, 9, 10, 18, 26, 34, 41, 42, 43], # 1 [2, 9, 11, 19, 26, 33, 41, 42, 43], # 2 [1, 2, 11, 18, 27, 35, 41, 42], # 3 [3, 10, 11, 17, 19, 25, 26, 27, 35, 43], # 4 [1, 2, 3, 9, 17, 18, 27, 35, 41, 42], # 5 [2, 3, 9, 17, 18, 25, 27, 33, 35, 42], # 6 [1, 2, 3, 9, 11, 19, 26, 34, 42], # 7 [2, 9, 11, 18, 25, 27, 33, 35, 42], # 8 [2, 9, 11, 17, 19, 26, 27, 35, 43] # 9 ] def display_two_digits (a_number, color): global digits0_9 black = (0, 0, 0) if a_number < 0: negative = True a_number = abs(a_number) else: negative = False first_digit = int(int(a_number / 10) % 10) second_digit = int(a_number % 10) # set pixels for the two digits pixels = [black for i in range(64)] digit_glyph = digits0_9[first_digit] for i in range(0, len(digit_glyph)): pixels[digit_glyph[i]] = color digit_glyph = digits0_9[second_digit] for i in range(0, len(digit_glyph)): pixels[digit_glyph[i]+4] = color # set pixels for a minus sign for negatives if negative: pixels[56] = color pixels[57] = color pixels[58] = color # set bottom right pixel if number is more than 2 digits if a_number > 99: pixels[63] = color # display the result sense.set_pixels(pixels)
Of course, you pass in a color for the digits to show, so when the temperature is outside the range, you can show it in red. 😉
Anyway, feel free to point out all the noob Python programming mistakes. I’m always happy to improve.
Leave a Reply
You must be logged in to post a comment.