121,943 total views, 18 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.