Created
March 11, 2024 21:01
-
-
Save blech/b37522de2b24c94a64c65885152f6368 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# oled stats - for 1.44" square Adafruit miniTFT | |
# based on code by Adafruit and Michael Klements | |
import time | |
import platform | |
import subprocess | |
import signal | |
import sys | |
import board | |
import busio | |
import digitalio | |
from PIL import Image, ImageDraw, ImageFont | |
from adafruit_rgb_display import st7789 | |
# Display Refresh | |
LOOPTIME = 1.0 | |
# Configuration for CS and DC pins (these are FeatherWing defaults on M0/M4): | |
cs_pin = digitalio.DigitalInOut(board.CE0) | |
dc_pin = digitalio.DigitalInOut(board.D25) | |
reset_pin = None | |
# Config for display baudrate (default max is 24mhz): | |
BAUDRATE = 64000000 | |
# Setup SPI bus using hardware SPI: | |
spi = board.SPI() | |
# Use for I2C. | |
i2c = board.I2C() | |
disp = st7789.ST7789( | |
spi, | |
cs=cs_pin, | |
dc=dc_pin, | |
rst=reset_pin, | |
baudrate=BAUDRATE, | |
width=240, | |
height=240, | |
x_offset=0, | |
y_offset=80, | |
) | |
# Create blank image for drawing. | |
# Make sure to create image with mode 'RGB' for full color. | |
image = Image.new("RGB", (disp.width, disp.height)) | |
rotation = 180 | |
# Get drawing object to draw on image and font to draw with | |
draw = ImageDraw.Draw(image) | |
font = ImageFont.truetype('PixelOperator.ttf', 32) | |
# register a keyboard signal handler so we can wipe the screen on exit | |
def sigint_handler(signal, frame): | |
if disp: | |
image = Image.new("RGB", (disp.width, disp.height)) | |
draw = ImageDraw.Draw(image) | |
draw.rectangle((0, 0, disp.width, disp.height), outline=0, fill=0) | |
disp.image(image) | |
print ('Interrupted') | |
sys.exit(0) | |
signal.signal(signal.SIGINT, sigint_handler) | |
info_commands = [ | |
"hostname", | |
"top -bn1 | grep load | awk '{printf \"CPU: %.2f\", $(NF-2)}'", | |
"vcgencmd measure_temp | sed 's/=/: /' | sed 's/t/T/'", | |
"free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'", | |
"df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'" | |
] | |
buttonA = digitalio.DigitalInOut(board.D23) | |
buttonB = digitalio.DigitalInOut(board.D24) | |
while True: | |
# Draw a black filled box to clear the image. | |
draw.rectangle((0, 0, disp.width, disp.height), outline=0, fill=0) | |
hostname = platform.node() | |
y = 0 | |
for command in info_commands: | |
output = subprocess.check_output(command, shell=True).decode('utf-8') | |
draw.text((0, y), output, font=font, fill=(255, 255, 255)) | |
y += 32 | |
if not buttonA.value: | |
draw.text((0, y), 'button A pressed', font=font, fill=(255, 255, 255)) | |
y += 32 | |
if not buttonB.value: | |
draw.text((0, y), 'button B pressed', font=font, fill=(255, 255, 255)) | |
y += 32 | |
# Display image | |
disp.image(image, rotation) | |
#disp.show() | |
time.sleep(LOOPTIME) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment