こんばんは。
さて、今回は「複数の3Dプリンターをネットワーク経由+タッチパネルで一括管理する」になります。
なんだかんだと3Dプリンターが増えてきて、それぞれの3Dプリンターで印刷しようとするたびに Gコードを入れたSDカードを別の部屋にある3Dプリンターまで持っていくのがメンドクサクなった次第です。
OctoPrintと呼ばれるオープンソースのソフトを使えば、3Dプリンターをネットワーク経由で操作可能になるのですが、OctoPrint1台に対して、1台しか3Dプリンターを接続できないため、同時に複数を制御することはできません。(たぶん。)
それにOctoPrintは、ネットワーク経由のブラウザでの操作になるので、プリンターの近くに操作用のブラウザが動くPCが必要になるので、離れた場所にある3Dプリンターで使うと少々不便です。
そこで、「Repetier-Server」で改善してみようと思います。
Repetier-Serverは、1台のPCやRaspberry Piで複数の3Dプリンターを同時にネットワーク経由で制御できるソフトウェアになります。
また有料の機能ですが、専用のGUI画面(Raspberry PiやPCに接続したタッチモニタでの操作)やWebカメラを使った監視もできます。
最近のバージョンだと、Raspberry PiのGPIOも利用できるみたいです。
※GUIやカメラを使わなければ、無料で利用可能です。
今回は、GUIも利用したいので、有料版の「Repetier-Server Pro(日本円で7840円)」を購入することにしました。
公式サイトより購入すると、アクティベートキーとプログラムのダウンロードURLが表示されるのでリンクよりzipファイルをダウンロードします。
※1つのアクティベートキーで最大5台まで アクティベートすることが可能みたいです。
このzipファイルの中にすべてのプラットフォーム(Linux,mac,Windows)のイメージが含まれています。
Raspberry Pi用だけは、別途公式サイトよりダウンロードします。
https://www.repetier-server.com/download-images/
利用するサーバー側のハードは、Raspberry Pi 4 4Gになります。
Raspberry Piで利用する場合は電源周りがシビアらしいので、できれば3A以上出力可能なACアダプタに接続することが推奨されています。
Raspberry Pi 3 Model Bでも、電源をしっかり確保すれば4台同時制御も問題ないらしいです。(公式のコメントより)
さて、ダウンロードしたRaspberry Pi用のイメージをSDカードに書き込み起動します。
起動後にPCブラウザからインストールしたRaspberry PiのIPアドレスでアクセスします。



早速、設定より購入したライセンスキーを入力すると有料機能がアンロックされます。
ちなみにRepetier-Serverで利用するタッチパネル液晶ですが、当初は、HDMI + USB(タッチ)接続のモニタを接続しましたが、タッチが上手く動作せず、そのあと、GPIO接続の液晶など何種類か試しましたが、正しく動作しませんでした。
結局、タッチがちゃんと反応したのは、DSI接続のRaspberry Pi公式の7インチモニターだけでした。
なので、Repetier-Serverで利用するタッチパネル液晶は、値段が高いですが、Raspberry Pi公式の7インチモニターをお勧めします。
追記:後日、Amazonで販売されている安いDSI接続の液晶を購入して試したところ、問題なく表示とタッチパネル操作が出来ました。
公式のより半額近い値段ですので、こちらがお勧めです。



