105,226 total views, 17 views today
今回、3DプリンタのファームウェアをMarlinからKlipperへ移行してみることにした。
目次
- 1 Marlinファームウェア
- 2 Klipperファームウェア
- 3 Klipperファームウェアの導入
- 3.1 Raspberry Pi(ラズベリーパイ)
- 3.2 無線LAN接続可能なPC
- 3.3 Klipperファームウェアの導入方法
- 3.4 OctoPi + Klipperの導入手順
- 3.4.1 OctoPi + Klipperの導入に際して必要となるソフトウェア
- 3.4.2 1.Raspberry PiにOctoPiをインストール
- 3.4.3 2.OctoPiのネットワーク設定を編集
- 3.4.4 3.PCからOctoPiにSSH接続
- 3.4.5 4.Raspberry Piの設定を変更
- 3.4.6 5.Klipperをインストール
- 3.4.7 6.Klipperを使用できるようOctoPiの各種設定を変更
- 3.4.8 7.各種ボードのMCUに対応したKlipper用ファームウェアファイルの作成
- 3.4.9 8.各種ボードのシリアルポートの名前を調べる
- 3.4.10 9.ボードへのファームウェア書き込み
- 3.4.11 10.Klipperの各種設定を変更
Marlinファームウェア
3Dプリンタ用のオープンソースのファームウェアとしてはMarlinが有名で、Ender-3 ProのファームウェアにもMarlinが使われている。
Marlinの歴史は古く、開発が始まってからすでに10年ほど経っているようである。
Marlinの開発は現在、8bitボード対応のバージョン1.0から32bitボードに対応したバージョン2.0に移行しており、より高機能なものとなってきている。
Klipperファームウェア
Klipperとは、3Dプリンタにもともと備わっているボードと比較してはるかに高性能であるRaspberry Pi(ラズベリーパイ)のようなシングルボードコンピュータに3Dプリンタの制御を肩代わりさせるというファームウェアである。
シングルボードコンピュータが、3Dプリンタのモーター制御に必要な演算を行うことで、もともとのボードでは実現できなかったようなより複雑な制御が可能となる。
Klipperを導入することで得られる恩恵(メリット)としては、以下のようなものが挙げられる。
- 印刷速度が速くなる
- リンギング(ゴースト)を低減できる
Klipperファームウェアの導入
Klipperファームウェアの導入に際しては、Raspberry Piなどのシングルボードコンピュータが必須となるほか、無線LAN接続可能なPCも必要となる。
- Klipperファームウェアの導入に必要となるもの
- Raspberry Pi
- 無線LAN接続可能なPC
- ノートPCまたは無線LAN接続可能なデスクトップPC
Raspberry Pi(ラズベリーパイ)
Raspberry Piにはいろいろなモデルがあるが、公式に推奨されているのはRaspberry Pi 2、Raspberry Pi 3、Raspberry Pi 4となっている。
もし今からRaspberry Piを調達しようとするのであれば、最新モデルのRaspberry Pi 4を選んでおくのが無難である。
Raspberry Pi 4とそれ以前のモデルでは性能やインターフェースに大きな違いがあるためである。
Raspberry Pi 4 | Raspberry Pi 2 Raspberry Pi 3 | |
CPU | Cortex-A72 1.5 GHz (クアッドコア) | Cortex-A53 Pi 2 : 900 MHz (クアッドコア) Pi 3 model B : 1.2GHz (クアッドコア) Pi 3 model B+ : 1.4 GHz (クアッドコア) |
メモリ | 1/2/4/8GB (LPDDR4) | Pi 2 : 1GB (LPDDR2) Pi 3 : 1GB (LPDDR2) |
無線LAN | IEEE 802.11.b/g/n/ac (2.4Ghz/5Ghz) | Pi 2 : なし Pi 3 model B : IEEE 802.11.b/g/n (2.4Ghz) Pi 3 model B+ : IEEE 802.11.b/g/n/ac (2.4Ghz/5Ghz) |
USBポート | USB 3.0 x 2 USB 2.0 x 2 | USB 2.0 x 4 |
電源コネクタ | USB Type-C | MicroUSB |
HDMI端子 | マイクロ HDMI (4Kp60対応) x 2 | HDMI x 1 |
無線LAN接続可能なPC
ノートPCであれば、どんなに安いものでもほぼ間違いなく無線LAN接続可能であるし、デスクトップPCの場合でも、無線LAN子機を追加することにより無線LAN接続可能となる。
Klipperファームウェアの導入方法
Raspberry PiにKlipperを導入する方法には大きく分けて2つあり、①OctoPi+Klipperを導入する方法と②MainsailOSを導入する方法とがある。
これらの違いは簡単に言うと、OctoPi用のプラグインが使えるかどうかの違いとなる。
①の方法ではOctoPi用のプラグインが使えるが、②の方法ではOctoPi用のプラグインが使えない。
OctoPi + Klipper | MainsailOS | |
導入時の手間 | 手間がかかる | やや手間がかかる |
プラグインによる 機能追加 | できる | できない |
WebUI | 設定項目が多く やや複雑 | 設定項目が少なく シンプル |
ここでは①の方法、つまりOctoPi+Klipperの導入手順について紹介し、②の方法については別記事で扱う。
OctoPi + Klipperの導入手順
OctoPi + Klipperは以下の手順により導入することができる。
- Raspberry PiにOctoPiをインストール
- OctoPiのネットワーク設定を編集
- PCからOctoPiにSSH接続
- Raspberry Piの設定を変更
- Klipperをインストール
- Klipperを使用できるようOctoPiの各種設定を変更
- 各種ボードのMCUに対応したファームウェアファイルの作成
- 各種ボードのシリアルポートの名前を特定
- ボードへのファームウェア書き込み
- Klipperの各種設定を変更
OctoPi + Klipperの導入に際して必要となるソフトウェア
- Raspberry Pi imager – OctoPiのイメージファイルをmicroSDカードに書き込む際に使用
- Tera Term – OctoPiにPCからSSH接続する際に使用
- WinSCP – OctoPiからファームウェアファイル(Klipper.bin)をダウンロードする際に使用
1.Raspberry PiにOctoPiをインストール
MainsailOSのインストールには、Raspberry Pi imagerという便利なツールがあるので、これを使用する。
Raspberry Pi imagerの使い方は簡単で、以下のとおりである。
- 書き込みたいOSファイルを選択(CHOOSE OS) ※「Erase」を選択するとストレージのフォーマットができる
- 書き込み先のストレージを選択(CHOOSE STORAGE)
- 書き込む(WRITE)
書き込みたいOSのファイルを選択
「Other specific purpose OS」を選択し、
「OctoPi」を選択する。
書き込み先のストレージを選択
USB接続のストレージが自動的に表示されるので、目的のストレージを選択する。
書き込み
WRITEボタンを押せば、選択したストレージにOSのイメージファイルの書き込みが始まる。
処理を続行していいかの確認画面が表示されるので、「YES」を選択する。
書き込みが完了したら、完了画面が表示される。
2.OctoPiのネットワーク設定を編集
各自の無線LAN環境に応じて「OctoPi-wpa-supplicant.txt」のネットワーク設定の行頭にある「#」を消して
- SSID
- パスワード
を設定する。
具体的には、該当部分を
から
のように書き換える。
3.PCからOctoPiにSSH接続
無線LAN接続可能なPCからOctoPiをインストールしたRaspberry PiにSSHで接続する。
接続の設定は、
- ホスト:octopi.local
- ユーザー:pi
- パスフレーズ:raspberry
である。
途中、セキュリティ警告が表示されるが、かまわず「続行」を選択する。
ユーザー名とパスフレーズを入力して「OK」を押せば、SSH接続が完了する。
SSH接続が成功すれば、↓のような画面が表示される。
4.Raspberry Piの設定を変更
パスワードの変更
「System Options」→「Password」の順にたどり、パスワードを変更する。
新規パスワードの入力画面になるので、パスワードを入力する。
タイムゾーンの設定
「Localisation Options Configure language and regional settings」→「Timezone」の順にたどりタイムゾーンを変更する。
「Asia」→「Tokyo」の順にたどりタイムゾーンを「Tokyo」に設定する。
5.Klipperをインストール
git clone https://github.com/KevinOConnor/klipper
と入力して実行すると、パスワードを求められるので、手順4.で設定したパスワードを入力する。
./klipper/scripts/install-octopi.sh
と入力して、Klipperをインストールする。
6.Klipperを使用できるようOctoPiの各種設定を変更
初期設定
まずは、OctoPiの初期設定を行う。
Webブラウザのアドレスバーに「http://octopi.local」または「http://octopiのIPアドレス」と入力し、OctoPiのWebUIにアクセスする。
画面の表示に従って初期設定を行っていく。
「ユーザーネーム」と「パスワード」を設定する。
この後は、すべて「Enable~」となっている方を選択していく。
「プリンタ名」を設定する。
設定の変更
初期設定完了後、設定の変更を行っていく。
OctoPiのWebUIの上部にあるレンチアイコンをクリックしてOctoPiの設定ページを表示する。
「Serial Connection」の「General」タブ内にある「Additional serial ports」欄に「/tmp/printer」と入力し、設定ページの下部にある「Save」で設定内容を保存する。
再度、OctoPiの設定ページに入り「Serial Connection」の「General」タブ内にある「Serial Port」欄で先ほど入力した「/tmp/printer」を選択する。
「Serial Connection」の「Behaviour」タブ内にある「Cancel any ongoing prints but stay connected to the printer」という項目にチェックを入れ、設定を保存する。
OctoKlipperのインストール
設定画面の「Plugin Manager」からOctoPi用のKlipperプラグイン(OctoKlipper)をインストールする。
「Get More」からプラグインの追加を行う。
「Klipper」で検索して出てくる「OctoKlipper」をインストールする。
プラグインのインストール完了後、再起動すると新たに「Klipper」タブが追加されていたりと変化がみられる。
「Klipper」タブに移動すると、設定ファイルの編集などKlipperに関する操作がWebUI上からできるようになっている。
7.各種ボードのMCUに対応したKlipper用ファームウェアファイルの作成
SSH接続後の画面で
cd ~/klipper/
と入力してエンターキーを押した後、
make menuconfig
と入力してエンターキーを押す。
すると、ファームウェアの設定画面が表示される。
後は、各種ボードに対応した設定を行うのだが、ここでは「SKR Mini E3 V1.2」を例にとり説明する。
「Enable extra low-level configuration options」が選択されている状態で、スペースキーまたはエンターキーを押して、追加の設定項目を表示させる。
「Micro-controller Architecture」で「STMicroelectronics STM32」を選択。
「Processor model」で「STM32F103」を選択。
「Bootloader offset」で「28KiB bootloader」を選択。
「GPIO pins to set at micro-controller startup」を選択し、「!PC13」と入力。
最終的には、↓のように設定されていればよい。
「Q」を押して、「Y」を押したのち、
「make」と入力し、エンターキーを押す。
すると、ファームウェアファイル(klipper.bin)が作成される。
8.各種ボードのシリアルポートの名前を調べる
通電した3Dプリンタのボード(ここでは、SKR Mini E3 V1.2)とRaspberry PiをUSB接続した状態で、
cd ~/klipper/
ls /dev/serial/by-id/*
というコマンドを入力する。
9.ボードへのファームウェア書き込み
ボードとOctoPiをUSB経由で接続して直接ファームウェアを書き込む場合
下記のコマンドを実行してファームウェアをボードに書き込む。
cd ~/klipper/
sudo service klipper stop
make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32f103xe_33FFD9054242363231822357-if00
※「make flash FLASH_DEVICE=」以下には、手順8.で調べたシリアルポートの名前が入る。
sudo service klipper start
ボードによっては、USB経由で直接ファームウェアを書き込むできないことがある。
そのような場合には、microSDカード経由でファームウェアを書き込むことになる。
microSDカード経由でファームウェアを書き込む場合
WinSCPを使ってRaspberry PI上にあるファームウェアファイル(Klipper.bin)をmicroSDカードにコピーする。
Tera TermでSSH接続したときと同様に接続設定を行い、
- ホスト名:octopi.local
- ユーザ名:pi
- パスワード:raspberryまたは自身で設定したパスワード
↓のような画面を表示させる。
右画面のフォルダを「klipper」→「out」の順にたどり、「klipper.bin」をみつける。
「klipper.bin」をドラッグアンドドロップで右側から左側へ移動し、PC上にコピーする。
後は、「klipper.bin」を「firmware.bin」にリネームし、microSDカードへコピーする。
「firmware.bin」の入ったmicroSDカードを「SKR mini E3 V1.2」に差し込んだ状態で電源を入れ、ファームウェアを書き込む。
ファームウェアの書き込みが完了すると、Ender-3 Proのディスプレイには何も表示されない状態となる。
10.Klipperの各種設定を変更
まずは、GithubのKlipperのページにある「↓ CODE」→「Download ZIP」と辿り、KlipperのZIPファイルをダウンロードする。
次にダウンロードしたZIPファイルを解凍してできたフォルダの中にある「config」フォルダ内から自分の環境に合ったプリンタの設定ファイル(拡張子がcfgのファイル)を探す。
その後、プリンタの設定ファイルをテキストエディタなどで開き、[MCU]の「serial:」以降の部分を手順8.で調べたシリアルポートの名前に変更する。
serial:/dev/serial/by-id/usb-Klipper_stm32f103xe_33FFD9054242363231822357-if00
保存して終了後、ファイル名を「printer.cfg」に変更する。
「printer.cfg」をWinSCPでOctoPi上(/home/pi/)にアップロードする。
「printer.cfg」のアップロードが完了したら、OctoPiのWebUI上から「printer.cfg」の編集が可能となる。
「Klipper」タブ内の「Open Klipper config」から「printer.cfg」の編集ができる。
これで、Klipperの導入作業は一通り完了となる。
あとは、各自の環境に合わせてオートレベリング(BLTOUCH)などの設定を追加していくことになる。
printer.cfg
最後に、参考として私の環境でのprinter.cfgを掲載しておく。
- ノーマルEnder-3 Proと異なる点
- ボード:SKR Mini E3 V1.2
- Zプローブ:BLTOUCH
- エクストルーダー:BMGクローン
- モーター:ステップ角0.9°
- モーターの回転方向
# This file contains common pin mappings for the BIGTREETECH SKR mini # E3 v1.2. To use this config, the firmware should be compiled for the # STM32F103 with a "28KiB bootloader" and USB communication. Also, # select "Enable extra low-level configuration options" and configure # "GPIO pins to set at micro-controller startup" to "!PC13". # The "make flash" command does not work on the SKR mini E3. Instead, # after running "make", copy the generated "out/klipper.bin" file to a # file named "firmware.bin" on an SD card and then restart the SKR # mini E3 with that SD card. # See docs/Config_Reference.md for a description of parameters. # Note: This board has a design flaw in its thermistor circuits that # cause inaccurate temperatures (most noticeable at low temperatures). [virtual_sdcard] path: ~/gcode_files [display_status] [pause_resume] [gcode_macro PAUSE] rename_existing: BASE_PAUSE default_parameter_X: 230 #edit to your park position default_parameter_Y: 200 #edit to your park position default_parameter_Z: 10 #edit to your park position default_parameter_E: 1 #edit to your retract length gcode: SAVE_GCODE_STATE NAME=PAUSE_state BASE_PAUSE G91 G1 E-{E} F2100 G1 Z{Z} G90 G1 X{X} Y{Y} F6000 [gcode_macro RESUME] rename_existing: BASE_RESUME default_parameter_E: 1 #edit to your retract length gcode: G91 G1 E{E} F2100 G90 RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 BASE_RESUME [gcode_macro CANCEL_PRINT] rename_existing: BASE_CANCEL_PRINT gcode: TURN_OFF_HEATERS CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [stepper_x] step_pin: PB13 dir_pin: PB12 enable_pin: !PB14 microsteps: 64 full_steps_per_rotation: 400 rotation_distance: 40 endstop_pin: ^PC0 position_endstop: 0 position_max: 230 homing_speed: 50 [tmc2209 stepper_x] uart_pin: PB15 run_current: 0.580 hold_current: 0.500 stealthchop_threshold: 250 [stepper_y] step_pin: PB10 dir_pin: PB2 enable_pin: !PB11 microsteps: 64 full_steps_per_rotation: 400 rotation_distance: 40 endstop_pin: ^PC1 position_endstop: 0 position_max: 200 homing_speed: 50 [tmc2209 stepper_y] uart_pin: PC6 run_current: 0.580 hold_current: 0.500 stealthchop_threshold: 250 [stepper_z] step_pin: PB0 dir_pin: !PC5 enable_pin: !PB1 microsteps: 64 full_steps_per_rotation: 400 rotation_distance: 8 endstop_pin: probe:z_virtual_endstop position_max: 230 position_min: -10 homing_speed: 10 homing_retract_dist: 5.0 [bltouch] sensor_pin = ^PC2 control_pin = PA1 x_offset = 1.0 y_offset = -30.25 z_offset = 1.00 [bed_mesh] speed = 150 horizontal_move_z = 6 mesh_min = 10, 10 mesh_max = 190, 190 probe_count = 5, 5 mesh_pps = 2,2 [safe_z_home] home_xy_position: 115,130.25 speed: 50 z_hop: 10 z_hop_speed: 15 [tmc2209 stepper_z] uart_pin: PC10 run_current: 0.280 hold_current: 0.280 stealthchop_threshold: 5 [extruder] step_pin: PB3 dir_pin: !PB4 enable_pin: !PD2 microsteps: 64 full_steps_per_rotation: 400 gear_ratio: 50:17 rotation_distance: 22.15 #diameter:9.5 nozzle_diameter: 0.400 filament_diameter: 1.750 heater_pin: PC8 sensor_type: NTC 100K beta 3950 sensor_pin: PA0 control: pid pid_Kp: 21.527 pid_Ki: 1.063 pid_Kd: 108.982 min_temp: 0 max_temp: 250 [tmc2209 extruder] uart_pin: PC11 run_current: 0.280 hold_current: 0.280 stealthchop_threshold: 5 [heater_bed] heater_pin: PC9 sensor_type: ATC Semitec 104GT-2 sensor_pin: PC3 control: pid pid_Kp: 54.027 pid_Ki: 0.770 pid_Kd: 948.182 min_temp: 0 max_temp: 130 [fan] pin: PA8 [mcu] serial:/dev/serial/by-id/usb-Klipper_stm32f103xe_33FFD9054242363231822357-if00 [printer] kinematics: cartesian max_velocity: 300 max_accel: 3000 max_z_velocity: 5 max_z_accel: 100 [static_digital_output usb_pullup_enable] pins: !PC13 [bltouch] sensor_pin: ^PC2 control_pin: PA1 pin_move_time: 0.680 #stow_on_each_sample: True #probe_with_touch_mode: False #pin_up_reports_not_triggered: True #pin_up_touch_mode_reports_triggered: True #set_output_mode: x_offset: 1.0 y_offset: 30.25 z_offset: 2.0 #speed: #samples: #sample_retract_dist: #samples_result: #samples_tolerance: #samples_tolerance_retries: # See the "probe" section for information on these parameters. [board_pins] aliases: # EXP1 header EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>, EXP1_2=PB6, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB7, EXP1_10=<5V> [display] lcd_type: st7920 cs_pin: EXP1_7 sclk_pin: EXP1_6 sid_pin: EXP1_8 encoder_pins: ^EXP1_5, ^EXP1_3 click_pin: ^!EXP1_2 #kill_pin: ^!EXP2_8 [output_pin beeper] pin: EXP1_1 # See the sample-lcd.cfg file for definitions of common LCD displays.