소스 뷰어
from machine import Pin, I2C
from time import sleep
import ssd1306

# I2C 핀 설정 (Pico 기본 핀: GPIO 4, 5)
i2c = I2C(0, scl=Pin(5), sda=Pin(4))

# OLED 디스플레이 초기화 (128x32 해상도)
w = width = 128
h = height = 32
oled = ssd1306.SSD1306_I2C(width, height, i2c)

duration = 0.7

# 정사각형 크기와 위치 설정
m = margin = 4
ss = square_size = h - 2*m  # 한 변의 길이
x = m
y = m
 
# 화면 지우기
oled.fill(0)

oled.rect(0, 0, w, h, 1)

# 정사각형 그리기
oled.rect(x, y, ss, ss, 1)

# 삼각형의 세 꼭짓점 좌표
x1, y1 = 2*m + ss + ss // 2, m  # 상단 중앙
x2, y2 = x1 - ss//2 , h - m - 1   # 좌하단
x3, y3 = x2 + ss, y2  # 우하단

# 삼각형 선 그리기
oled.line(x1, y1, x2, y2, 1)  # 왼쪽 변
oled.line(x2, y2, x3, y3, 1)  # 밑변
oled.line(x3, y3, x1, y1, 1)  # 오른쪽 변

# 원 그리기
# 원 중심과 반지름 설정
radius = ss//2
cx = x3 + radius + 2*m
cy = h // 2 

for y in range(-radius, radius):
    for x in range(-radius, radius):
        if x*x + y*y <= radius*radius:
            oled.pixel(cx + x, cy + y, 1)
        pass
    pass
pass

# 별 모양 그리기
# 별 중심과 크기 설정
size = star_size = ss//2
cx = star_cx = cx + radius + size + 2*m
cy = star_cy = h // 2

points = [
    (cx, cy - size),  # 위쪽 점
    (cx + size // 3, cy - size // 3),  # 오른쪽 위
    (cx + size, cy - size // 3),  # 오른쪽 끝
    (cx + size // 2, cy + size // 6),  # 오른쪽 아래
    (cx + size * 3 // 4, cy + size),  # 아래쪽 오른쪽
    (cx, cy + size // 2),  # 아래쪽 끝
    (cx - size * 3 // 4, cy + size),  # 아래쪽 왼쪽
    (cx - size // 2, cy + size // 6),  # 왼쪽 아래
    (cx - size, cy - size // 3),  # 왼쪽 끝
    (cx - size // 3, cy - size // 3),  # 왼쪽 위
]

# 점들을 연결하여 별 그리기
for i in range(len(points)):
    x1, y1 = points[i]
    x2, y2 = points[(i + 1) % len(points)]
    oled.line(x1, y1, x2, y2, 1)
pass

# 디스플레이에 출력
oled.show()