라즈베리파이에 OLED 1.3" SH1106 I2C DISPLAY 모듈 연결해서
시스템 정보를 표시해보자.
import time
import socket
import subprocess
from luma.core.interface.serial import i2c
from luma.oled.device import sh1106
from PIL import Image, ImageDraw, ImageFont
# =========================
# System Info Functions
# =========================
def get_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
s.close()
return ip
except:
return "No IP"
def cmd(cmd):
return subprocess.check_output(cmd, shell=True).decode().strip()
def get_cpu():
return cmd("top -bn1 | grep 'Cpu(s)' | awk '{print $2}'") + "%"
def get_ram():
return cmd("free -m | awk 'NR==2{printf \"%s/%sMB (%.0f%%)\", $3,$2,$3*100/$2}'")
def get_temp():
try:
return cmd("vcgencmd measure_temp").replace("temp=", "")
except:
return "N/A"
def get_users():
return cmd("who | wc -l")
def get_ssh():
return cmd("ss -tn | grep ':22 ' | wc -l")
def get_http():
return cmd("ss -tn | grep ':80 ' | wc -l")
def get_net_speed():
rx1 = int(cmd("cat /sys/class/net/eth0/statistics/rx_bytes"))
tx1 = int(cmd("cat /sys/class/net/eth0/statistics/tx_bytes"))
time.sleep(1)
rx2 = int(cmd("cat /sys/class/net/eth0/statistics/rx_bytes"))
tx2 = int(cmd("cat /sys/class/net/eth0/statistics/tx_bytes"))
return (rx2 - rx1) // 1024, (tx2 - tx1) // 1024 # KB/s
# =========================
# OLED Init
# =========================
serial = i2c(port=1, address=0x3C)
device = sh1106(serial)
font = ImageFont.load_default()
def show(lines):
image = Image.new("1", (device.width, device.height))
draw = ImageDraw.Draw(image)
y = 0
for line in lines:
draw.text((0, y), line, font=font, fill=255)
y += 12
device.display(image)
# =========================
# Pages
# =========================
def page_network():
ip = get_ip()
users = get_users()
ssh = get_ssh()
show([
"=== NETWORK ===",
f"IP: {ip}",
f"Login: {users}",
f"SSH: {ssh}",
])
def page_system():
cpu = get_cpu()
ram = get_ram()
temp = get_temp()
show([
"=== SYSTEM ===",
f"CPU: {cpu}",
f"RAM: {ram}",
f"TEMP: {temp}",
])
def page_traffic():
rx, tx = get_net_speed()
show([
"=== TRAFFIC ===",
f"RX: {rx} KB/s",
f"TX: {tx} KB/s",
])
def page_ports():
http = get_http()
ssh = get_ssh()
show([
"=== PORTS ===",
f"80(HTTP): {http}",
f"22(SSH): {ssh}",
])
pages = [page_network, page_system, page_traffic, page_ports]
while True:
for p in pages:
try:
p()
except Exception as e:
show(["ERROR", str(e)])
time.sleep(3)



728x90
'Hardware > 라즈베리파이' 카테고리의 다른 글
| 라즈베리파이 + PCA9685PW (0) | 2026.02.09 |
|---|---|
| 라즈베리파이 + SH1106 I2C 사용 #1 (0) | 2026.02.04 |
| 라즈베리파이에서 LLM 사용한 음성 입력/출력 (1) | 2026.01.24 |
| 라즈베리파이 Nodejs 설치 (0) | 2026.01.22 |
| 라즈베리파이 시작하기 - 운영체제 (0) | 2024.07.31 |
