OctoPi(Buster)インストール
octopiがそろそろ古いなと思い、少しバージョンアップを検討する。最初に設定したのが2017年だったので、 既に2年半以上はoctopiで動かしてきていた。ときどきロックすることもあったが、ほぼ安定して動作しており、 かなり活躍してくれていた。
raspbian-jessie(debian8)ベースで動いていたのだが、今となってはraspbianは既に次のstretch(debian9)を終えて、 buster(debian10)となっている。そろそろosアップデートをしてやろう。 ラズパイは当時の最高機種pi3Bを使っており、これはこのままでもよいだろう。 sdカードを見てみると、4GBのものを使用していた。今では4GBでは容量不足なので、新しいものに変える必要がありそうだ。 長年使ってきて、寿命も近いかもしれないし。

では、インストール作業を開始する。SDカードは32GBを新たに用意。 まずはイメージダウンロードから開始。以下のダウンロードページより、ラズパイにoctopiが入ったイメージをダウンロードする。 現時点ではoctopiは0.17.0になるらしい。今使っているものが0.14だったので、こちらも地道に更新されているようだ。

ダウンロードが完了したら、ダウンロードしたイメージファイルをSDカードに焼く。 SDカードへの焼き込みはetcherを使用する。 imgファイルをそのままドラッグアンドドロップで渡せるので便利なのだが、受け付ける範囲が狭まったようで、 左側のプラスの絵のあたりにファイルを落とさないと反応しれくれない。以前は全面OKだった気がするけどなぁ。


終わったら、SDカードを一度抜いてから、また差し込む。ラズパイで起動させる前にひと手間入れる。 windowsで認識させたら、SDカード内にある「octopi-wpa-supplicant.txt」を開く。 公式の説明ではwordpadは使うなとのこと。まああれでテキスト編集しようとは、octpi使うような人は思わないだろう。 ちゃんとしたテキストエディタで編集しよう。
ファイルを開くと、ファイルの最後まで移動して、以下を追記。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=JP network={ ssid="【wifiのSSID】" psk="【wifiのパスワード】" key_mgmt=WPA-PSK }
あと、空のsshファイルは出来ていたので、sshは初期段階で接続が出来そうだ。 では、これでSDカードの準備はできたので、抜き取って、ラズパイに入れて起動しよう。
起動と設定
ラズパイにSDカードを差し込んで電源投入。しばらく待機してからssh接続を行う。 接続先は「octopi.local」で接続すればよいが、うまくつながらない場合には、 別のラズパイなどから「ping octopi.loca」で等打ち込み、IPアドレスを調べよう。 ちなみに、windows10(1903)からは見えなかった。windowsはアップデートでどんどん使いにくくなる。

teratermでssh接続が出来たら、まずは基本設定作業開始。
sudo raspi-config
パスワードを聞いてきたので、パスワードを入れてやる。sudoでいちいちパスワードを聞かれるのはちょっと面倒。
まずは、piユーザのパスワードを変更。 デフォルトのままは危ないので、きちんと変えておく。
次はロケールを直しておく。 「4 Localisation Options」の「I1 Change Locale」で 「en_GB.UTF-8 UTF-8」の解除、 「en_US.UTF-8 UTF-8」「ja_JP.EUC-JP EUC-JP」「ja_JP.UTF-8 UTF-8」 の選択を実施。 デフォルトは「ja_JP.UTF-8 UTF-8」にしておく。
タイムゾーンも直しておく。デフォルトはイギリス設定なので9時間ずれる。 「4 Localisation Options」の「I2 Change Timezone」でタイムゾーンの変更。 「Asia」「Tokyo」を選択しておく。
これで、raspi-configは終了。ホスト名は変更なくそのままとして置いた。
後は、追加のOS設定。 いつもやってるエイリアス設定、NTP設定、IPV6解除などを実施。 しかし、この時点でwindowsから「octopi.local」で見えないので、さらに「samba」を入れるために、 まずはアップデート実施。
sudo apt-get update
sudo apt-get -y upgrade
アップデートが終わったら、sambaを入れる。
sudo apt-get -y install samba
sambaを入れると、windowsからホスト名アクセスで見えるようになるので、インストールが終わったら、 そのまま再起動する。特に共有を使うつもりはないので、インストールのみでよい。
octoprint設定
ラズパイの基本設定が終わり、ホスト名アクセスができるようになったら、octoprintの設定を行う。 webブラウザから「http://octopi.local」で、 octopiにアクセス。特に何もしなくても、octoprintは起動しているので、若干もたつくが接続できるはず。
つながったら、初回接続なので、初期設定ウイザード画面となる。 右下の「Next」を押して進めよう。

