2026-07-02

Ender 3 V3 SE Klipper 전환 기록 (2) - BTT Pi를 Klipper 호스트로 세팅하기

Ender 3 V3 SE를 Klipper로 전환하는 과정의 두 번째 게시글입니다.

3D PrintKlipperLinux

1편에서는 Klipper로 전환하기로 결정한 이유를 정리했다. 이번에는 호스트 선택 및 세팅, 그리고 여기서 Klipper 환경을 구성한 과정을 정리한다.

사용한 호스트: BTT Pi v1.2

Klipper 호스트로는 BTT Pi v1.2를 사용했다.

Klipper 호스트라고 하면 보통 라즈베리 파이를 먼저 떠올리게 된다. 실제로 관련 자료도 라즈베리 파이를 기준으로 설명된 경우가 많다. 하지만 Klipper 자체는 반드시 라즈베리 파이에서만 동작하는 것은 아니고, 일정 수준 이상의 리눅스 시스템이라면 충분히 호스트로 사용할 수 있다. 그리고 그 요구 사양도 그리 높은 편은 아니다.

문제는 가격이었다. 당시 기준으로 라즈베리 파이는 Klipper 호스트로 쓰기에는 부담스러운 가격이었고, 오렌지 파이 같은 다른 SBC도 생각보다 저렴하지 않았다. 그래서 처음에는 중고 노트북이나 저가형 데스크톱도 찾아봤다. 중고 노트북의 경우 오래되고 저렴한 매물이 드물었고, 최소 사양만 맞춘 데스크톱 구성은 약 5만 원 정도까지 내려갈 수 있었지만, 공간을 너무 많이 차지한다는 문제가 있었다.

그다음으로는 저가 안드로이드 TV 박스도 검토했다. 일부 TV 박스는 리눅스를 설치해 사용할 수 있고 가격도 낮은 편이지만, 같은 이름으로 팔리더라도 조금씩 다른 경우가 많아 장담할 수가 없었다.

그러던 중 비슷한 가격대에서 BTT Pi v1.2를 발견했다. 이 보드는 애초에 Klipper 구동을 염두에 두고 만들어진 SBC에 가까웠고, Allwinner H616과 1GB RAM을 탑재하고 있었다. 사양만 보면 낮아 보일 수 있지만, Klipper 호스트로 사용하기에는 충분해 보였다. 또한 스크류 단자를 통한 전원 입력을 지원해 프린터와 통합하기에도 좋아 보였다.

다만 전원 입력 부분은 아직 조심스럽게 보고 있다. 공식 스펙상으로는 12–24V 입력을 지원하지만, 인터넷을 보니 24V 연결 시 고장 사례가 일부 보여 현재는 프린터 전원에서 직접 끌어오지 않고 별도의 12V 어댑터를 사용하고 있다. 이 부분은 추후 하드웨어 통합 작업에서 따로 검토할 예정이다.

결과적으로 BTT Pi v1.2는 가격, 크기, Klipper와의 목적 적합성 측면에서 가장 현실적인 선택이었다. 실제로 현재까지 Klipper 호스트로 사용하는 데에는 큰 문제 없이 동작하고 있다.

번외: 구동 사양과 설치 사양은 다를 수 있음

Klipper 호스트의 요구 사양은 분명 낮은 편이다. 그러나 진짜 아무 리눅스 장비나 쓰려고 하면 의외의 곳에서 막힐 수 있다.

이전에 Allwinner A10 기반 보드로 구성을 시도한 적이 있었다. 이 보드에 대해서는 나중에 따로 정리할 생각인데, 사양 자체는 충분해 보였다. 하지만 의외의 문제가 Moonraker 설치 도중 생겼다. 이 SoC는 32비트 ARM(armhf)인데, 여기서 필요한 일부 패키지의 wheel이 없어서 직접 빌드가 시도되었으며, 이 과정에서 메모리 부족으로 인해 OOM으로 실패했다.

결론은, 너무 오래된 시스템은 일부 패키지를 직접 빌드하게 될 수 있고, 이 과정은 실제 Klipper 구동보다 높은 사양을 요구할 수 있다. 특히 32비트 ARM 기반 보드는 메모리가 넉넉하지 않은 경우가 많으므로 주의하는 것이 좋다. 가능하면 보통 미리 빌드된 wheel이 있는, x86-64 혹은 ARM64 기반 호스트를 사용하는 쪽을 추천한다.

호스트 세팅

이제 이 BTT Pi v1.2에 OS를 올려 Klipper 호스트로 설정할 준비가 필요하다. 이 보드는 별도의 전용 이미지가 따로 있는 것이 아니라 CB1의 이미지를 사용한다. 나는 여기서 메인라인 Armbian 빌드를 사용했다. Armbian Imager를 통해 이미지 다운로드 및 플래시를 한 번에 할 수 있었다. 한편 나는 TFT35 SPI v2.1 디스플레이를 장착했는데, 이것을 쓰려면 SD 카드를 장착 전 armbianEnv.txt를 수정해야 한다. 이 파일은 라즈베리 파이의 설정 변경 시와 달리, 윈도우에서 읽을 수 없는 ext4 파티션 내에 있기 때문에 리눅스 시스템에서 수정해야 했다.

참고로 CB1은 동일 제조사의, 컴퓨트 모듈 형태의 폼팩터로 나온 보드이다. BTT PI4B 어댑터나 BTT Manta 시리즈에 결합해서 사용할 수 있다.

Wi-Fi 설정

BTT Pi의 내장 무선랜을 쓰려면 동봉된 안테나를 보드 뒷면의 U.FL 단자에 장착해야 한다. 다만 이 보드는 2.4GHz만 지원하므로 유의해야 한다.

