raspberry pi zero wでOctoPrintを動かしてみた

# はじめに

GWに格安３Dプリンタ、[Ender-3 Pro](https://www.amazon.co.jp/ALUNAR「Ender-3-Pro」3Dプリンターキット-高精度、停電印刷リカバリ機能、アップグレードしたEnder-3-プリントサイズ220-250ｍｍ/dp/B07GLRGQB3)を購入しました。事前の想像以上に綺麗に出力できるので満足しています。ただ、プリンタが結構大きく、稼働時の音がそこそこあり、印刷が数時間に及ぶため普段使わない部屋に設置したところ、

- 印刷の途中経過がわからない
    - 数時間後に失敗（だいたい一層目が、、、）
        - 仕方ないので印刷開始後、しばらく目視確認。。。
        - →悲しい
- データの運搬がマイクロSDカード
    - 往復するのが結構面倒
    - 近いうちに紛失する
- 操作パネルが、それほど使いやすくない

と、どうにかならないかと思案していたら、[OctoPrint](https://octoprint.org)という3Dプリンタの管理アプリを発見。RaspberryPi用のイメージ（OctoPi）が公開されていて、手持ちのラズパイもあったので、早速試してみました。

- 「Please note that the Raspberry Pi Zero W is not recommended 」とあるけど、手持ちのZeroで動くか確認
- [カメラモジュール](https://www.amazon.co.jp/gp/product/B01D1D0DJ0/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1)もあるので、遠隔監視と印刷のタイムラプス映像をみて楽しむ

結果、Raspberry Pi Zero Wで目立った問題もなく、結構快適な環境ができました。いか、作業メモです。

## アプリケーション

- OS

```bash:os-release
pi@octpizero:~ $ cat /etc/os-release 
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
```

- OctoPrint: 1.3.11
- mjpg-streamer

## 機材

- 3Dプリンタ：Ender-3 Pro
- raspberry pi zero w
    - SD：８GB
    - 上記カメラモジュール
- USBケーブル
    - A - Mini B <-　手持ちを探すのが大変だった。。。
    - A - Micro変換 上記とZeroの接続用
    - A - Micro Zeroの電源用
- 印刷した、ラズパイのマウンタ

## お約束

この記事は、私の環境での結果です。大きく物が壊れることはないと思いますが、お試しの際はご注意を。


# インストール
最初にOctoPi（試したバージョンは、0.16.0）を試したのですが、手持ちのカメラモジュールを認識できませんでした。さっさと試したかったので、原因究明はやめて、カメラモジュールの動作実績のあるRaspbian Stretch LiteにOctoPrintをインストールすることにしました。

## OSインストールで変更した点
モニタを使う予定はないので、GPUのメモリ割り当てを最小に変更。boot.txtの末尾に　``` gpu_mem=16 ``` を追記。

## OctoPrintのインストール
基本的に、[公式の手順](https://community.octoprint.org/t/setting-up-octoprint-on-a-raspberry-pi-running-raspbian/2337)通りで、動きます。変更したのは、

- octoprintの起動をsystemdに変更したくらいです。

```bash:/etc/systemd/system/octo.service
cat /etc/systemd/system/octo.service 
[Unit]
    Description=OctoPrint service

[Service]
    User=pi
    ExecStart=/home/pi/OctoPrint/venv/bin/octoprint

[Install]
    WantedBy=multi-user.target
```

初回起動時、Web画面が表示されるまで **結構な時間(１０分以上）** かかりました。ゆっくり待ちましょう。

> 初回起動時に、Wizardで初期設定を行います。
> 画面キャプチャ撮り忘れた。

## プリンタ設定

[先人の知恵](https://howchoo.com/g/ntg5yzg1odk/using-octoprint-with-the-creality-ender-3-3d-printer)があったので、そのまま流用。


# スライサーとの連携

スライサーはCura(3.6.0)を使っています。プラグインを導入すると、スライサーから印刷できるようになるので、設定します。

## OctoPrintAPIキー取得

設定アイコン→APIでAPI Keyを取得する。

![スクリーンショット 2019-05-23 20.17.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/9141bb27-4619-dd9b-9f18-4ab0b4ea47a5.png)

## Curaにプラグインを導入する
Marketplace → プラグインから「OctoPrint Connection」を導入。

![スクリーンショット 2019-05-23 20.22.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/9b0db5d9-6d17-3dd0-7bd0-3c0fa31bd544.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/6c949ac2-52ca-a1a8-a44d-1661192e93f2.png)

を押すと、「Connect Octoprint」が追加されているので、rasberry piのIPなどのホスト情報、API Keyを登録。
私の環境では、「Store G-code on the printer SD Card」を有効にすると接続に失敗したので設定を外した。（SDカードの利用をやめたかったので、特に調査もしなかった。。。）

![スクリーンショット 2019-05-23 20.25.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/35a7c6eb-7da8-0add-1ddf-c29244db53f5.png)

すると、スライス処理が終わると、、

![スクリーンショット 2019-05-23 11.28.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/138fc817-5fa7-6f1f-50b6-e77c8d7769b5.png)

おお、直接印刷できる。
![スクリーンショット 2019-05-23 11.28.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/49a66df7-6235-5b38-7bc1-b35982475911.png)

印刷風景もリモートで確認可能。
![スクリーンショット 2019-05-23 11.25.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/b00bdba2-a2dd-d23d-e941-d1e7dcff71b5.png)

OSの負荷は高いけど、許容範囲かな。印刷の失敗もないし、印刷動画配信も結構滑らかなのでよしとします。
![スクリーンショット 2019-05-23 11.30.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/0891e275-f576-8cc8-dbf3-87b2d559d6c1.png)


印刷後、FFMPEGでゴリゴリエンコードしてタイムラプス動画を生成。今は印刷しないでね、と警告が表示されます。動画を見るにはメニューからダウンロードします。ちなみに、32MBの動画は印刷時間５時間くらいの動画です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/a9500c3d-1cd0-511f-bf44-928e773077d4.png)


---
#使ってみて

- スライサーから直接印刷できるのは便利
    - プレヒートで事前に加熱できるから、スライスする前にプレヒートしておけばすぐ印刷できる
    - 一層目がちゃんと出てなかったら、その場で中止できるのが便利
- raspberry pi zeroで問題なく動いた（ように見える）。
    - 一週間ほど使いましたが、raspberry pi zeroの性能で印刷が失敗していない（気づいていないだけかも）
    - 印刷時間も、遅くなった気はしない（もともと時間がかかるので、気にならないだけかも）

## これから

OctoPrintは結構色々なAPIが公開されているので、

- 印刷が終わったら携帯に通知
- Homebridgeと連動してAppleHomeに状態と印刷状況の表示
- ラズパイに照度センサつけて、夜の印刷している時だけLED照明つける（暗くて確認できないから）

など、やってみたいと思います。

## ちょっとした問題点

プリンタの主電源を切っても、ラズパイのUSBから給電されるらしく、プリンタの液晶がつきっぱなしになります。ほぼ、プリンタ本体の操作は行わなくなったのですが、高さ調整はプリンタのメニューから、

1. ホーム位置に移動
2. モータ制御解除
3. 手で調整

を行う必要があるので、モニターは外せない。。。何かいい方法はないだろうか。。


GCode Viewer素敵。。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29641/ea5e4f32-f3d1-304e-d65d-b0f381178fd4.png)