次はアクセスコントロール。 誰でも参照可能か、ログイン方式とするかの選択。 こちらは、アクセスコントロールありとした。宅内LANのみなので、攻撃は受けないはずだが、 一応勝手におかしな操作されないようにガードしておく。

次にトラッキング?の設定画面。どうも使用状況をoctprint.orgに送信する様子。 監視されるのはあまり気持ちよくないので、こちらは無しとした。

次にオンラインチェック。15分ごとにチェックを行うかというもの。 常時接続の場合は、不要でよいらしい。アプリ更新チェックなどで使用されるのだろうか?

プラグインのブラックリストチェック有無。 octoprintもだいぶアップデートされてきて、正しく動くプラグインと初期のまま放置のプラグインがあるようで、 動作不良のものはブラックリスト化されて、動かさないようにする仕組みらしい。 安全のためにも入れておこう。

プリンタプロファイル設定。というか名前だけっぽい。 この後の設定を保存する代表名なのだろう。「X-ONE2」を入れておく。Model名は不明なので「QIDI RepRap Printer」にしておいた。

プリンタ設定として、画面内のタブを押して切り替え、次の項目入力。FormFactorはビルド面が丸か四角か。 デフォルトの四角(Rectangular)のまま。ヒートベッドあり。ビルドサイズは、140mmを設定した。

次に軸設定。最大スピードと思われる数値は、特に変更せずそのままとした。 Z軸のチェックボックスは必須。 ここで回転軸の反転設定。これを入れないと上下が逆になり、プリンタが壊れる。

最後にノズルサイズと個数。デフォルトのままで問題ないので、完了。そのまま「Next」を押す。

これで、初期ウイザードは終わったようだ。動作中は離れるな(never leave)のような注意書きがあるが、 何時間もそばにいるのは難しい。まあわかるけどね。

これで無事初期設定が完了して、再起動の後、octoprintが立ち上がった。

接続と設定
初期設定が終わったので、右上のスパナアイコンを押して、詳細設定を行う。

まずは、接続設定。シリアルポートは3Dプリンタに接続済みなら「/dev/ttyUSB0」が表示されるので、 これを選んでおく。その下のボーレートは115200とし、その下の自動接続のチェックを入れておく。

温度について、ノズル温度がデフォルトでは「ABS:210℃/PLA:180℃」だったので、 これを「ABS:230℃/PLA:210℃」に変更。 また、ヒートベッド温度が「ABS:100℃/PLA:60℃」だったので、 これを「ABS:100℃/PLA:40℃」に変更。

features設定の「Confirm before starting a print」をチェックしておく。印刷前にメッセージが出るようになる。 印刷開始しても停止ボタンはあるので、止めることはできるのだが、一応開始前に確認をするようにしておこう。

「webcam&timelapse」の設定で、下のほうにある「Enable OctoPrint watermark in timelapse movies」のチェックを外す。 これがチェックされていると、タイムラプスの動画にoctoprintの絵が差し込まれる。 あまりかわいい絵ではないので、知らない人には気持ち悪がられる。

見た目の設定。タイトルを「X-ONE2」にしておき、色合いを青に。あとはそのまま。

保存ボタンを押して、設定内容を反映させよう。 そして念のため、再起動を行っておこう。
次に、カメラを準備。USBカメラを接続。 つないだのはBSW200MBK USBに刺すだけで認識して使用可能。120°の広角レンズで広く映っていいらしい。今は後継機種があり、 BSW500MBKとのことだが、 ずんぐりむっくりでブサイク。
カメラをつないで、そのまま「control」タブを選ぶと、カメラ画像が表示された。 しかし表示遅延は大きく、10秒以上遅れて表示していた。ラズパイ性能とか、wifiとかいろいろ影響しているのか? まあ、なんとなくの状況がわかればよいのと、タイムラプスが取れればよいので、問題ない。

合わせて、動作設定が問題ないか確認しておく。 まずは左側の「XYZ」の動作。XYでの矢印ボタンを押してみて、正しくエクストルーダが動くかを確認。 そして、問題のZ軸も矢印ボタンで上下の動きが一致しているかを確認。 問題なければ、真ん中の「家」のマークを押して、ホームポジションに移動できるか確認。 問題が起きた時のために、コンセントを引き抜く準備をしてから行おう。

