VORON 0 Klipperのupdate 仕組みや手順、FlygeminiV3における注意点

DIYするオープンソースプリンター、VORON。今回はとにかくニッチな内容で、制御ソフトのKlipperをアップデートするのが意外と大変だった。というお話です。最近発売される3Dプリンターでも急速に採用が広がるKlipper。一般的なこともなるべく触れるように書いたつもりなので、誰かの助けになれば幸いです。

3Dプリンター制御ソフトウエア Klipper

まず初めに、私自身が勉強中であり完全な素人なので、色々調べたり学んだりはしているものの、本ページには誤りが含まれる可能性があります。ダメな点は修正し、自分の忘備録並びに今後学ぶ方々のお役に立てれば幸いです。ぜひ教えてください!

さて、アップデートに先立って、何が行われているか、ということがわからないと困りますのでまずはそこから確認しましょう。まずは3Dプリンターが動く仕組みそのものであるKlipperから。Klipperの基本についてはTwitterにもに様々な情報があります。自分で調べてもわからないことがあれば皆さんがものすごく丁寧に教えてくれますのでご迷惑にならないよう配慮しつつ、遠慮せずに頼ったらいいんじゃないかと思います。ということで動画でProkoさんが解説してくれている動画がこちら!

とても分かりやすい解説!ありがとうございます!

FluiddやMainsailといったブラウザ経由のインターフェースアプリ、Klipperとの橋渡し的存在のmoonraker等含め、わかりやすく解説されています。本当にありがとうございます。ぜひ最後まで視聴しましょう!

また、主催のKlipper.jpはDiscord上でコミュニティがあり、頼れる先輩が沢山いますので、こちらもぜひ。

さて、前提としてKlipperはLinux上で稼働しています。VORONのシステムインフォを見るとうちのVORON 0のベースとなっているのはDebian 11 bullseyeです。2021年8月リリースのものですね。(つい最近、2023年6月にはDebian 12 bookwormがリリースされています。)

Linuxのベース部分はぱっと見ではあまり表に出てこないので、実際ユーザーが意識するレベルで3Dプリンターを制御するのはKlipperになります。そして基本的には当環境であればFluiddから各種バージョンアップが行える、と思いきや、立ちはだかる壁があります。それがMCUのバージョンアップです。

VORON V0 標準的な状態ではホスト以外のMCUは2つ

MCUは(Micro Controller Unit)の略で、要するに小さなコンピューターです。汎用品向けのものを指すことが多く、いわゆる「マイコン」です。このMCU達をKlipperが管理している感じですね。そしてこのMCUの数はハード構成で変化します。

当方のVORONでは現在、MCUはホスト(Klipper本体、ラズパイや今回であればFlygemini側)、3Dプリンター部分、V0-display部分と、ホスト以外に2つあります。そしてKlipper expander等を装着するとその分も増えます

上の画像ではプリンター部分がSTM32f405xxディスプレイ部分がSTM32f402x6というMCUです。このSTM32はマイコンの鉄板的な存在の一つで、ファームウエア(制御プログラム)を更新する機能を内蔵しています。

小難しい話になりますが、ファームウエアを更新する際にはシステムメモリ内にあるブートローダを起動し処理を行います。そして、そのブートローダをUSB経由で利用できるモードをDFU(Device Firmware Upgrade)モードと言います。ただ、ファームウエアの更新には必ずしもDFUモードを使用する必要はなく、ブートローダ自体を組み込んでファームウエアを更新することも可能になっています。
専門的な内容はSTマイクロ社のドキュメントに書いてありましたので一応リンクを載せておきます。(もちろん私もあまり理解できていません。)
ということで、ここまでの大枠を理解していると、アップデート手順で何をやっているかがわかりやすいと思うのでなんとなく理解しておきましょう。

Klipperのアップデート バージョンをそろえる必要あり

上記の通り、Klipperで複数のMCUを制御しなければならない、このことがKlipperのアップデートをちょっと面倒にしている原因です。KlipperがMCUを管理するためにはすべてのMCUのファームウエアがそろっている必要があります。そろっていないとエラーでKlipperが動かず、3Dプリンターは動きません。

これはKlipperとMCU同じバージョンの説明書を持っていないと正しくやり取りができないからです。「説明書の何ページの・・・」という指示があったとき、説明書の記載内容が違うと困りますよね。

ただ、まず初めに言いたいのは、無理にKlipperをアップデートしなくてもいい!ということです。

個人的にはほかの部分はソフトウエアの問題なのでアップデートしてもいいと思いますし、少なくともLinuxとKlipperが入ったSDカードはバックアップを取っておけば、何かあっても元に戻せます。一方MCUの場合はSDカードでは戻せません。初めてKlipperをアップデートする場合は時間がたっぷりとれるときやこの3Dプリンターがしばらく動かなくてもいい状態で行ってください!うまくいかないと下のような赤い警告が出て、修正されるまでは動かなくなります。

