Tiny-Tを作る(3) Klipperのインストール
目次
Klipperとは
Klipperは、3Dプリンターの制御をするためのオープンソースのファームウェアです。3Dプリンターの処理をRaspberry PiやPC(ホスト)とプリンターのマイコン(MCU)に分担させることで、高速で正確なプリントを実現します。さらに、Moonrakerと組み合わせることで、ウェブUI(MainsailやFluidd)からの操作が可能となり、使い勝手が向上します。
ホスト側のKlipper
Raspberry PiやPCにインストールされ、G-codeの解析や運動制御の計算を担当します。この部分がメインの処理を行い、MCUにコマンドを送信します。
MCU用(マイコン側のKlipper)
3Dプリンターのメインボードやツールボード(エクストルーダー用の補助ボード)、センサーボード(例:BTT Eddy Duo)に書き込まれ、ホスト(Raspberry Piなど)から送られたコマンドを実行する役割 を担います。そのため、MCUの負担が軽減され、より高精度な動作が可能になります。
関連する主要なソフトウェア
- Klippy
Klipperのメインプロセス(ホスト側のソフトウェア)で、G-codeの処理や運動制御を行い、MCUにリアルタイムで指示を送ります。 - Moonraker
KlipperとOctoPrintやMainsail、FluiddなどのウェブインターフェースをつなぐAPIサーバーです。プリンターの状態を監視し、ウェブUIを通じて操作できるようにします。
Klipperは、複数のMCU(マイコン)を接続して制御できるため、拡張性の高いシステムを構築できます。例えば、メインMCUに加えてツールボード(エクストルーダー専用MCU)や別の制御ボードを接続し、それぞれの役割を分担させることが可能です。
Klipperは、以下のような通信方式を使用して、ホスト(Raspberry Piなど)と各MCUを接続できます:
- CAN Bus(CAN-FD) :少ない配線で長距離通信が可能。ツールボードとの接続に最適。
- USB :安定した通信が可能で、比較的簡単にセットアップできる。
- シリアル(UART) :シンプルな配線でMCU間通信が可能。
これにより、配線を最小限に抑えつつ、個別のMCUにモーターやセンサー、ヒーターなどを直接接続できるため、プリンター内部の配線をシンプルにし、トラブルを減らすことができます。
応用例
- メインMCU(コントロールボード)→ X/Y/Z軸モーターやベッドヒーターを制御
- ツールボードMCU(エクストルーダー用ボード)→ ホットエンドのヒーター、ファン、エクストルーダーモーターを制御
- セカンダリーMCU(拡張ボード)→ ERCFやTradrackなどのマルチマテリアルユニットなどを制御
このように、KlipperのマルチMCU機能を活用することで、配線の簡素化、高速なデータ処理、プリンターの拡張性向上が可能になります。特にCAN Bus対応のツールボードを活用すると、リニアレール上の動くエクストルーダー部分に必要な配線を1本にまとめることができ、断線リスクを大幅に低減できます。
システム構成
今回のシステムはホストコンピュータにRaspberry Pi 3B+、メインMCUにFysetc Spider V2.3、ツールボードにFysetc H36 Combo、レベリングセンサーにBTT Eddy Duoを使用します。当初H36とEddyはUSBで通信を考えていましたが、H36のUSB通信がうまくいかなかったため、CANBUSを使用することにしました。
Spider V2.3は直接CAN通信ができないためMellwo UTOC-1を使ってラズパイとH36,EddyとCAN通信を行うようにしました。
Klipper導入手順
概略の手順は下記のようになります。
1)ラズパイにklipperをインストール
2)Spiderにklipperを書き込む
3)H36 Comboにkatapultとklipperを書き込む
4)Eddu Duoにkatapultとklipperを書き込む
katapultはKlipperのファームウェアをCAN対応のMCU(ツールボードやセンサーボードなど)に簡単にフラッシュできるツールです。主にCAN Bus経由でのファームウェア更新をサポートし、物理的にUSBを接続しなくてもMCUのファームウェアを書き換えることができます。Katapultを利用すると、MCUのファームウェア更新時にプリンターを分解してUSB接続する手間が省けるため、特にツールヘッドに設置したツールボードやEddy Duoなどのセンサーボードのメンテナンスが容易になります。CAN Busを活用する環境では、非常に便利なツールです。
ラズパイにklipperをインストール
Klipperは、Linux上で動作する3Dプリンター制御ソフトウェアなのでまずはラズパイにlinuxを導入します。
ここでの手順
・ラズパイ用のイメージファイルを作成
・パッケージリストの更新とgitのインストール
・KIAUHのダウンロードと実行
・KIAUHを使用してKlipperなど必要なアプリケーションをインストール
必要なもの
・ラズパイ
・micro SDカード
・PC
・Raspberry Pi Imager
・TeraTermなどのSSH接続用ソフト
イメージファイルの作成
raspberry pi imagerを使用してSDカードにイメージファイルを書き込みます。
raspberry pi imagerを起動して使用したいラズパイのモデルを選択し、次にOSを選択します。今回はRaspberry Pi OS Lite(64bit)を選びました。書き込みたいSDカードを選択して次へをクリックします。OSのカスタマイズセッティングをしますかと出るので設定を編集するボタンをクリックすると設定編集画面が表示されるので自分の環境にあった設定をしておきます。ここではユーザ名/パスワードとwifiの設定をしておきます。この段階でwifiの設定をしておくことですぐにwifiを使えるようになり便利です。またSSHの有効化もしておきましょう。これでSDカードにイメージファイルを作成する準備ができました。SDカードにイメージファイルを書き込んだら取り出してラズパイに挿入して電源を入れます。


