OctoprintとKlipper環境をアップグレードする
前回まとめた構成の3Dプリンタの各種ソフトウェアをアップグレードしていきます。
大方針
私の環境ではOctoPiイメージを使って構築しています。
最新版のOctoPi 1.0.0ではDebian 11(Bullseye)ベースのRaspberry Pi OSが採用されていますが、それより古いOctoPiはバージョンはDebian 10(Buster)が採用されています。
今のところRaspberry Pi OSでBusterからBullseyeにアップグレードする方法は公式では存在しないようです(Debianのお作法に従えばできはすると思いますが)。そのためOctoPi 1.0.0にするにはイメージを焼き直して再構築する必要があります。
今回はその手順は省略し、Busterの中で最新までアップグレードすることにします。
(OctoPrintやKlipperは最新版もBusterで問題なく動作するようなので最新版にできないのはOSのみです)
手順
バックアップ
念のためバックアップを取っておきます。
OctoPrintのバックアップはWeb UIから可能です。
printer.cfgも外部にコピーしておきます。
OS
$ sudo rpi-update
$ sudo reboot
$ sudo apt update
$ sudo apt upgrade
$ sudo reboot
OctoPrint
OctoPrintインストール当時はPython 2製でしたが、現在はPython 3でしか動かないようです。
そのため、、Python 3の実行環境を用意する必要がありますが、幸いなことにセットアップ用のスクリプトが用意されています。(最新版のOctoPiを焼き直せばそれで済む話ですが、前述の通り今回はそれを見送ります)
ただしこのスクリプトを使えるのはOctoPi 0.17以上のみです。それ未満の場合は素直にOctoPiを焼き直すのがいいでしょう。
$ cd oprint
$ curl -L https://get.octoprint.org/py3/upgrade.py --output upgrade.py
$ python3 upgrade.py
OctoPrint Upgrade to Py 3 (v2.2.2)
This script will move your existing OctoPrint configuration from Python 2 to Python 3
This script requires an internet connection and it will disrupt any ongoing print jobs.
It will install the latest version of OctoPrint and all plugins.
No configuration or other files will be overwritten
Press [enter] to continue or ctrl-c to quit
Checking system info...
Detected OctoPi version 0.17.0
Found version: Python 2.7.16
Checking OctoPrint version...
OctoPrint version: 1.5.3
Reading installed plugins...
No plugins found
If you think this is an error, please ask for help. Note this doesn't include bundled plugins.
Press [enter] to continue or ctrl-c to quit
Updating package list...
[sudo] password for pi:
Checking package list for python3-dev
Installing python3-dev...
Use 'sudo apt autoremove' to remove them.
Successfully installed python3-dev
Checking package list for python3-venv
Installing python3-venv...
Use 'sudo apt autoremove' to remove them.
Successfully installed python3-venv
Creating new Python 3 environment...
Successfully created Python 3 environment at /home/pi/oprint
Installing build dependencies...
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Updating pip...
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Installing OctoPrint... (This may take a while - Do not cancel!)
Collecting required packages
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))': /simple/cachelib/
Installing collected packages
Collecting required packages
Installing collected packages
Collecting required packages
Installing collected packages
OctoPrint successfully installed!
Cleaning up...
Finished! OctoPrint should be ready to go
Once you have verified the install works, you can safely remove the folder /home/pi/oprint.bak
If you want to go back (If it doesn't work) to Python 2 download the file at:
https://raw.githubusercontent.com/cp2004/Octoprint-Upgrade-To-Py3/master/go_back.py
$ sudo reboot
$ sudo apt autoremove
再起動後にOctoPrintのWebUIにアクセスすると以下のエラーが表示されていましたが octoprint
サービスを再起動すると表示されなくなりました。
(videoグループにはすでに追加されていました)
OctoPrint cannot check for throttling situations reported by your Pi. vcgencmd doesn’t work as expected. Make sure the system user OctoPrint is running under is a member of the “video” group.
Klipper
続いてKlipperも上げていきます。手順は公式ページに従って進めていきます。
Frequently Asked Questions - Klipper documentation
SDCard updates - Klipper documentation
$ cd klipper
$ git pull
$ scripts/install-octopi.sh
$ sudo systemctl stop klipper
$ make menuconfig
$ make clean
$ make
続いてファームウェアをボードに焼いていきます。スクリプトが用意されているようなのでそれを使います。
$ ./scripts/flash-sdcard.sh /dev/ttyAMA0 btt-skr-v1.3
Flashing /home/pi/klipper/out/klipper.bin to /dev/ttyAMA0
Checking FatFS CFFI Build...
Building FatFS shared library...Done
Connecting to MCU...Connected
Checking Current MCU Configuration...Trying fallback...Done
MCU needs restart: is_config=1, is_shutdown=1
Attempting MCU Reset...Done
Waiting for device to reconnect...Done
Connecting to MCU...Connected
Trying fallback...Initializing SD Card and Mounting file system...
SD Card Information:
Version: 2.0
SDHC/SDXC: False
Write Protected: False
Sectors: 245760
manufacturer_id: 0
oem_id: 0
product_name: APPSD
product_revision: 0.0
serial_number: 00000057
manufacturing_date: 12/2019
capacity: 120.0 MiB
fs_type: FAT16
volume_label:
volume_serial: 2826674516
Uploading Klipper Firmware to SD Card...Done
Validating Upload...Done
Firmware Upload Complete: firmware.bin, Size: 27656, Checksum (SHA1): 73FCDF5209F2DC55E8A110880C93F6EE87E27E55
Attempting MCU Reset...Done
Waiting for device to reconnect...Done
Connecting to MCU...............................................................................................
SD Card Flash Error: Unable to connect to MCU
Traceback (most recent call last):
File "/home/pi/klipper/scripts/spi_flash/spi_flash.py", line 1647, in main
spiflash.run()
File "/home/pi/klipper/scripts/spi_flash/spi_flash.py", line 1589, in run
self.run_reactor_task(self.run_verify)
File "/home/pi/klipper/scripts/spi_flash/spi_flash.py", line 1570, in run_reactor_task
k_reactor.run()
File "/home/pi/klipper/klippy/reactor.py", line 292, in run
g_next.switch()
File "/home/pi/klipper/klippy/reactor.py", line 340, in _dispatch_loop
timeout = self._check_timers(eventtime, busy)
File "/home/pi/klipper/klippy/reactor.py", line 158, in _check_timers
t.waketime = waketime = t.callback(eventtime)
File "/home/pi/klipper/klippy/reactor.py", line 48, in invoke
res = self.callback(eventtime)
File "/home/pi/klipper/scripts/spi_flash/spi_flash.py", line 1556, in run_verify
self.mcu_conn.connect()
File "/home/pi/klipper/scripts/spi_flash/spi_flash.py", line 1202, in connect
raise SPIFlashError("Unable to connect to MCU")
SPIFlashError: Unable to connect to MCU
失敗しました。ファームウェアを焼いてボードを再起動するところまではうまくいっていましたが、再起動後にボードに接続できなくなったようです。 OctoPrintからも接続できません。
Send: STATUS
Recv: // mcu 'mcu': Unable to connect
Recv: // Once the underlying issue is corrected, use the
Recv: // "FIRMWARE_RESTART" command to reset the firmware, reload the
Recv: // config, and restart the host software.
Recv: // Error configuring printer
Recv: // Klipper state: Not ready
Recv: !! mcu 'mcu': Unable to connect
現在は配線をシンプルにするためRaspberry PiとSKRはUSBではなくGPIOポートを使ってシリアル接続しています。
いろいろと調べたところmake menuconfig
で通信方法がUSBになっていることを発見したのでシリアルへ変更してビルドし直しました。
(今までなぜ接続できていたのか不明)
$ make menuconfig
$ make
ボードには接続できないのでSKRのSDカードの直下に firmware.bin
というファイル名でコピーして電源を入れ直します。
念のためRaspberry Piも再起動するとうまく接続できたようです。
Send: STATUS
Recv: // Klipper state: Ready
Send: M115
Recv: ok FIRMWARE_VERSION:v0.12.0-60-g0665dc89 FIRMWARE_NAME:Klipper
バージョン番号の末尾文字列はGitのハッシュ値のようです。ひとまずこれで最新版まで上がったことを確認できました。
$ git log
commit 0665dc89766bd85c095f18ba84028dc47def2f19 (HEAD -> master, origin/master, origin/HEAD)
Author: I3DBeeTech <129617321+I3DBeeTech@users.noreply.github.com>
Date: Tue Jan 2 22:01:30 2024 +0530
config: I3DBEEZ9 New board (#6447)
Signed-off-by: Venkata Kamesh <i3dbee@gmail.com>
printer.cfg
Klipperの設定ファイルは互換性がなくなっているのでドキュメントを見るかサンプルコンフィグ(configディレクトリ以下にあります)を見て必要なところを修正していきます。
Configuration Changes - Klipper documentation
ドキュメントをざっと見たところ修正が必要そうなところはrotation_distanceだけでしたのでサンプルの該当箇所を見ながら直していきました。
rotation_distance
はステッピングモーターによるところのようだったので printer-creality-ender3pro-2020.cfg
を参考に、その他のコメントは generic-bigtreetech-skr-v1.3.cfg
をもとに追加しておきました。
※本来 rotation_distance
は以下のように計算できるようなのでハードウェアの仕様を調べればよいのですが横着しました。
Rotation distance - Klipper documentation
差分はこんな感じ。
--- printer.cfg.bak 2022-11-16 00:25:03.602359503 +0900
+++ printer.cfg 2024-01-03 23:39:21.849433768 +0900
@@ -8,7 +8,8 @@
step_pin: P2.2
dir_pin: !P2.6
enable_pin: !P2.1
-step_distance: .0125
+microsteps: 16
+rotation_distance: 40
endstop_pin: P1.29 # P1.28 for X-max
position_endstop: 0
position_max: 320
@@ -18,7 +19,8 @@
step_pin: P0.19
dir_pin: !P0.20
enable_pin: !P2.8
-step_distance: .0125
+microsteps: 16
+rotation_distance: 40
endstop_pin: P1.27 # P1.26 for Y-max
position_endstop: 0
position_max: 300
@@ -28,7 +30,8 @@
step_pin: P0.22
dir_pin: P2.11
enable_pin: !P0.21
-step_distance: .0025
+microsteps: 16
+rotation_distance: 8
endstop_pin: probe:z_virtual_endstop
position_max: 250
position_min: -1.5
@@ -37,7 +40,8 @@
step_pin: P2.13
dir_pin: !P0.11
enable_pin: !P2.12
-step_distance: .010526
+microsteps: 16
+rotation_distance: 34.406
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: P2.7
@@ -98,30 +102,35 @@
#[tmc2208 stepper_x]
#uart_pin: P1.17
#run_current: 0.800
+#stealthchop_threshold: 999999
#hold_current: 0.500
#stealthchop_threshold: 250
#[tmc2208 stepper_y]
#uart_pin: P1.15
#run_current: 0.800
+#stealthchop_threshold: 999999
#hold_current: 0.500
#stealthchop_threshold: 250
#[tmc2208 stepper_z]
#uart_pin: P1.10
#run_current: 0.650
+#stealthchop_threshold: 999999
#hold_current: 0.450
#stealthchop_threshold: 30
#[tmc2208 extruder]
#uart_pin: P1.8
#run_current: 0.800
+#stealthchop_threshold: 999999
#hold_current: 0.500
#stealthchop_threshold: 5
#[tmc2208 extruder1]
#uart_pin: P1.1
#run_current: 0.800
+#stealthchop_threshold: 999999
#hold_current: 0.500
#stealthchop_threshold: 5
@@ -141,6 +150,7 @@
#spi_software_sclk_pin: P0.4
##diag1_pin: P1.29
#run_current: 0.800
+#stealthchop_threshold: 999999
#hold_current: 0.500
#stealthchop_threshold: 250
@@ -151,6 +161,7 @@
#spi_software_sclk_pin: P0.4
##diag1_pin: P1.27
#run_current: 0.800
+#stealthchop_threshold: 999999
#hold_current: 0.500
#stealthchop_threshold: 250
@@ -161,6 +172,7 @@
#spi_software_sclk_pin: P0.4
##diag1_pin: P1.25
#run_current: 0.650
+#stealthchop_threshold: 999999
#hold_current: 0.450
#stealthchop_threshold: 30
@@ -171,6 +183,7 @@
#spi_software_sclk_pin: P0.4
##diag1_pin: P1.28
#run_current: 0.800
+#stealthchop_threshold: 999999
#hold_current: 0.500
#stealthchop_threshold: 5
@@ -181,6 +194,7 @@
#spi_software_sclk_pin: P0.4
##diag1_pin: P1.26
#run_current: 0.800
+#stealthchop_threshold: 999999
#hold_current: 0.500
#stealthchop_threshold: 5
修正後はサービスを再起動
systemctl restart klipper
値については確信がなかったので実際に印刷してみてテストしました。
以上
↓今欲しい3Dプリンター
参考
関連記事
- Ender 3 Pro 改造まとめ
- Raspberry Pi OS(Raspbian)にOctoPrintをインストールする
- 3Dプリンタ IUSE IUM1 を買った
- BM40ビルドログ
- Lenovo Go USB Type-C ワイヤレス マルチデバイスマウスを買った