내 경우는 두 가지 문제가 있었다.

먼저, 5GHz SSID에 연결한 PC에서 2.4GHz로 연결된 보드로 SSH 접속 시 화면 갱신이 심하게 끊겼다. 구체적으로는 mDNS를 통해, 그리고 Windows PC에서 접속하면 재현 가능했는데, 몇 가지 실험 결과 서로 다른 무선 대역을 쓰는 장치 간 mDNS가 IPv6을 사용하게 되면 일어나는 일로 보였다. 추후 이 부분은 기회가 되면 더 자세히 다뤄 보도록 하겠다.

다음으로, 프린터가 설치된 위치의 Wi-Fi 수신 상태가 좋지 않았다. 내장 무선랜으로는 연결이 거의 유지되지 않았고, 남는 동글을 장착해서 해결했다. 이후 내장 무선랜은 rfkill을 통해 비활성화했다.

한편 추후 KlipperScreen에서 네트워크를 제어하려면, 해당 인터페이스가 NetworkManager를 통해 관리하도록 구성하는 것이 좋다. 물론 연결이 되기만 하면 다른 기능은 잘 동작하지만, NetworkManager를 통하지 않으면 KlipperScreen에서 네트워크 상태를 보거나 변경할 수 없을 수 있다.

KIAUH

Klipper를 설치할 때는 보통 KIAUH라는 스크립트를 자주 사용한다. 앞서 메인라인 Armbian을 사용했기 때문에 기본 Klipper 설치가 없으니, 이 스크립트를 통해 설치했다. Klipper→Moonraker→Mainsail→KlipperScreen 순으로 진행했고, Klipper의 경우 유저 포크를 설치할 수 있는데, 나는 순정 디스플레이와 자동 Z 오프셋을 지원하는 포크를 선택했다. 웹 UI의 경우 Mainsail 이나 Fluidd 중 하나를 사용하는 편인데, 나는 Mainsail을 더 선호하기 때문에 선택했다. KlipperScreen의 경우 앞서 언급한 네트워크 관련 설정과, 내가 사용한 TFT35 SPI v2.1 디스플레이 때문에 추가 설정이 요구되며, 이것은 다음 글에서 다루기로 한다.

설치를 완료했다면 알려진 설정 파일을 printer_config에 넣어 준다.

Klipper 펌웨어 적용

MCU 펌웨어 빌드 옵션은 사용하는 프린터 보드와 Klipper 포크에 따라 달라질 수도 있다. 아래 내용은 내가 사용한 Ender 3 V3 SE 및 해당 포크 기준의 기록이다.

프린터의 MCU에도 Klipper의 펌웨어를 적용해야 한다. Ender 3 V3 SE의 경우 GD32 계열을 사용하는데 이것은 STM32F103와 호환되므로, STM32F103를 고르면 된다. 부트로더의 크기는 28KiB이다. 주의할 것은, 이 포크의 경우 순정 디스플레이를 살리기 때문에 특정 USART를 여는 설정을 해야 한다. 설정이 완료되었다면 make 명령으로 컴파일해 준다. 완료되었다면, 프린터의 SD 카드의 내용을 비운 다음 bin 파일을 넣어 주고, 프린터에 다시 삽입한 다음 전원을 켜고 넉넉하게 1분 정도 기다린 다음 다시 끈다. 성공했다면 카드는 다시 제거한다. 순정 펌웨어였던 상태 기준, 다시 전원을 켰을 때 원래의 메뉴 화면이 다시 뜨지 않아야 한다.

연결

BTT Pi와 프린터를 연결해 준다. USB A to C 케이블을 사용해 프린터의 USB-C 단자와 BTT Pi의 USB-A 단자를 연결해 주면 된다. BTT Pi에 동봉된 짧은 케이블도 사용 가능했다. BTT Pi의 전원은 보드의 USB-C 단자로 공급받거나 스크류 단자를 통해 공급받는데, USB-C는 소스를 가리는 것으로 확인되었다. USB PD를 지원하는 충전기 및, 라즈베리 파이 4에서 잘 작동했던 USB-C 5V 3A 어댑터가 동작하지 않았으며, USB A to C 케이블을 사용하는 충전기는 일단 작동 가능한 것으로 보였다. 한편 스크류 단자를 사용할 경우는 USB-C 옆에 있는 점퍼를 제거해야 하며, USB-C에 전원을 동시에 연결하면 안 된다. 공식 스펙은 스크류 단자로 12-24V 입력을 지원하지만, 전술했듯 인터넷에서 24V를 썼더니 고장났다는 일부 사례가 보이기 때문에 프린터의 24V를 직결하는 것은 잠시 보류했다. 지금은 남는 12V 어댑터를 잘라서 스크류 단자에 연결해 전원으로 사용하고 있다.

참고로 24V 입력의 경우, 고장났다는 보고와 잘 작동했다는 보고가 함께 보인다. 나는 추후 프린터의 24V를 받아 벅 컨버터를 통해 12V를 공급하는 방향의 설계를 고려하고 있다.

확인

BTT Pi에 웹 브라우저로 접속해 본다. mDNS가 작동한다면 bigtreetech-cb1.local로 접속하거나, 혹은 IP를 직접 입력하면 된다. 만약 특정 매크로가 없다는 오류가 난다면, printer.cfg에 mainsail.cfg를 포함해 준다.

다음에 다룰 내용

여기까지 진행하면 Klipper, Moonraker, Mainsail이 올라가고 프린터 MCU에도 Klipper 펌웨어가 적용된 상태가 된다. 그러나 아직 출력 가능 상태는 아니다. 실제 출력을 하려면 printer.cfg 수정, Z 오프셋 설정 등이 더 필요하다. 다음 글에서는 이 부분을 정리한다.