【3Dプリンタ】Ender-3 ProにKlipperファームウェアを導入した – MainsailOS編

 56,326 total views,  27 views today

Klipperファームウェアの導入

Klipperファームウェアの導入に際しては、Raspberry Piなどのシングルボードコンピュータが必須となるほか、無線LAN接続可能なPCも必要となる。

Raspberry Pi(ラズベリーパイ)

もし今からRaspberry Piを調達しようとするのであれば、最新モデルのRaspberry Pi 4を選んでおくのが無難である。

Raspberry Pi 4とそれ以前のモデルでは性能やインターフェースに大きな違いがあるためである。

Raspberry PI 4Raspberry Pi 2
Raspberry Pi 3
CPUCortex-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)
無線LANIEEE 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-CMicroUSB
HDMI端子マイクロ HDMI (4Kp60対応) x 2HDMI x 1

無線LAN接続可能なPC

ノートPCであれば、どんなに安いものでもほぼ間違いなく無線LAN接続可能であるし、デスクトップPCの場合でも、無線LAN子機を追加することにより無線LAN接続可能となる。

Klipperファームウェアの導入方法

Raspberry PiにKlipperを導入する方法には大きく分けて2つあり、①OctoPi+Klipperを導入する方法②MainsailOSを導入する方法とがある。

これらの違いは簡単に言うと、OctoPi用のプラグインが使えるかどうかの違いとなる。

①の方法ではOctoPi用のプラグインが使えるが、②の方法ではOctoPi用のプラグインが使えない

①の導入手順はすでに紹介済みなので、ここでは②の導入手順について紹介する。

【3Dプリンタ】Ender-3 ProにKlipperファームウェアを導入した – OctoPi+Klipper編

Mainsailの導入手順

MainsailOS以下の手順により導入することができる。

  1. MainsailOSのイメージファイルをダウンロード
  2. Raspberry PiにMainsailOSをインストール
  3. MainsailOSのネットワーク設定を編集
  4. PCからMainsailOSにSSH接続
  5. 各種ボードのMCUに対応したファームウェアファイルの作成
  6. 各種ボードのシリアルポートの名前を特定
  7. ボードへのファームウェア書き込み
  8. Klipperの各種設定を変更

MainsailOSの導入に際して必要となるソフトウェア

  • Raspberry Pi imager – MainsailOSのイメージファイルをmicroSDカードに書き込む際に使用
  • Tera Term – MainsailOSにPCからSSH接続する際に使用
  • WinSCP – MainsailOSからファームウェアファイル(Klipper.bin)をダウンロードする際に使用

1.MainsailOSのイメージファイルをダウンロード

MainsailOSのリリースページからZIPファイルをダウンロードしたら、ZIPファイルを任意の場所に解凍する。

2.Raspberry PiにMainsailOSをインストール

手順1.で得られたイメージファイル(mainsailos-raspios-lite-latest.img)をSDカードに書き込みMainsailOSをインストールする。

MainsailOSのインストールには、Raspberry Pi imagerという便利なツールがあるので、これを使用する。

Raspberry Pi imagerの使い方は簡単で、以下のとおりである。

  1. 書き込みたいOSファイルを選択(CHOOSE OS) ※「Erase」を選択するとストレージのフォーマットができる
  2. 書き込み先のストレージを選択(CHOOSE STORAGE)
  3. 書き込む(WRITE)
書き込みたいOSのファイルを選択

Use custom」を選択し、

MainsailOSのイメージファイルがある場所を指定する。

書き込み先のストレージを選択

USB接続のストレージが自動的に表示されるので、目的のストレージを選択する。

書き込み

WRITEボタンを押せば、選択したストレージにOSのイメージファイルの書き込みが始まる。

書き込みが終われば、MainsailOSのインストール作業は完了となる。

3.MainsailOSのネットワーク設定を編集

各自の無線LAN環境に応じて「mainsailos-wpa-supplicant.txt」のネットワーク設定の行頭にある「#」を消して

  • SSID
  • パスワード

を設定する。

具体的には、該当部分を

から

のように書き換える。

4.PCからMainsailOSにSSH接続

無線LAN接続可能なPCからMainsailOSをインストールしたRaspberry PiにSSHで接続する。

接続の設定は、

  • ホスト:mainsailos.local
  • ユーザー:pi
  • パスフレーズ:raspberry

である。

途中、セキュリティ警告が表示されるが、かまわず「続行」を選択する。

ユーザー名とパスフレーズを入力して「OK」を押せば、SSH接続が完了する。

SSH接続が成功すれば、↓のような画面が表示される。

5.各種ボードのMCUに対応したファームウェアファイルの作成

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)が作成される。

6.各種ボードのシリアルポートの名前を特定

通電した3Dプリンタのボード(ここでは、SKR Mini E3 V1.2)とRaspberry PiをUSB接続した状態で、

cd ~/klipper/
ls /dev/serial/by-id/*

というコマンドを入力する。

表示された内容を「printer.cfg」内にある[MCU]の部分に

serial:/dev/serial/by-id/usb-Klipper_stm32f103xe_33FFD9054242363231822357-if00

という形で書き込む。

7.ボードへのファームウェア書き込み

ボードと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接続したときと同様に接続設定を行い、

  • ホスト名:mainsailos.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のディスプレイには何も表示されない状態となる。

8.Klipperの各種設定を変更

ここで、MainsailのWebUI(http://mainsailos.localまたはhttp://MainsailOSのIPアドレス)にアクセスすると下の画像のようなエラーが表示されるので、プリンタの設定ファイル(printer.cfg)を用意する。

まずは、GithubのKlipperのページにある「↓ CODE」→「Download ZIP」と辿り、KlipperのZIPファイルをダウンロードする。

次にダウンロードしたZIPファイルを解凍してできたフォルダの中にある「config」フォルダ内から自分の環境に合ったプリンタの設定ファイル(拡張子がcfgのファイル)を探す。

その後、プリンタの設定ファイルをテキストエディタなどで開き、[MCU]の「serial:」以降の部分を手順8.で調べたシリアルポートの名前に変更する。

serial:/dev/serial/by-id/usb-Klipper_stm32f103xe_33FFD9054242363231822357-if00

保存して終了し、プリンタの設定ファイルをMainsailのWebUI上でアップロードする。

設定ファイルのアップロードが完了したら、アップロードしたファイルのファイル名上で右クリックし、

表示されるメニューから「Rename」を選択し、

ファイル名を「printer.cfg」に変更する。

設定に問題がなければ「FIRMWARE RESTART」を実行することで、MainsailOSとプリンタとの接続が確立しプリンタ温度のモニタリングが可能となるものの、まだ不足している設定があるため「Missing configuration」とエラーメッセージが表示される

「printer.cfg」の内容はWebUI上で編集可能で、ファイル名をクリックすることで編集画面に入ることができる

MainsailOSの公式ページを参考に、「Printer.cfg」に下記の内容を追記して「SAVE & RESTART」することで、エラーメッセージが消える

[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: 230    #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

ここまでくれば、WebUI上からプリンタの操作が可能となり、MainsailOSの一通りの設定が完了となる。

あとは、各自の環境に合わせてオートレベリング(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: 999999

[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: 999999

[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: 999999

[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: 999999

[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.