Skip to content
This repository was archived by the owner on Dec 11, 2025. It is now read-only.

Latest commit

Β 

History

History
125 lines (92 loc) Β· 3.64 KB

File metadata and controls

125 lines (92 loc) Β· 3.64 KB

πŸ–¨οΈ Klipper - Web Server Bridge Client 이 ν”„λ‘œμ νŠΈλŠ” 라즈베리파이 4(Mainsail OS)μ—μ„œ λ™μž‘ν•˜λŠ” Python 기반의 λ―Έλ“€μ›¨μ–΄μž…λ‹ˆλ‹€.

μ™ΈλΆ€ μ›Ή μ„œλ²„μ™€ Socket.IO둜 ν†΅μ‹ ν•˜λ©°, μ›Ήμ˜ λͺ…령을 λ°›μ•„ 둜컬 Klipper(Moonraker)λ₯Ό μ œμ–΄ν•©λ‹ˆλ‹€.


πŸ“‹ Features

  • πŸ”Œ Auto Connection: λΆ€νŒ… μ‹œ μ™ΈλΆ€ μ†ŒμΌ“ μ„œλ²„μ— μžλ™ 접속 및 μž¬μ—°κ²°(Retry) 둜직 λ‚΄μž₯
  • πŸ“₯ Remote Printing: μ›Ήμ—μ„œ μ „μ†‘ν•œ G-code URL을 λ‹€μš΄λ‘œλ“œ ν›„ Moonraker API둜 μ¦‰μ‹œ μ—…λ‘œλ“œ 및 좜λ ₯
  • πŸ“‘ Real-time Monitoring: Klipper의 μƒνƒœ(μ˜¨λ„, μ§„ν–‰λ₯ , μƒνƒœκ°’)λ₯Ό 2초 주기둜 μ›Ή μ„œλ²„μ— 전솑
  • 🧡 Multi-threading: μ†ŒμΌ“ μˆ˜μ‹  λŒ€κΈ°(Blocking)와 μƒνƒœ 전솑(Non-blocking)을 병렬 처리

/home/pi/ └── printer_bridge/ # [ν”„λ‘œμ νŠΈ 메인 폴더] β”œβ”€β”€ app.py # [μ‹€ν–‰ 파일] 메인 루프 (python3 app.py둜 μ‹€ν–‰) β”œβ”€β”€ env.py # [μ„€μ • 파일] URL, ν•˜λ“œμ›¨μ–΄ ID λ“± β”œβ”€β”€ handler.py # [둜직 파일] λ‹€μš΄λ‘œλ“œ, Klipper 톡신 ν•¨μˆ˜λ“€ └── requirements.txt # [νŒ¨ν‚€μ§€ λͺ©λ‘] μ„€μΉ˜ν•΄μ•Ό ν•  라이브러리 리슀트 └── printer_bridge/downloads/ # λ‹€μš΄λ‘œλ“œν•œ νŒŒμΌλ“€ 보관.

πŸ› οΈ Installation

1. Prerequisites

이 ν”„λ‘œμ νŠΈλŠ” Mainsail OSκ°€ μ„€μΉ˜λœ Raspberry Pi 4 ν™˜κ²½μ„ κΈ°μ€€μœΌλ‘œ ν•©λ‹ˆλ‹€.

# μ‹œμŠ€ν…œ νŒ¨ν‚€μ§€ μ—…λ°μ΄νŠΈ
sudo apt update
sudo apt install python3-pip -y

2. Dependencies

주의: Socket.IO μ„œλ²„μ™€μ˜ ν˜Έν™˜μ„±μ„ μœ„ν•΄ python-socketio ν΄λΌμ΄μ–ΈνŠΈ 6.0.0 버전을 μ‚¬μš©ν•©λ‹ˆλ‹€.

# Python 라이브러리 μ„€μΉ˜
pip3 install requests "python-socketio[client]==6.0.0"

3. Setup Project

# ν”„λ‘œμ νŠΈ 디렉토리 생성 및 μ½”λ“œ λ‹€μš΄λ‘œλ“œ
mkdir -p ~/printer_bridge
# (main.py νŒŒμΌμ„ ν•΄λ‹Ή 폴더에 μœ„μΉ˜μ‹œν‚€μ„Έμš”)

βš™οΈ Configuration

main.py 파일 μƒλ‹¨μ˜ μ„€μ • λ³€μˆ˜λ₯Ό ν™˜κ²½μ— 맞게 μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

# main.py

# 라즈베리파이 식별 ID (μ›Ή μ„œλ²„ λ“±λ‘μš©)
HARDWARE_ID = "pi-lab-101"

# μ™ΈλΆ€ μ›Ή μ„œλ²„ μ£Όμ†Œ (Socket.IO μ„œλ²„)
EXTERNAL_SERVER_URL = "http://YOUR_SERVER_IP:3000"

# Moonraker API μ£Όμ†Œ (κΈ°λ³Έκ°’ μœ μ§€)
MOONRAKER_URL = "http://127.0.0.1:7125"

πŸš€ Auto-Start (Systemd)

라즈베리파이 전원 인가 μ‹œ ν”„λ‘œκ·Έλž¨μ΄ μžλ™μœΌλ‘œ μ‹€ν–‰λ˜λ„λ‘ μ„œλΉ„μŠ€λ‘œ λ“±λ‘ν•©λ‹ˆλ‹€.

1. μ„œλΉ„μŠ€ 파일 생성

sudo nano /etc/systemd/system/printer-bridge.service

2. μ„œλΉ„μŠ€ λ‚΄μš© μž‘μ„±

[Unit]
Description=Klipper to External Web Socket Bridge
After=network-online.target moonraker.service
Wants=network-online.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/printer_bridge
ExecStart=/usr/bin/python3 /home/pi/printer_bridge/main.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

3. ν™œμ„±ν™” 및 μ‹œμž‘

sudo systemctl daemon-reload
sudo systemctl enable printer-bridge.service
sudo systemctl start printer-bridge.service

πŸ“‘ API Spec (Socket Events)

πŸ“₯ Receive (Web β†’ Pi)

Event Name Data Payload Description
print { "fileUrl": "http://..." } ν•΄λ‹Ή URL의 G-codeλ₯Ό λ‹€μš΄λ‘œλ“œ ν›„ 좜λ ₯ μ‹œμž‘
test Any μ—°κ²° ν…ŒμŠ€νŠΈμš© 이벀트

πŸ“€ Send (Pi β†’ Web)

Event Name Data Payload Frequency
register { "hardwareId": "..." } μ†ŒμΌ“ μ—°κ²° 직후 1회 전솑
status_update { "temp_nozzle": float, "temp_bed": float, "state": string, "progress": float } 2μ΄ˆλ§ˆλ‹€ 주기적 전솑