User Tools

Site Tools


fluidcanvas_r2pi:tft_boot_splash_and_status_display_guide

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
fluidcanvas_r2pi:tft_boot_splash_and_status_display_guide [2026/03/21 23:25] hyjeongfluidcanvas_r2pi:tft_boot_splash_and_status_display_guide [2026/03/21 23:28] (current) hyjeong
Line 50: Line 50:
 ## 4. 상태 화면 스크립트(~/scripts/fluidardule_status.py) ## 4. 상태 화면 스크립트(~/scripts/fluidardule_status.py)
  
 +````
 +#!/usr/bin/env python3
 +from PIL import Image, ImageDraw, ImageFont
 +import subprocess
 +from pathlib import Path
  
 +W, H = 480, 320
 +OUT = Path("/home/pi/fluidardule_status.png")
 +
 +FONT_BOLD = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"
 +FONT_REG  = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
 +
 +def run_cmd(cmd):
 +    try:
 +        result = subprocess.run(
 +            cmd, shell=True, capture_output=True, text=True
 +        )
 +        return result.stdout.strip()
 +    except Exception:
 +        return ""
 +
 +def get_status():
 +    hostname = run_cmd("hostname")
 +    time_str = run_cmd("date '+%Y-%m-%d %H:%M:%S'")
 +    ip_str = run_cmd("hostname -I 2>/dev/null | awk '{print $1}'")
 +    if not ip_str:
 +        ip_str = "no network"
 +
 +    cpu_load = run_cmd("awk '{print $1}' /proc/loadavg")
 +    cpu_temp = run_cmd("vcgencmd measure_temp | sed 's/temp=//'")
 +    mem = run_cmd("free -m | awk '/Mem:/ {print $3\"/\"$2\"MB\"}'")
 +
 +    return {
 +        "hostname": hostname or "-",
 +        "time": time_str or "-",
 +        "ip": ip_str,
 +        "cpu_load": cpu_load or "-",
 +        "cpu_temp": cpu_temp or "-",
 +        "mem": mem or "-",
 +    }
 +
 +def render(status):
 +    img = Image.new("RGB", (W, H), "black")
 +    draw = ImageDraw.Draw(img)
 +
 +    font_title = ImageFont.truetype(FONT_BOLD, 26)
 +    font_label = ImageFont.truetype(FONT_BOLD, 18)
 +    font_text  = ImageFont.truetype(FONT_REG, 18)
 +
 +    # 제목
 +    draw.text((W // 2, 18), "FluidArdule Status", font=font_title, fill="white", anchor="ma")
 +    draw.line((20, 45, W - 20, 45), fill="white", width=2)
 +
 +    items = [
 +        ("HOST", status["hostname"]),
 +        ("TIME", status["time"]),
 +        ("IP", status["ip"]),
 +        ("LOAD", status["cpu_load"]),
 +        ("TEMP", status["cpu_temp"]),
 +        ("MEM", status["mem"]),
 +    ]
 +
 +    y = 70
 +    for label, value in items:
 +        draw.text((24, y), f"{label:5}", font=font_label, fill="white")
 +        draw.text((110, y), f": {value}", font=font_text, fill="white")
 +        y += 36
 +
 +    draw.line((20, H - 40, W - 20, H - 40), fill="white", width=1)
 +    draw.text((W // 2, H - 28), "READY", font=font_label, fill="white", anchor="ma")
 +
 +    img.save(OUT)
 +
 +def show():
 +    subprocess.run(
 +        ["sudo", "fbi", "-T", "1", "-d", "/dev/fb1", "--noverbose", "-a", str(OUT)],
 +        check=False
 +    )
 +
 +def main():
 +    status = get_status()
 +    render(status)
 +    show()
 +
 +if __name__ == "__main__":
 +    main()
 +````
 --- ---
  
fluidcanvas_r2pi/tft_boot_splash_and_status_display_guide.txt · Last modified: by hyjeong