ちなみにVORON側からは下記のようなMCUアップデートの自動化スクリプトについて案内がありました。該当する場合は参考にしてください。(当方の環境では施行していません)

Flygemini V3でのアップデート手順 まずは本体から

ではここからはFlygemini V3の話です。Flygeminiは双子、というだけあってラズベリーパイ互換的なLinuxコンピュータ部分と3Dプリンターのマザーボード部分を2個イチにしてあるボードです。V3はその最新版(2023年現在)で、当方購入のSIBOOR VORON 0に付属してきた、コスパの良いボードです。

内部的にUSBで接続されており1枚になっているため、USBポートは一つコネクタはあるのに使えないというお茶目な仕様です。また、SDカードスロットはホスト側にしかなく、3Dプリンター側のMCUにはスロットがない等、癖があります。ですがかなりいいボードだと私は思います。Flygeminiシリーズ、おすすめです。

Aliexpressリンクです

また、当方が作っているVORONについては前回のブログを参照いただけますと幸いです。これからもカスタマイズしていくつもりですが、約3年前の当ブログを見て、ここまで3Dプリンターにはまるとは私も思ってませんでした(笑)。

さて、アップデートですが、まずFluiddでソフトウエアアップデートを確認してみましょう。・・・どうですか?アップデートのお知らせがあるかもしれませんが、当方のVORONは当初、Fluiddのアップデートが表示されていませんでした。なのでまずはアップデートにFluiddが表示されるようにしておきましょう。

ファイルのmoonraker.confに以下を記載します。これはこちらのFluiddのドキュメントに記載されているものです。これでメニュー項目にFluiddのアップデートが出てくるはずです。・・・どうですか?

[update_manager fluidd]
type: web
repo: fluidd-core/fluidd
path: ~/fluidd

また、Klipper以外はアップデートし正常に動作することを確認しておいたほうがいいと思います。(microSDのバックアップはしておきましょう)なお、うちのVORONはネオピクセルLEDがついている関係でled-effectのアップデートも通知されるようになっています。この状態まで来たら、いよいよKlipperのアップデートです。このRECOVERを押すと、hostのアップデートが行われます。

これでhostのアップデートが出来ました。では、いよいよMCUへ行きましょう。私はここでいったんシャットダウンしました。

Flygemini MCU側のアップデート

MCUのアップデートはLinux側から行う必要があります。PCとPutty等SSH接続できるツールで接続しましょう。公式の案内がこちらにあります。私はこちらの手順を基本的には踏襲しています。この後出てきますがhid-flashを先にインストールしなければいけないので、まだ手順を進めず最後まで読んでくださいね!

ということでこの手順を順番に行いましょう。Klipperのディレクトリに入って、きれいにして、menuconfigに入ってファームウエアをコンパイル。ここまでマニュアル通りにやればOKです。あ、下のところ、適当にコメント書いてますが、説明用なので不要です、気を付けて!

cd klipper
make clean
make menuconfig #本家を参照してSTM32F405のファームを正しく作成して終了
make -j4

これでファームウエアが出来るのでこれをフラッシュします。フラッシュの際、flygeminiのブートジャンパをいったん外してください。(下の赤→のやつです。)

そのあとのスクリプトダウンロードは手順そのままのコピペでOKです。長いですが一気にコピペしてください。

sudo wget https://cdn.mellow.klipper.cn/shell/geminiv3-flash -O /usr/bin/geminiv3-flash > /dev/null 2>&1 && sudo chmod +x /usr/bin/geminiv3-flash || echo "The operation failed"

エラーなく終われば仕上げにコレ!

sudo geminiv3-flash

これでいよいよフラッシュされるのですが、これを実行するとうちの最初の環境ではエラーが生じました。下のスクショの状態、上から6行目に見えるのがエラーです。Flygeminiのアップデートでは上でお話ししたDFUモードは必要ありません。ダウンロードしたスクリプトがやってくれる仕組みなんですが、フラッシュに必要なhid-flashというコマンドがない、という理由でエラーが出て終了しています。

これがないのは致命的で、MCUにファームウエアがフラッシュ出来ません。ですので、hid-flashを先にインストールしましょう。私は下記のようにインストールしました。パスワード聞かれますので入力してください。

sudo apt-get install libusb-1.0 #必要なライブラリをダウンロードしてインストールしてくれます
cd ~/klipper/lib/hidflash #このフォルダまで移動しましょう。
make

なお、この方法も紹介されていました。でも自分のにはhidflashそのものがなかったような・・・。

 cd ~/klipper/lib/hidflash && make