あとは、Raspberry PiのUSBポートに制御したい3Dプリンターを接続し、ブラウザの操作パネルより接続した3Dプリンターの設定を行います。(今回は、USBハブ経由での接続になります。)
USBハブにMK3Sを接続すると、以下の名前でUSBシリアルポートが認識されました。
$/dev/ttyACM0 (0は接続した順番で変わります。)
Prusa i3 MK3Sの場合、制御ボードのEinsy Ramboに書き込まれているシリアルナンバーで接続されている3Dプリンターを判別するようなのですが、
Original Prusaの方は、ちゃんとATTRS{serial}属性が出力されるのに対して
$udevadm info -a -n /dev/ttyACM0
~~~~
ATTRS{serial}=="CZPX****X004X******" ← シリアルが出力される
クローンPrusaの方は、出力されない。。。
$udevadm info -a -n /dev/ttyACM1
~~~~
← シリアルが出力されない
これだと、クローンPrusa i3 MK3Sを認識できないので、ネットでいろいろと解決策を探していると、以下のサイトが見つかりました。
https://github.com/middelink/EinsySerialnumber
自分が困っている理由と全く同じで、その解決策としてClone Prusa i3 MK3SのEinsy Ramboボードにシリアルナンバーを書きこむことができるツールがありました。
制御ボードのROMを書き換える必要があるので、かなりハードルが高そうですが、きちんと書き換えることができましたので、別記事で紹介しております。
ちなみに「Prusa i3 MK3S」の設定は以下になります。(最初、設定値がわからず上手く接続できませんでしたが、以下のサイトの通りに設定したら無事接続と制御ができました。)
Prusa is MK3SをUSBで接続し、本体の電源をONにし、トップ画面右上にある+ボタンからプリンターを追加していきます。

任意のプリンター名を入力し次のステップに進みます。

Device / Portから、追加するプリンターのシリアルナンバーのものを選び、Communication Bufferingから127 byte bufferを選択し、Continueを選択します。
※Device / Portは、別記事で書き換えたシリアルナンバーで選択できるようになります。
Continueを押すと、自動でプリンターから情報を取得します。

Step 3では、プリントエリアの設定をします。それぞれの項目を下記の内容の通りに書き換えて次のステップに行きます。

Step 4は、Heat Bed InstalledをYESに変更し、次のステップに進みます。

Step 5の内容はそのままで、Finishを選択し、プリンターを登録します。

トップ画面に先ほど登録したプリンターが表示されるので、右上の歯車マークを選択し、「Printer Setting」を選択します。

設定の中の、Connection項目の「Port is visible even if firmware is not running」にチェックを入れます。

Manual Control項目のZ Speedの値を2から12に変更し、設定を保存します。

これでプリンターの設定は、完了です。(上のサイトそのままなので、一部設定の意味は分かっておらず。。)
同じように、接続してある3Dプリンターを同じ手順で追加をしていきます。
今回、手持ちのOriginal Prusa i3 MK3S+を1台とクローンPrusa i3 MK3Sを3台の計4台を接続しました。

ぉぉぉぉ!!。これでネットワーク経由で、どこでもブラウザ経由で同時に複数の3Dプリンターを制御できるようになりました!
実際の設置風景は、こんな感じになっています。プリントファームっぽくなりました。

これでリモートのブラウザで印刷要求を行い、実際の設置場所ではタッチパネルにて各3Dプリンターが制御できるようになりました。
テストで、Repetier-Server経由のプリントも行いましたが、問題なく印刷ができました。
ちなみに、Raspberry Piに接続したモニター側のRepetier-Server表示はこうなっています。

次は、カメラになります。
適当なUSB接続のWebカメラを用意して、Raspberry PiのUSBポートに接続すれば自動で認識されます。
あとは、3Dプリンターごとにカメラの設定をするだけになります。
登録してある任意の3DプリンターのPrinter Settingを選択し、Webcamタブを選択すると以下のように接続されているWebカメラが表示されるので、

「+Add Webcam」を選択して、接続したいWebカメラの「Assign」を選択すると接続されます。
問題がなければ右上の「Save configuration」で設定を保存しますし、トップ画面に戻ってカメラモードに切り替えると、Webカメラの画像が表示されます。

ちなみに1台のWebカメラで複数の3Dプリンターに接続することも可能です。
それ以外に、Repetier-Serverの機能ではありませんが、3Dプリンターと照明の電源をスマートプラグを利用してリモートで電源のON/OFFを出来るようにしています。(Google HomeやAlexaで音声での操作も可能)
特にSwitchBotスマートミニプラグを使用すれば稼働中の消費電力をリアルタイムで見ることも出来ます。

これで、全てリモートで印刷まで完了できるようになりました。