そのほか、右側の「General」もボタンを押して動作を試そう。 エクストルーダを動かした後に、「MotorsOff」を押せば、モーターへの接続が切れる。 ロック(保持)されていたモーターがロックが外れ、エクストルーダが手で動かせるようになれば良い。
また、ファンのOn/Offも試してみる。これによって冷却ファンが回ったり停まったりすればよい。
なお、真ん中の「Tool (E)」は触らずにおく。ここはエクストルーダの設定で、 フィラメントを出したり引き戻したりが試せるが、ノズルが温まってないと動かないはずなので、 放置しよう。
追加設定
いくつかの追加設定を行う。まずは、おしゃべり機能。 OpenJTalkを入れて、音声合成機能をインストール。
しゃべるスクリプトを「.octoprint」に作成。
nano ~/.octoprint/jtalk.sh
#!/bin/bash #HV=/usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice HV=/usr/share/hts-voice/mei/mei_happy.htsvoice tempfile=`tempfile` option="-m $HV \ -s 16000 \ -p 100 \ -a 0.03 \ -u 0.0 \ -jm 1.0 \ -jf 1.0 \ -x /var/lib/mecab/dic/open-jtalk/naist-jdic \ -ow $tempfile" if [ -z "$1" ] ; then open_jtalk $option else if [ -f "$1" ] ; then open_jtalk $option $1 else echo "$1" | open_jtalk $option fi fi aplay -q $tempfile rm $tempfile
一応正しく動作するか確認しておこう。
echo “只今の時刻は、`date +%k`時`date +%-M`分です” | sh ~/.octoprint/jtalk.sh
次に、時分秒変換ツールの作成。
nano ~/.octoprint/sec2time.c
#include <stdio.h> int main(int argc, char **argv) { int in; int h,m,s; if (argc > 1) { in = atoi(argv[1]); } else { in = 0; } h = in / 3600; in %= 3600; m = in / 60; in %= 60; s = in; if (h > 0) printf("%d時間%d分%d秒",h,m,s); else if (m > 0) printf("%d分%d秒",m,s); else printf("%d秒",s); }
出来たらコンパイル。
cc -o ~/.octoprint/sec2time ~/.octoprint/sec2time.c
多少warningが出るが、無視しよう。ちょっとC言語は苦手。 では、動くかチェック。
~/.octoprint/sec2time 3600
1時間0分0秒
となればOK。改行などしないので表示は変になるが、それでよい。
次に、印刷終了時の処理バッチを作成。 終了時のお知らせをしゃべるのと、メール(というかLINE)を飛ばす処理を入れる。
nano ~/.octoprint/PrintDone.sh
# save picture curl -o /tmp/printDone.jpg "http://localhost:8080/?action=snapshot" # speak message TM=$(/home/pi/.octoprint/sec2time $1) MES="3Dプリンタの印刷が終了しました。印刷時間は$TMです。" sudo sh /home/pi/.octoprint/jtalk.sh $MES # send message curl -X POST -H 'Authorization: Bearer *****'\ -F "message=$MES"\ -F 'imageFile=@/tmp/printDone.jpg'\ https://notify-api.line.me/api/notify
印刷完了時に写真を撮って、lineに添付して送信。なお、Bearerの後ろの「*****」には、送信先のLINE-IDを入れる。 うまく通知が届くか試してみよう。
sudo sh ~/.octoprint/PrintDone.sh 3661 test
プリンタ(ラズパイ)が喋って、現在の状況がLINEで送られてくればOKだ。
では、octoprintのイベントに合わせて処理を追加する。まずは、イベント設定の追加。 まずは、バックアップ。
cp -p ~/.octoprint/config.yaml ~/.octoprint/config_org.yaml
そして、編集開始。「feature:」の前(「appearance:」の後」)あたりに、イベント設定を差し込む。
nano ~/.octoprint/config.yaml
events: enabled: True subscriptions: - event: Startup command: echo "こんにちは。3Dプリンタを起動しました。" | sudo sh ~/.octoprint/jtalk.sh type: system - event: Shutdown command: echo "シャットダウンします。さようなら" | sudo sh ~/.octoprint/jtalk.sh type: system - event: PrintStarted command: echo "3Dプリンタの印刷を開始します。" | sudo sh ~/.octoprint/jtalk.sh type: system - event: PrintFailed command: echo "3Dプリンタの印刷に失敗しました。" | sudo sh ~/.octoprint/jtalk.sh type: system - event: PrintDone command: sudo sh ~/.octoprint/PrintDone.sh {time} {file} type: system - event: PrintCancelled command: echo "3Dプリンタの印刷を中止しました。" | sudo sh ~/.octoprint/jtalk.sh type: system - event: Error command: echo "エラーが発生しました。エラー内容は {error} です" | sudo sh ~/.octoprint/jtalk.sh type: system
最後に、コマンドで「sudo」使っているけど、これに対してパスワード要求がかかってしまうので、 sudoでのパスワード不要設定を行う。
sudo visudo
で、設定ファイルを開く。
~ # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL pi ALL=NOPASSWD: ALL ~
ファイルの中で、piの行を追記する。 これらの設定を行ったら、一度OSリブートしたほうが確実だろう。