Creality Ender-3にWifiモジュールを導入してOctoPrintから無線で操作できるようにする
Wifi経由でプリントを行うことはおすすめしません。
プリントがWifiによって中断じゃなくて終了しました、、、
— しゅう (@syu_chan_1005) 2021年1月12日
泣くわ pic.twitter.com/P5EZjybvIp
同じ経験をする人が少なくなることを願っています。
はじめに
私はOctoPrintをRaspberry Pi Zero W(以下PiZero)で運用していたのですが、OctoPrintのprogress取得に5秒以上かかることなどざらでWebcamの映像がプチフリするのはいつものことでした。 そこでWifiモジュールを導入して、PiZeroではなく別のサーバー上でOctoPrintを稼働させる案を思いついたので実践してみた。
全体構成
まず通常の構成は以下のようになっていると思います。
この構成ではPiZeroに大きな負荷がかかることが懸念されるため、以下のように構成を変更します。
この構成を用いるとOctoPrintを実行しているサーバーとプリンタ, Webcamを分離することができます。
ESP3Dの導入
ESP3DとはUSB経由で行っていたシリアル通信をTCPに変換するブリッジです。そのほかにもWebUIを用いて3Dプリンタの操作を行えます。
導入には github.com
よりReleaseのzipをダウンロードし、 https://github.com/luc-github/ESP3D/tree/v2.1.1#installation を参考にセットアップを行います。
私の利用しているSKR v1.4 Turboには専用のソケットが存在するため、ESP8266との接続は以下の図のように行いました。
また、プリンタ側のシリアルポートは3なので、Marlin Firmwareの場合、Configuration.hのSERIAL_PORTかSERIAL_PORT_2を3にする必要があります。
RaspberryPiからWebcamの映像を配信する
映像の配信にはOctoPrintでも利用しているmjpg_streamerを利用します。 mjpg_streamerの導入は多数の記事があるので省略します。
ESP3D経由でOctoPrintからプリンタを操作する
全体構成で示している図の通りOctoPrintは別のサーバ上で実行します。また構築の簡略化のため以下のdockerイメージを利用しています。
https://hub.docker.com/r/octoprint/octoprint
3Dプリンタとの通信にはESP3Dから提供されているData port(デフォルト: 8888)を利用します。しかしOctoPrintはtcpを喋れないため、socatを利用しOctoPrintから利用できるようにします。 socatを利用したパイプの作成には以下のコマンドを利用しました。
$ socat -d -d pty,raw,link=/dev/virtualcom0,user=<User> tcp:<ESP3D IP>:8888,forever,interval=10,reuseaddr
OctoPrintから/dev/virtualcom0が見えない場合、以下のようにAdditional serial portsに/dev/virtualcom*
を追加すると選択できるようになります。
またWebcamの設定は以下のようにすると映像を見ることができます。
- Stream URL:
http://<raspberry pi ip>/?action=stream
- Snapshot URL:
http://<raspberry pi ip>/?action=snapshot
おわりに
初めにも言いましたがWifi経由でプリントを行うことはおすすめしません。
ですが便利なことは確かです。この構成のためにローカル用のWifiルーターを購入しようかと考えましたが、Raspberry Pi 4Bを導入したほうが安定するためそちらを選択しました。 時間があればBLE経由での操作等も試してみたいと思っています。