自分は使っていませんが、もしかしたら出来るのかな??いずれにせよ、hid-flashがインストールされれば先ほどのコマンドが使えます。正しく実行されるとこんな感じになると思います。

これでMCUのアップデートが出来ました!!我が家では色々やり直したりしたので最後のところは変わっているかもしれませんが、「操作完成」の後の/devで始まるところはコピペしてPCにコピーしておくといいんじゃないかと思います。(後述します。)

ここまで終わったら手順通りにジャンパを元の位置(boot1とGND)に差し込んでおきましょう。

なお、flygeminiにはもう一つ中国のマニュアルもあって内容が違います。一応参考に置いておきますが、上記のHID-flashのことなどが書いてありました。何かの時参考になるかも??

V0 DisplayのMCUもアップデートが必要

では次にV0 ディスプレイのMCUアップデートです。こちらについても公式のドキュメントがVORON-Hardwareにあります。下記参照ください。

読むとわかりますが、V0 Displayは先にお話ししたDFUモードでファームウエアをフラッシュする方法がとられています。多くの周辺機器(Klipper expanderを含む)はこのモードで行うことが多いと思います。

ということで次に行う作業は、まずVORONを横倒しにすることです。正面ディスプレイの裏側にアクセスできるようにしましょう。こんな感じ。

レンチで指しているところ、V0-displayの裏側にDFUに入るためのジャンパがあります。SSHでLinuxと接続した状態でこのジャンパを短絡しつつ、写真に見えているリセットボタンを押します。一回でダメなら複数回。ディスプレイのUSBを一回抜いて短絡した状態で繋ぐのもいいと思います。(我が家はこの方法でした)

そして手順通り、V0 DisplayがDFUモードに入れているかどうか確認します。

lsusb

スクショがなくて申し訳ありませんが、これでデバイス一覧が表示され、その中にstm32f405xx(3DプリンターのMCU)、そして目的であったSTM Device in DFU Mode(DFUモードのV0-display)が見えると思います。この時点でもしstm32f042x6が見えていたら、DFUモードに入れていませんので、もう一度ジャンパを短絡しつつ上の手順を繰り返してください。

DFUモードになっていればジャンパは外してしまってもOKです。なお、SIBOOR のキットにはこのV0ディスプレイのジャンパに対応するジャンパピンはなかったので、適当な金属で短絡しました。

その後は手順通りにやるだけです。一応確認のため

dfu-util --list

を行うと、DFUモードに入っているリストが出てきます。多分、[0483:df11]じゃないかな?記録しておきます。クリッパーフォルダに移動してファームを作ります。手順にはないけど、一回掃除しておきましょう。

cd ~/klipper
make clean
make menuconfig #本体のボードと同様に、今度はSTMF042を選んで公式ドキュメント通りに設定します。

オプションも含め設定したらQで終了。make clean で掃除してからフラッシュします。DFUモードでは対象を指定してフラッシュするので

make clean
make flash FLASH_DEVICE=xxxx:yyyy #このxxxx:yyyyはさっきの0483:df11等メモした英数字に変更

これでフラッシュが行われます。公式ドキュメントにあるような内容がダダーっと流れて「File downloded successfully」という表示がされていれば大丈夫。公式にはその後にエラーが出ても気にしなくていいよ、と記載があります。確認してくださいね。ジャンパがない状態でv0ディスプレイのリセットボタンを押すと通常モードで起動します。本体はSSH接続したままで大丈夫です。Linux側は一切いじっていないので。。

ドキュメントでは最後に本体側MCUと同様、

ls /dev/serial/by-id/*

を行ってデバイスの接続先を確認するよう言われています。本体MCUでメモした/devで始まるところとフォルダは同じになるのかな?一応確認してください。ここまですべて終わったらFluiddからMCUの場所を指定してあげます。変更がなければそのままエラーが消えるはずですが、位置文字でも変わったら接続できないよ!と怒られます。

printer.cfgの[mcu]セクションのserial: /dev・・・・・とあるところをメモしたもの変更し、V0Display.cfgの [mcu display]セクションにも同様に変更します。(変化がなければそのままですでに動いているはず)

お疲れ様でした

これでMCUが同じファームウエアバージョンになり、KlipperからMCUへパスが通ったのでエラーが全てなくなったはずです。もし別パーツを追加していてMCUが増えた場合は、そのMCUも製品マニュアル(多分Github上にあるはず)に沿ってファームウエアをフラッシュする必要があります。ご留意ください。

全部終わると全て緑になるはずです。気持ちいいですねー!

なお、公式のKlipperドキュメントはこちらです。

さて、マニアックな内容でしたが、Klipper にかかわる色々な手順、思わぬところで役に立つかもしれませんよ!覚えておいて損はないと思います。自分の忘備録的な内容にはなりましたが、どなたかのお役に立てれば幸いです。最後までありがとうございました!