パッケージリストの更新とgitのインストール
ラズパイが起動したらTeratarmなどを使ってPCとラズパイをSSH接続します。
SSH接続ができたらパッケージリストの更新とGITをインストールします。
sudo apt-get update && sudo apt-get install git -y
KIAUHのダウンロードと実行
KIAUH(Klipper Installation And Update Helper)とはKlipperのインストール・管理を簡単にするスクリプトファイル一式のことです。
以下のコマンドを実行してGitHub上にあるKIAUHのリポジトリをRaspberry Pi(ローカル環境)にダウンロードします。
cd ~ && git clone https://github.com/dw-0/kiauh.git
KIAUHを実行します
./kiauh/kiauh.sh

起動すると上記のメニュー画面が表示されます。アルファ版のV6が使用できるようになっているようですが、V5を使用するため2) Noを選択します。
Klipper他のインストール

1) [Install]を選択してInstallation Menuを表示します。

必要なものをインストールしていきます。
今回は
1)Klipper
2)Moonraker
3)Mainsail
4)Fluidd
14)Crowsnest
をインストールしました。
Klipperをインストールするときにpythonのバージョンを聞かれますが3.Xを選ぶようにしましょう。次にこのホストコンピュータで使うklipperの数を選択します。(プリンターが1台なら1を入力します)
また、MainsailとFluiddを両方インストールしようとするとポート番号が重複しないように指定しましょう。今回はFluiddを81に設定しました。
この時点でUPDATEできるものがあるようでしたら最新版にしておくようにしましょう。これでラズパイ側のklipperインストールは一旦終わりです。
chromeなどのブラウザにラズパイのipを入力してMainsailまたはFluiddの画面が表示されることを確認します。(例 http://192.168.68.129/)

Spiderにklipperを書き込む
つぎはメインMCUであるSpiderにklipper ファームウェアを書き込んでいきます。ファームウェアの書き込みはSDカードを使う方法とDFU(Device Firmware Upgrade)モードというおもにUSB経由でファームウェアを書き込む方法があります。今回はDFUモードを使用してklipperの書き込みを行います。
手順
・配線とジャンパーピンのセット
・spider V2.3用にklipperをコンパイル
・DFUモードでspiderにklipperを書き込む
・spiderの固有識別子を取得し記録
必要なもの
・ラズパイ(klipperインストール済み)
・メインMCU(Spider V2.3)
・Spider用 DC24V電源
・USBケーブル
配線とジャンパーピンのセット
ラズパイとSpiderの電源を切った状態で作業します。SpiderにDC24Vの電源線を接続し、ラズパイとSpiderをUSBケーブルでつなぎます。
DFUモードにするにはBOOT0ピンをH(3.3V)にしてマイコンを起動する必要があるので、BOOT0と3.3Vをジャンパーします。ジャンパーピンの位置は写真を参照してください。(FysetcのマニュアルはV2.3用になっていないようで場所が違います)

配線とジャンパーピンのセットが終わったらラズパイとSpiderの電源を入れる前に電源の極性間違いとスイッチング電源の入力電圧切替スイッチが間違っていないかを確認してから電源を入れましょう。ラズパイが起動したらSSH接続します。
デバイスIDの確認
下記のコマンドを実行してSpiderのデバイスIDを確認して記録します。下の画像ではDFUモードになっているDevice 004 のID「0483:df11」を記録しておきます。これは後でklipperを書き込むときに使用します。
lsusb

ビルドツールのインストール
次にソースコードからプログラムをビルドするときに使うツールをインストールします。(たぶん最新版がすでにインストールされていると思います)
sudo apt install make
ビルド設定
ビルド設定を行うためのメニュー画面を表示させます。
cd ~/klipper
make clean
make menuconfig
少しコマンドの説明をすると
1行目は
cd(change directory)
→ディレクトリ(フォルダ)を移動するコマンド~
(チルダ)
→ 現在のユーザーのホームディレクトリ(例:/home/pi/
)を表すklipper
→ ~/
(ホームディレクトリ)の中にある klipper
というフォルダ
つまりホームディレクトリの中にある klipper
フォルダへ移動するというコマンドです
2行目はビルドしたファイルを削除し、クリーンな状態に戻すためのコマンドです。Klipperなどのファームウェアをビルドする際、make
を実行すると中間ファイルや最終的な .bin
ファイルが作成されます。しかし、設定を変更した場合や新しいMCUに対応させたい場合、古いビルドの残骸があると問題が発生する可能性があります。
そのため、make clean
を実行すると、以前のビルド結果を削除して、再ビルド時のトラブルを防ぐことができます。
3行目のmake menuconfig
は、ソフトウェアやファームウェアのビルド設定を行うためのインタラクティブなメニュー画面を起動するコマンドです。ビルドするときに使われ、MCU(マイコン)の種類や通信方式、使用する機能などを選択するために使用されます。

spider V2.3用にビルド設定をしていきます。
まず最初にEnable extra low-level configuration options の項目でスペースまたはエンターを押して詳細設定を有効化します。
次にマイクロコントローラのアーキテクチャを選択します。これは使用するボードに使用されているマイコンを選んでください。(Spider V2.3はSTM32F446)

Spiderにはkatapultを入れないことにしたのでBootloader offsetはNo bootloaderを選択します。
Clockはボードに乗っている発信機の周波数を選択します。回路図を見て確認しました

Communication interfaceはラズパイとSpiderの通信I/Fを入力します。今回はUSBにしました。
これらの設定をすると下の画像のようになります。

間違いがないか確認できたらキーボードのQを押すと保存するか聞かれるのでSを押して保存してメニュー画面を抜けます。
ビルド
次に設定したファームウェアのビルドします。
make
ファームウェアの書き込み
次にビルドしたファームウェアをマイコンに書き込みします。
make flash FLASH_DEVICE=0483:df11
0483:df11は事前に確認しておいたSpiderのデバイスIDを入力します。しばらく待つと書き込みが完了します。
ここでmake flashの前にmakeでビルドを実施しましたが、DFUモードの場合はmakeを実行しなくてもmake flashでビルドを行ってくれるようですがmakeで確実にビルドしておくことをお勧めします。
固有シリアル番号の確認
klipperの書き込みが終わったら、spiderのデバイス固有シリアル番号を確認します。この固有シリアル番号をKlipperのcfgファイルに記載することでklipperはspiderをmcuデバイスとして認識することができるようになります。
cd ~/klipper
ls /dev/serial/by-id

表示された固有シリアル番号usb-Klipper_stm32f446xx_2D0051000E51323130373733-if00 をメモしておきます。
ブラウザでmainsailまたはfluiddを表示してprinter.cfgを開きます。
[mcu]のセクションで
serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_2D0051000E51323130373733-if00
を書いて保存して再起動をします。(赤文字部分にメモした固有シリアル番号を書きます)
再度ブラウザでmainsailまたはfluiddを表示するとmcuが認識されているのが確認できると思います。
これでspiderへklipperファームウェアの書き込みができました。
最初にセットしたジャンパーピンは外しておきましょう。
spider以外に通信が必要なデバイスがない場合はklipperの書き込みは終了です。cfgファイルの設定を行っていきます。
今回はspider以外にツールボードH36 comboと渦電流センサEddy DUOにklipperファームウェアの書き込みが必要ですので引き続き実施していきます。
H36 Comboにkatapultとklipperを書き込む
H36 ComboにはkatapultとklipperをDFUモードで書き込みしていきます。
手順
・H36用にkatapultをビルド
・DFUモードでH36にkatapultを書き込む
・H36用にklipperをビルド
・DFUモードでklipperを書き込む
・H36のUUIDを確認
必要なもの
・ラズパイ(klipperインストール済み)
・H36 Combo
・USBケーブル
DFUモードで起動
ラズパイとH36 ComboをUSBケーブルで接続します。H36 ComboのほうはTYPE-Cのところに差し込みます。
H36 ComboのBOOT0ボタンを押しながらRESETボタンを1秒ほど押してたらRESTボタンを離して、3秒ほど待ってBOOT0ボタンを離します。

デバイスIDの確認
sshでラズパイに接続して
lsusb
でDFUモードのデバイスがあることを確認します。もし見つからないようでしたらDFUモードにするのに失敗していますので再度上記のボタン操作を実施してください。

デバイスIDは0483:df11でした。これもメモしておきます。(Spiderと同じデバイスIDでした)
H36 Comboだけラズパイと接続しているので間違いはないですが両方接続していると間違える恐れがあるので気を付けましょう
katapultのスクリプトをダウンロード
最新版のkatapultをラズパイにダウンロードして使えるようにします。
git clone https://github.com/Arksine/katapult

katapultのビルド設定(CAN bus)
H36 Combo用のkatapultのビルド設定を行います。
cd katapult
make clean
make menuconfig

communication interfaceはCAN通信を使うのでCAN busを選択します。
Application start offsetは8KiBを選択します。katapultを書き込む場合はklipperとメモリ領域が競合しないように設定します。この後のklipperのビルド設定でも同じ値を設定するようにしましょう。
CAN bus speedは1000000を設定しました。これはCAN通信のビットレートの設定です。同じCAN bus通信網に接続するものはすべて同じビットレートに設定しないと通信できないので注意しましょう。
GPIO pins to set on bootloader entryはCAN通信の場合は!PA2とします。H36 Comboは同じCAN通信とUSB通信が同じコネクタになっていて、中のIC(TMUX136)のSELピンのHとLの状態によりCAN/USBの切り替えを行います。マイコンのGPIO PA2がこのSELピンと接続されていてブートモード時にPA2をHにするかLにするかを設定します。
Support bootloader entry on rapid double click of reset buttonはチェックしておきます。これはkatapultモードにしたいときにリセットボタンをダブルクリックするという設定です。
Enable Status LEDにもチェックをいれてGPIOはPA1を入力します。katapultモードのときにPA1につながっているLEDが点灯します。
ここまでの設定ができたら間違いがないか確認してQ→S(Save)をします。
katapultのビルド
次に設定したkatapultのビルドします。
make
katapultの書き込み(DFUモードで書き込み)
次にビルドしたkatapultをマイコンに書き込みします。
make flash FLASH_DEVICE=0483:df11
klipperのビルド設定(CAN bus)
katapultの書き込みができたら次はklipperを書き込みます。
cd ~/klipper
make clean
make menuconfig

klipperのビルド設定は上記のように設定してQ→S
klipperのビルド
klipperをビルドします。
make
klipperの書き込み(DFUモードで書き込み)
make flash FLASH_DEVICE=0483:df11
CAN bus通信設定
ディレクトリの作成
/etc/network/interfaces.d/のディレクトリがない場合はディレクトリを作成します。
sudo mkdir -p /etc/network/interfaces.d
このコマンド中の-pをつけると途中のディレクトリがない場合でもまとめて作成してくれます。
ifupdownのインストール
ifupdownパッケージをインストールします。
ifupdownはネットワークの有効化/無効化を設定できるようになります。
sudo apt update
sudo apt install ifupdown

can0の設定
can0の設定ファイルを作成します。
sudo nano /etc/network/interfaces.d/can0
can0の設定ファイルをnanoで編集したらctrl+x→Y→Enterの順で保存します。

上図のように設定しましたが、下記のように設定するほうが良いみたいです。
auto can0
iface can0 can static
pre-up ip link set can0 type can bitrate 1000000
pre-up ip link set can0 txqueuelen 1024
up ip link set can0 up
down ip link set can0 down
can0の設定ファイルの保存が終わったら一度再起動します。
sudo reboot
再起動後にcan通信がスタートしているか確認します。
ip -details link show can0

qlen が1024,bitrateが1000000になっていればklipperでcan通信できる準備が整っています。
もしcan0が見つからない場合はcan通信がスタートしていない可能性があるのでcan0を有効化します。
sudo ifup can0
また、ビットレートが違っている場合はcan0を無効化してビットレートを再設定して再びcan0を有効化します。
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
UUIDの確認
can通信上でH36 Comboの識別番号であるUUIDを調べます。UUIDを調べたらメモしておいて後でcfgファイルに記載することでklipper上でcanデバイスとして使用できるようになります。
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0

上図のc2261b06834fがH36 ComboのUUIDです。これをメモしておきます。
ここまででH36 Comboのklipper書き込みは完了です。
Eddy Duoにkatapultとklipperを書き込む
Eddy DuoにはkatapultをDFUモード,klipperをkatapultで書き込みしていきます。
klipperをkatapultで書き込みする理由は特にありません。DFUモードで書き込みしてもいいです。
手順
・Eddy用にkatapultをビルド
・DFUモードでH36にkatapultを書き込む
・H36用にklipperをビルド
・katapultでklipperを書き込む
・EddyのUUIDを確認
必要なもの
・ラズパイ(klipperインストール済み)
・UTOC
・Spider
・Eddy
・H36 Combo
・USBケーブル
・CANケーブル
DFUモードで起動
EddyのUSB/CAN切り替えスイッチをUSB側にしておきます。

ラズパイを起動しておいて、Eddy側に付属のUSBケーブルを挿しておきます。まだラズパイ側のUSBは挿しません。
EddyのUSBを挿す部分の近くにあるボタンを押しながらラズパイ側のUSBケーブルを挿し込みます。これでEddyがDFUモードで起動します。

デバイスIDの確認
sshでラズパイに接続して
lsusb
でDFUモードのデバイスがあることを確認します。

デバイスIDは2e8a:0003でした。これもメモしておきます。
katapultのビルド設定(CAN bus)
Eddy用のkatapultのビルド設定を行います。
cd katapult
make clean
make menuconfig

EddyをCAN通信で使用する場合は上図のように設定してQ→S
CAN通信のビットレートは同じCAN通信をする機器と合わせるようにしてください。
katapultのビルド
次に設定したkatapultのビルドします。
make
katapultの書き込み(DFUモードで書き込み)
次にビルドしたkatapultをマイコンに書き込みします。
make flash FLASH_DEVICE=2e8a:0003
CAN通信に変更
Eddyのklipperはkatapultを使用して書き込みを行います。(DFUでも書き込みできます)
katapultを書き込みしたUSBケーブルを外して、EddyのUSB/CAN切り替えスイッチをCAN側にし、H36 COMBOとEddyをCAN通信できるように接続します。

H36 ComboとUTOCをCANケーブルを使って接続し、UTOCとラズパイをUSBケーブルで接続します。
Spider V2.3とUTOCにはDC24Vの電源を供給します。
UUID確認
以下のコマンドでEddyのUUIDを確認します。
~/katapult/scripts $ python3 flash_can.py -i can0 -q

Application:klipperとなっているのはH36 ComboのUUIDです。
EddyのUUIDはApplication:katapultとなっている6604bf47e2cfです。こちらをメモしておきます。
klipperのビルド設定(CAN bus)
klipperのビルド設定をします。
cd ~/klipper
git checkout master
make clean
make menuconfig
以下の通りに設定してQ→S

klipperのビルド
klipperをビルドします。
make
klipperの書き込み(katapultで書き込み)
~/katapult/scripts $ python3 flash_can.py -i can0 -f ~/klipper/out/klipper.bin -u 6604bf47e2cf
朱書きのところは使用するeddyのUUIDを使用します。

Flash Successと出たらklipperの書き込み完了です。
最後に
これでklipperの導入は完了です。実際にklipperを使用する場合にはこの後にprinter.cfgなどの設定ファイルに設定を書きむ必要があります。cfgファイルについては別記事に記載する予定です。
H36 ComboとEddyのCAN UUIDについてはcfgファイルを作るときに必要になりますので忘れずにメモしておきましょう。