Pi Zero Wを使って3Dプリンタ(idbox!)をWiFi対応にしてみた(専用ケースSTLデータ公開有り)

3Dプリント
この記事は約39分で読めます。
スポンサーリンク
スポンサーリンク

その筋の人には今頃何言ってんだと言われそうですが、とうとうWiFi対応のPi Zero Wが発売されましたね♪

かねてから、3Dプリンタのidbox!をWiFi対応にしたいと思っていた処に、実に具合が良い商品だったので、OctoPrintを使って環境構築してみました。

ついでに、Piカメラも使って画像監視が出来る様にもしてみました。

オリジナルの専用ケースも用意してみましたので、idbox!ユーザーの方は、是非お試し頂ければと思います。(BS01+ユーザーも是非!)

 

【2018/03/20追記】OctoPrintのアップデート方法について追記しました

OctoPrintのアップデート」の項を参照ください。

 

先に完成した姿をお見せすると、こんな感じになります。

idbox!ユーザーにはお馴染みの青い専用カバーを被せておりますが、idbox!の上に乗っかってる黒い物体が今回の成果物です。

拡大するとこんな感じ。

上にあるちょっと傾いてる部分がPiカメラ。

このカメラで斜め下のプリントテーブルを撮影しており、離れた場所のPCのブラウザでプリント状況を確認することが出来ます。

タイムラプス動画になりますが、このカメラで撮ったプリント中の様子はこんな感じになります。ご参考まで。

という事で、とても便利に使えております。

 

では、本題に入りましょう。

 

対象環境

対象ハードウェア: Pi Zero Wと互換Piカメラモジュール

実は今まではPi2とGW-450D2を使っておりました。(過去記事でGW-450D2のセットアップ記事があるのはその関連です)

カメラI/F付きのPi Zero rev1.3がリリースされた際にも一時検討したのですが、WiFi通信のUSBアダプタと3Dプリンタ制御用のUSBケーブルを繋ぐには、USB HUBを追加しないとポートが足りない(Pi Zeroには一つしかUSBポートが無いのです)ので、折角Pi Zeroでミニマム感出したいのに意味がないというか、そんならPi2使った方がマシという結論に至っておりました。

この度、Pi Zero Wにアップデートされた際にWiFiが内蔵されましたので、遂にUSB HUB無しでPi Zeroのミニマム感を維持したままの環境構築が可能になったのです!!

うん、ここまでお膳立てが揃えばやるしかないでしょ!!

 

ということで、今回はPi Zero W一択です。

前回記事でも書きましたが、Amazonのマーケットプレイスでも出品されているのですが、非常に割高な値付けになってるので、個人的にはあまりおススメしません。

日本国内だとコチラ↓のスイッチサイエンスさんあたりが安心。 まぁいつも在庫無いんですけどね。(;^ω^)

Raspberry Pi Zero W
《数量制限: 10個まで》無線LAN、BLE(Bluetooth Low Energy)機能を搭載したRaspberry Pi Zeroです。Raspberry Pi Zeroは、小型化のためピンヘッダは無く、映像出力はminiHDMI、USB機器はmicroB端子(OTG)に接続します。カメラ用のコネクタも他Raspberry Piより小さなものが搭載されています。

 

どうしても割安でという事なら、海外通販になりますがPayPalも使えるPimoroniあたりがおススメです。 私はいつもPimoroniで買ってますが、一番安い発送方法でも1~2週間で手元に届きます。

Raspberry Pi Zero W
A tiny, single board computer with wireless and Bluetooth connectivity, perfect for embedded Internet of Things projects. Also available with pre-soldered headers!

 

Piカメラは敢えて純正は使いません。 そう、Piカメラは敢えて互換品を使います。

何故かというと、純正PiカメラをPi Zeroに繋ぐには別売のPi Zero専用フレキの購入が必要(Pi ZeroのカメラI/Fコネクタが特殊な為)となっており、コレがまた異常に長いのです。

参考までに、以前作ったPi Zeroカメラシステムはこの純正Piカメラとこの長いフレキを使ってます。リンク先画像見ると分かりますが、無駄にフレキ長いですよね??(^^;)

 

更に言うと、最近売られてるRaspberryPi財団公式のPi Zeroケースには短いバージョンのPi Zero用カメラフレキが付属しており、とてもコンパクトに純正Piカメラが収まります。

なら、公式Pi Zeroケースで良いじゃんという話もありますが、この公式ケースに合わせて使うとカメラの角度が完全に固定されてしまうという使い難さも一緒に付いてきますので、今回は却下しております。

 

ということで、出来るだけ小さく収めたい関係上、このミニカメラモジュールというPimoroni製の互換Piカメラ商品を使います。

あ、勿論、フレキ込みになるので、純正Piカメラよりとてもお安く買えるというメリットも大きいです♪

 

Amazonでも取扱ありますね。ちと高いけど。

Amazon.co.jp: Raspberry Pi Zero Camera Module - ミニ カメラ モジュール for Pi Zero : 家電&カメラ
Amazon.co.jp: Raspberry Pi Zero Camera Module - ミニ カメラ モジュール for Pi Zero : 家電&カメラ

 

個人的には、Pi Zero Wと一緒にPimoroniで直接買うのをおススメします。

Camera Module for Raspberry Pi Zero
This minimal camera for the Pi Zero (or Pi Zero W) is perfect for small camera projects where space is at a premium.

ちなみに、NoIRタイプが赤外線カメラ仕様です。

今回の用途では普通のヤツ(NoIRじゃない方)で良いと思いますが、お好きな方を選んでください。

 

あ、そうそう、純正Piカメラでもソフトウェア的には問題なく動きます。はい。

ただ、この記事中で公開しているケースは互換カメラ用となっていますので入りません。

オリジナルでケース起こすぞ!!という気概のある方は、純正で揃えてみるのも良いかもしれません。

 

microSDカードは信頼?の東芝製 8GBです。

なぜ8GBかは・・・前回記事でも触れましたが、イメージバックアップする時に小さい容量の方が良いという考えからです。

 

有線LAN USBアダプタ

物ぐさ太郎として、今回もキーボード・モニタレスでセットアップする関係上、最初は有線LANベースで作業を行います。

Pi Zeroで遊ぶなら有線LANアダプタくらい持っておいても損はないと思いますので、紹介しておきますね。

ちなみに、USB HUBタイプなら、作業途中で無線LAN USBアダプタが正しく動いているかを差し替えずに一緒に確認出来るので、オススメです。

私が使ってるのはコレ。USB3.0対応な上コンパクトなのでノートPCのお供にも使えるので便利です。(USB3.0対応ですが、Piで認識してくれました )

尚、有線LAN USBアダプタは、お使いのルーターのDHCP機能でMACアドレスからIP割り当てしておきましょう。

IP指定しない場合は、Pi ZeroへHDMIモニタを繋いでコマンドラインでIP取得する必要が出ますので、とても面倒です。 なので、本記事上では、IPアドレスが事前に分かっている物としています。 悪しからずご了承ください。

 

microUSBホスト変換ケーブル

Pi ZeroへUSBアダプタ機器を繋ぐのに必要です。

通常のホスト変換ケーブルも良いのですが、超小型のホスト変換アダプタだと、よりPi Zeroの小ささを活かせます。 凄くミニマム感が出ますので個人的にはお勧めです。

但し、この超小型ホスト変換アダプタを使うと、給電用のmicroUSBケーブルと若干干渉しますので、注意が必要です。 給電用microUSBケーブルにはL型タイプを使った方が良いでしょう。 ※L型の向きに注意です!逆向きだと余計に干渉します

私が使ってるのはコチラ↓です。 30cm、91cm、1.8mと幾つかのケーブル長が選べますので、お好みに合わせてチョイスしましょう。

対象RASPBIAN: STRECTH LITE

2017年8月のメジャーバージョンアップで登場した最新RASPBIANのSTRECTH LITEを使います。

事前に公式↓からダウンロードしておいてください。

302 Found

尚、9/18時点では9/7付け版が最新でした。

 

3Dプリンタ制御用ソフトウェア: OctoPrint

OctoPrint」というその筋では非常に有名なオープンソースソフトウェアを使います。(無料で使えますが、気に入ったなら開発者へ寄付して先々の進化の糧にして貰いましょう♪

この「OctoPrint」とラズパイ用OSまで丸ごとパッキングされたインストールイメージが、「OctoPi」という名前で公開されています。

Download & Setup OctoPrint
Learn how to setup OctoPrint using the preinstalled OctoPi image for Raspberry Pi, or how to install from source on Windows, Linux and Mac.

 

ただ、タイミングが悪かったのか、9/18時点ではメジャーバージョンアップされたSTRETCHではなく、まだ旧版のJESSIEが使われている様です。

よって、今回は「OctoPi」は使わず、普通にコマンドラインで「OctoPrint」をインストールすることにしております。

 

作業概要

大雑把な流れはこんな感じです。

  1. microSDカードへRASPBIAN STRETCH LITEを書き込む
  2. 有線LANでSSH接続して初期設定
  3. WiFi環境設定
  4. セキュリティ設定
  5. OctoPrintのインストール
  6. MJPG-Streamerをインストール
  7. OctoPrintの設定
  8. 専用ケースのプリントと設置

 

専用ケースのプリントを除いて、所用時間は2時間掛かってないと思います。

あ、専用ケースのプリントを事前に行っておくのはアリだと思いますので、しっかり下準備して進める方は是非そうして下さい。 STLデータはこの記事の後ろの方にあります。

 

尚、今回も当然の様に、物ぐさ太郎の矜持として、キーボード、モニタレスでセットアップ作業しております。

なので、事前に有線LANアダプタのIPアドレス、無線LANドングルGW-450D2のIPアドレスは把握しておく必要が有ります。 ルーターなどで、MACアドレスからIPを固定割り当てする様にしておけば問題ないでしょう。

 

では、作業を始めましょう。

 

microSDカードへRASPBIAN STRETCH LITEを書き込む

イメージファイルの書き込み

公式からダウンロードしたRASPBIANをmicroSDカードへ書き込みます。

 

私は、イメージ書き込みには「Win32DiskImager」というアプリを使っておりますが、使用方法が分からない場合は、コチラ↓を参考に。

RaspberryPi3をモニター・キーボードレスセットアップしてみた
さて、ケースも無事出来ましたので、RaspberryPi3のセットアップを行おうと思います。いつもは、RaspberryPi用にHDMIモニタとUSBドングル付きのコードレスキーボード&マウスを用意するのですが、今回は敢えてモニタもキーボードもマウスも用意せず、何も無しのイキナリPCからの遠隔だけでセットアップしてみようと思います。(単に物ぐさなだけw)

 

SSH接続の為の事前準備

最近のRASPBIANでは、そのままだとSSH接続が使えない状態になっています。(セキュリティ対策の一環??)

コチラによると、microSDカードの/boot/直下にsshという名前で拡張子無しの空ファイルを作っておけば、RaspberryPiで起動させた際に自動的にSSH接続が有効になるみたいなので、PCから外す前にファイルを作っておきましょう。

 

有線LANでSSH接続して初期設定

有線LANを繋いで起動させ、PCからSSH接続する

先程イメージファイルを書き込んだmicroSDカードを対象のPi Zeroへセットし、有線LANアダプタを繋いで、有線LANも繋いで起動させます。

写真では裸のまま互換Piカメラまで繋いでセットアップしてますが、剥き出しが不安な方は、先にケースを用意してから行ってください。

 

事前に判明している有線LANのIPアドレスに対し、PCからTera TermなどのターミナルソフトでSSH接続します。(正しいIPアドレスで、先のSSH有効化処置を行ってあれば、ちゃんと繋がる筈です)

ターミナルソフトが分からない方は、コチラ↓を参考に。

RaspberryPi3をモニター・キーボードレスセットアップしてみた
さて、ケースも無事出来ましたので、RaspberryPi3のセットアップを行おうと思います。いつもは、RaspberryPi用にHDMIモニタとUSBドングル付きのコードレスキーボード&マウスを用意するのですが、今回は敢えてモニタもキーボードもマウスも用意せず、何も無しのイキナリPCからの遠隔だけでセットアップしてみようと思います。(単に物ぐさなだけw)

 

初期設定を行う

SSH接続で初期ユーザー「pi」でログインしているものとします。

 

下記コマンドで初期設定を行います。

$ sudo raspi-config

 

下記の項目を修正してください。

 

[Change User Password]

「pi」ユーザーのパスワードをデフォルトのまま使うのは、セキュリティリスクとなります。

後ほど、ユーザー名を「pi」から変更する作業なども行いますが、初期工程は「pi」ユーザーで進めますので、最初にデフォルトパスワードを変更しておきましょう。

 

[Localisation Options] ->[Change Locale]

「en_us.UTF-8」「ja_jp.UTF8」「ja_jp.EUC-JP」を追加して、

default system localを「ja_ja.UTF8」に変更します。

 

[Localisation Options] ->[Change Timezone]

「Asia」→「Tokyo」を選択。

 

[Localisation Options] ->[Change WiFi Country]

「JP Japan」を選択。

 

[Interfacing Options] ->[P1 Camera]

Pi Camera I/Fを使いますのでEnabelにして下さい。

 

以上の項目を修正したら、Finishを選んで再起動しましょう。

 

一通りアップデートを掛ける

再起動後、もう一度「pi」ユーザーでSSH接続します。(パスワード変更した場合は新しいパスワードを入れて下さい)

 

まずは、下記コマンドで一通りアップデートをしておきます。

$ sudo apt-get update
$ sudo apt-get -y dist-upgrade
$ sudo rpi-update

 

rebootを促されるので、一応再起動しておきましょう。

$ sudo reboot

 

WiFi環境設定

Pi Zero WはWiFi内蔵ですので、2.4GHz(801.11bgn)なWiFiへ繋ぐ事が出来ます。

 

まずはPi Zero WのMACアドレスを確認しましょう。

$ ifconfig
wlan0の項目にあるMACアドレスを確認し、ルーターなどでDHCPでIPアドレスを割り当ててておきましょう。

 

ネットワーク設定を行う

繋ぎたい無線LANの「SSID」と「パスフレーズ」を用意し、下記コマンドを実行します。(赤字は自身の環境に置き換えて実行してください)
$ sudo sh -c 'wpa_passphrase SSID パスフレーズ >> /etc/wpa_supplicant/wpa_supplicant.conf'

尚、このwpa_passphraseコマンドは、パスフレーズを暗号化してくれるのは良いのですが、何故か暗号化されてない平文のパスフレーズをそのまま併記してくれるとても親切且つ危険なコマンドなので、作成された「wpa_supplicant.conf」ファイルの平文部分を削除しておいた方が良いです。

 

なので、エディタで平文部分だけ削除します。
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
#psk=”xxxxx”の行を削除して、上書き保存します。

 

「/etc/network/interfaces」に追記します。
$ sudo vi /etc/network/interfaces
私は下記だけ追記しています。 環境によってはステルス設定など色々あるかと思いますので、お好みに合わせて編集してください。
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

 

以上で設定完了です。

 

一旦、シャットダウンさせます。
$ sudo shutdown -h now

 

有線LANアダプタを外し、Pi Zero Wの無線LAN IPアドレスに対しSSH接続してみましょう。

(基板剥き出しだけど、ケーブル減ってスッキリ!!)

 

上手く接続出来たら、続いてセキュリティ設定を行います。

 

セキュリティ設定

最近はRaspberryPiを狙ったハッキングなども行われている様ですので、幾つかの対策を行っておきます。

諸々インストールした後に、ユーザー名変更したりすると、上手く動かなくなることが多いので、OctoPrintのインストール前に行ってます。

 

rootパスワード設定

初期状態では未設定なので、rootパスワードを設定しておきましょう。
$ sudo passwd root
ルート(管理者権限)の新しいパスワードを入力しましょう。

 

ユーザー名「pi」をオリジナルのユーザー名へ変更

「pi」ユーザーを削除して、新しいユーザーを追加でも良いのですが、piフォルダには色々なモノが入っている様で、経験上不都合が起こることが多いです。
なので、「pi」ユーザーの削除ではなく、ユーザー名の変更で対処することにします。

 

まず、SSHのコンフィグファイルを編集して、rootでのログインを可能にします。
$ sudo vi /etc/ssh/sshd_config
下記を1行追加します。(コメントアウトされてる分はそのままでOK)
PermitRootLogin yes
編集後、上書き保存します。

 

SSHサービスを再起動させます。
$ sudo service ssh restart

 

「pi」ユーザからログアウトします。
$ exit

 

改めて、SSH接続し、今度はユーザー名「root」でログインします。
パスワードは先程設定したモノを入力しましょう。

 

ログイン出来たら、ユーザー名「pi」を新しいユーザ名へ変更します。(自身のユーザー名に合わせて、赤字の部分を差し替えて実行して下さい)
# usermod -l newuser pi
# usermod -d /home/newuser -m newuser
# groupmod -n newuser pi

 

続いて、先程編集したSSHのコンフィグファイルを元に戻し、rootでのログインを不可にします。
# vi /etc/ssh/sshd_config
先程追加した下記1行を削除します。
PermitRootLogin yes
編集後、上書き保存します。

 

SSHサービスを再起動させます。
# service ssh restart

 

「root」ユーザからログアウトします。
# exit

 

改めて、SSH接続し、「root」と「pi」でログイン出来なくなっていることを試しておきましょう。
続いて、新しく作ったユーザー名でログイン出来ることを確認しておきましょう。パスワードは「pi」ユーザーの時に変更したままでOKです。

 

続いて、SSHのポート番号を変更・・・しても良いのですが、スキャンすりゃ分かってしまうということなので、そのままでもアリでしょう。 お好みにあわせて実施して下さい。

 

以上で、取り敢えずここでご紹介する最低限のセキュリティ対策はここまでです。 もっと細かく対策したい場合は、色々調べてみてください。

 

OctoPrintのインストール

基本は公式のセットアップ手順に従いますが、英語サイトですので、ここに手順を書いておきます。

Python2.7と関連パッケージのインストール

下記コマンドを実行します。

$ cd ~
$ sudo apt-get install python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential

多分、さっき行ったセキュリティ対策(rootパスワード設定)のせいで、sudoコマンドを使うと警告メッセージと共にパスワード要求されると思いますので、パスワードを入れて実行してください。

暫し待たされます。

 

OctoPrintのインストール

下記コマンドを実行します。

$ git clone https://github.com/foosel/OctoPrint.git
$ cd OctoPrint
$ virtualenv venv
$ ./venv/bin/pip install pip --upgrade
$ ./venv/bin/python setup.py install

暫し待たされます。

 

続いて、.octoprintディレクトリを作成。

$ mkdir ~/.octoprint

 

3Dプリンタの制御の為にシリアルポートにアクセス出来る様に、ユーザー権限にdialoutとttyを追加します。(piユーザを別なユーザー名に変更している場合は、赤字を新しいユーザー名に読み替えて実行して下さい)

$ sudo usermod -a -G tty pi
$ sudo usermod -a -G dialout pi

 

OctoPrint自動起動の設定

ブート後にOctoprintが自動起動される様に設定します。

 

まずは、initスクリプトファイルを関係フォルダへコピーします。

$ sudo cp ~/OctoPrint/scripts/octoprint.init /etc/init.d/octoprint
$ sudo chmod +x /etc/init.d/octoprint
$ sudo cp ~/OctoPrint/scripts/octoprint.default /etc/default/octoprint

 

/etc/default/octoprintを修正します。

$ sudo vi /etc/default/octoprint

DAEMONの先頭#を削除してコメントアウトを解除します。(piユーザを別なユーザー名に変更している場合は、赤字を新しいユーザー名に読み替えて実行して下さい)

OCTOPRINT_USER=pi
DAEMON=/home/pi/OctoPrint/venv/bin/octoprint

 

自動起動スクリプトのシンボリックリンクを作成します。

$ sudo update-rc.d octoprint defaults

 

sudoする度にパスワードを要求される様になっている場合は、/etc/sudoers.d/octoprint-shutdownにルールを追加します。

$ sudo vi /etc/sudoers.d/octoprint-shutdown

下記を追加します。(piユーザを別なユーザー名に変更している場合は、赤字を新しいユーザー名に読み替えて実行して下さい)

pi ALL=NOPASSWD: /sbin/shutdown

 

OctoPrintからシャットダウン出来る様に修正

最近のOctoPrintでは、ブラウザ上からアクセスするとシャットダウンなどのコマンドが使えなくなっている様です。

いちいちSSH接続してシャットダウンするのは面倒ですので~/.octoprint/config.yamlを編集してコマンドを追加します。

$ sudo vi ~/.octoprint/config.yaml

以下を追加します。(新規ファイルの場合はそのままコピペしてセーブ)

system:
 actions:
 - name: Shutdown
 command: sudo shutdown -h now
 action: shutdown
 confirm: You are about to shutdown the system.
 - name: Reboot
 command: sudo shutdown -r now
 action: reboot
 confirm: You are about to reboot the system

尚、このconfig.yamlファイルはスペースが重要とのこと。スペースが間違っていると、Octoprintが上手く動かなくなることがある様です。 編集時には気を付けましょう。

 

MJPG-Streamerをインストール

Pi CameraをOctoPrintで扱うにあたって、MJPG-Streamerが必要になります。

MJPG-Streamerのインストール

別途インストールが必要なので、下記コマンドでインストールします。

$ cd ~
$ sudo apt-get install subversion libjpeg8-dev imagemagick libav-tools libv4l-dev cmake
$ git clone https://github.com/jacksonliam/mjpg-streamer.git
$ cd mjpg-streamer/mjpg-streamer-experimental
$ export LD_LIBRARY_PATH=.
$ make

因みに、Pi Cameraを使う場合はMJPG-Streamerのオプションを別途コンパイルしないといけないみたい。(それでmakeしてる訳です)

 

OctoPrintにビデオストリーム開始・停止メニューを用意

Octoprint内からmjpeg-streamerを起動したり停止したりさせる為の2つのスクリプトファイルを作成します。
まずは、スクリプト「webcam」を作成します。(piユーザを別なユーザー名に変更している場合は、赤字を新しいユーザー名に読み替えて実行して下さい)

$ sudo mkdir /home/pi/scripts
$ sudo vi /home/pi/scripts/webcam

次のように記述します。(piユーザを別なユーザー名に変更している場合は、赤字を新しいユーザー名に読み替えて実行して下さい)

#!/bin/bash
# Start / stop streamer daemon

case "$1" in
 start)
 /home/pi/scripts/webcamDaemon >/dev/null 2>&1 &
 echo "$0: started"
 ;;
 stop)
 pkill -x webcamDaemon
 pkill -x mjpg_streamer
 echo "$0: stopped"
 ;;
 *)
 echo "Usage: $0 {start|stop}" >&2
 ;;
esac

以上の様に記述したら、保存します。

 

続いて、スクリプト「webcamDaemon」を作成します。(piユーザを別なユーザー名に変更している場合は、赤字を新しいユーザー名に読み替えて実行して下さい)

$ sudo vi /home/pi/scripts/webcamDaemon

次のように記述します。(piユーザを別なユーザー名に変更している場合は、赤字を新しいユーザー名に読み替えて実行して下さい)

#!/bin/bash

MJPGSTREAMER_HOME=/home/pi/mjpg-streamer/mjpg-streamer-experimental
MJPGSTREAMER_INPUT_USB="input_uvc.so"
MJPGSTREAMER_INPUT_RASPICAM="input_raspicam.so"

# init configuration
camera="auto"
camera_usb_options="-r 640x480 -f 10"
camera_raspi_options="-fps 10"

if [ -e "/boot/octopi.txt" ]; then
 source "/boot/octopi.txt"
fi

# runs MJPG Streamer, using the provided input plugin + configuration
function runMjpgStreamer {
 input=$1
 pushd $MJPGSTREAMER_HOME
 echo Running ./mjpg_streamer -o "output_http.so -w ./www" -i "$input"
 LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www" -i "$input"
 popd
}

# starts up the RasPiCam
function startRaspi {
 logger "Starting Raspberry Pi camera"
 runMjpgStreamer "$MJPGSTREAMER_INPUT_RASPICAM $camera_raspi_options"
}

# starts up the USB webcam
function startUsb {
 logger "Starting USB webcam"
 runMjpgStreamer "$MJPGSTREAMER_INPUT_USB $camera_usb_options"
}

# we need this to prevent the later calls to vcgencmd from blocking
# I have no idea why, but that's how it is...
vcgencmd version

# echo configuration
echo camera: $camera
echo usb options: $camera_usb_options
echo raspi options: $camera_raspi_options

# keep mjpg streamer running if some camera is attached
while true; do
 if [ -e "/dev/video0" ] && { [ "$camera" = "auto" ] || [ "$camera" = "usb" ] ; }; then
 startUsb
 elif [ "`vcgencmd get_camera`" = "supported=1 detected=1" ] && { [ "$camera" = "auto" ] || [ "$camera" = "raspi" ] ; }; then
 startRaspi
 fi

 sleep 120
done

以上の様に記述したら、保存します。

 

作成した2つのスクリプトファイルに実行権限を与えます。(piユーザを別なユーザー名に変更している場合は、赤字を新しいユーザー名に読み替えて実行して下さい)

$ sudo chmod +x /home/pi/scripts/webcam
$ sudo chmod +x /home/pi/scripts/webcamDaemon
$ sudo chown pi:pi /home/pi/scripts
$ sudo chown pi:pi /home/pi/scripts/webcam
$ sudo chown pi:pi /home/pi/scripts/webcamDaemon

 

先程の~/.octoprint/config.yamlを編集してWebカメラデーモン操作コマンドを追加します。

$ sudo vi ~/.octoprint/config.yaml

system: actions:セクションに以下を追加します。(piユーザを別なユーザー名に変更している場合は、赤字を新しいユーザー名に読み替えて実行して下さい)

 - name: Start video stream
 command: /home/pi/scripts/webcam start
 action: streamon
 confirm: false
 - name: Stop video stream
 command: /home/pi/scripts/webcam stop
 action: streamoff
 confirm: false

※補足: actions: []となってた場合は、「 []」を削除しましょう。

 

これでOctoPrintとMJPG-Streamerのインストールは完了です。

 

OctoPrintの設定

シャットダウンさせてから3DプリンタのUSBケーブルを接続し、3Dプリンタを起動させた後、Pi Zero Wの電源を入れます。

 

$ sudo shutdown -h now

さあ、いよいよご対面!

OctoPrintへPCブラウザからアクセスしてみましょう。

 

アクセス先は「ラズパイのIPアドレス:5000」です。

Pi Zero Wだと起動にちょっと時間がかかります。(数分レベル)

起動してしまえば普通に使えるので、最初だけ儀式と思いましょう。

 

セットアップウィザードでの設定項目

ブラウザでアクセスすると、初回起動の時のみ下記の様なセットアップウィザードが立ち上がります。
指示に従って、自分の3Dプリンタに合わせた設定を行います。

 

Nextを押すと、次にユーザーアクセス制限の画面になります。

お好みに合わせて制限掛けるか選択し、Nextを選びます。

 

次の画面ではスライサーのCuraEngineのセットアップを行います。

OctoPrintではスライサーとしてPi Zero上でCuraEngineを使うことも出来るんですが、Pi Zeroでスライス処理させても重たいだけだと思いますので、私は使ってません。

私はPCのスライサーSimplify3Dでスライス処理してから、G-CodeファイルをOctoprintに渡す様にしています。(ちなみに、Simplify3Dは有料のスライサーソフトですが、非常に優秀なのでオススメ♪)

ということで、OctoPrintのスライサーは使わないので、そのままNext。

 

次に接続する3Dプリンタの基本情報を入力していきます。

Generalタブのnameの項にプリンタ名称を入れます。(あ、idbox!じゃなくてBS01+になってる!? 気にしない気にしないw)

うっかりNextしてしまわない様に。

このSet up your printer profileでは横にタブがありまだ設定項目があります。(尚、うっかりNextしても後からprinter profileの修正は可能ですw)

 

Print bed & build volumeタブに3Dプリンタに合わせた設定値を入れていきます。

素のままのidbox!の場合は、

  • Form Factor(方式): Rectangular
  • Origin(原点): Lower Left
  • Heat Bed(ヒートベッド有り無し): チェック無し
  • Width(X): 150 mm
  • Depth(Y): 130 mm
  • Height(Z):  100 mm

になります。

ヒートベッド付きのBS01+のシングルノズルモデルの場合は、

  • Form Factor(方式): Rectangular
  • Origin(原点): Lower Left
  • Heat Bed(ヒートベッド有り無し): チェック有り
  • Width(X): 150 mm
  • Depth(Y): 130 mm
  • Height(Z):  102 mm

になります。

使う3Dプリンタに合わせて設定しましょう。

 

続いて、Axesタブに移動します。※添付画面は設定ミスってますので参考にしない様に!

idbox!、BS01+共に

  • X: 4800 mm/min
  • Y: 4800 mm/min
  • Z: 200 mm/min 、 Invert controlにチェック
  • E: 1200 mm/min

になります。 使う3Dプリンタに合わせて設定しましょう。

 

続いて、Hotend & extruderタブに移動します。

お使いのプリントノズル穴径とエクストルーダ―の数を入力します。

idbox!は0.4mmノズル装備でシングルノズルなので、

  • Nozzle Diameter: 0.4 mm
  • Number of Extruders: 1

と設定しました。

因みに、私のBS01+は0.3mmノズルを装着してるので、添付画面上では0.3mmとなっています。 使う3Dプリンタに合わせて設定しましょう。

ここでようやくNextを押します。

 

次の画面。

特に設定項目はありませんので、そのままNext。

 

次も同様。

特に設定項目はありませんので、そのままNext。

 

次の画面はカメラ関係のセッティング項目ですが、後ほど設定し直すので、ここではスルーします。

なので、そのままNext。

 

ようやくFinishです。

Finishを選択。

 

ようやくOctoPrintの通常画面になりました。

尚、シャットダウンやリブートは右上の電源アイコンから行えます。

 

3Dプリンタとの通信設定

Connectを押して3Dプリンタへ接続してみます。

 

コレで繋がる筈ですが、通信設定が初期値のままだと、ボーレート設定などが合わずに不都合がありますので、修正しておきます。 この状態↓が初期の状態。

 

なので、一度Disconnectして、接続設定を修正します。

画面の様に、Serial PortやBaudrate、Auto-connect on server startupの設定を行い、Save connection settingsにチェックを入れてもう一度ConnectすればOKです。

 

カメラ設定

右上のスパナマークを押し、OctoPrint Settingsを表示させ、Webcam & Timelapseの設定をラズパイのIPアドレスに合わせて修正します。

この記事の流れで設定してる場合は、下記の様に入力してください。(ポート番号の変更などカスタムされてる場合は、併せて修正してください)

  • Stream URL: http://ラズパイのIPアドレス:8080/?action=stream
  • Stream aspect ratio: 4:3
  • Snapshot URL: http://ラズパイのIPアドレス:8080/?action=snapshot
  • Path to FFMPEG: /usr/bin/avconv

 

一度Saveしてから、右上の電源ボタンより、Start video streamを実行します。

 

これで、基本画面のControlタブを移動するとカメラの映像が映ってる筈です。

既にお分かりだと思いますが、Stop video streamで映像配信が止まります。

何故こんな設定になっているかというと、プリントの映像記録を行う必要性ってそんなに無いので、出来るだけSDアクセス量を減らしたい(SD寿命を延ばしたい)という考えがベースにあります。 また、常に映像配信してる状態はちょっと気持ち悪いという理由も。。

使いたい時に、PCのブラウザ越しでStart video streamすればいつでも状況監視する事が出来ますので、実害はないと考えてます。

OctoPrintを起動させる度に、毎回Start video streamをするのは面倒という方は、公式のセットアップ手順を見て設定してみてください。

 

タイムラプス撮影などしたい場合は、Timelapseタブで設定が可能です。

此方は、お好みに合わせて設定してください。

 

基本的な使い方

通常画面の右側(添付画面の緑枠付近)にスライス済みのG-Codeファイルをドラッグアンドドロップすると、ファイルリストに追加されます。

後は、各ファイルのプリンタアイコン(添付画面の青丸)をクリックすればプリントスタートです。

画面が狭い場合は、各タブ先頭(添付画面の赤丸)をクリックすれば、その項目を最小化出来ます。

などなど、ぶっちゃけとても分かりやすい画面構成になってますので、見たままのイメージで扱えると思います。

 

OctoPrintのアップデート【2018/03/20追記】

先日、OctoPrint 1.3.6がリリースされた際に、ASAP(as soon as possible:出来るだけ速やかに)の文言が付いた公式案内が出ました。

セキュリティ対策のアップデートなどは出来るだけ速やかに行いたいものですね。

 

このブログでご紹介してる内容は、インストールイメージなOctoPi方式ではなく、マニュアルインストール方式なので、下記のやり方でアップデートを行いました。(先程のOctiPrint公式案内にもやり方が書かれてますが、自分への覚え書としてここにも記載しておきます)

 

OctiPrintマニュアルインストールのアップデート方法

赤字は自身のOctoPrintのインストールパスに置き換えて実行して下さい。

$ cd OctoPrint/
$ source venv/bin/activate
$ git pull
$ pip install .

 

一通り実行出来たら、再起動しましょう。

$ sudo reboot

 

再起動したら、ブラウザ越しにOctoPrintに繋いで、左下のVerを確認しましょう。

無事アップデートされました♪

 

初回起動時に設定ウィザードが立ち上がって、幾つかの新たな設定項目について設定を要求されましたが、以前設定した他の設定項目はちゃんと引き継がれている様です。

設定ウィザードらしき画面が出た時に、一瞬ドキッとしましたが、ホッとしました。(笑)

 

専用ケースのプリントと設置

専用ケースのダウンロードリンク

今回のオリジナル専用ケースの3Dデータ(STLファイル)はコチラ↓に置きました。

3Dプリント時の注意点と併せてご参照ください。

Pi Zero Wと互換Piカメラのケース for 3Dプリントサーバー(STLファイル)
このファイルの説明idbox!とBS01+向けの3Dプリントサーバー用として起こした、Pi Zero Wと互換Piカメラが収まる専用ケースのSTLデータです。※ご注意:RaspberryPi財団の公式データではありません。あくまでユーザーメイドの参考補助部品です。自己責任としてご利用願います。※ご利用前に、関係する下記記事を必ずご確認ください。※本記事内のファイルのライセンス、...【続きを読む】

 

専用ケース部のプリント

BS01+やidbox!であれば、全パーツまとめて一度でプリント出来ます。(サポート無しでも可の筈・・・)

 

プリント後にバリを取って並べてみます。 専用ケース部は合計4パーツですね。

あ、言い忘れてましたが、可動部を実現する為、M3×5のトラス小ネジが2本必要です。

Amazonでも扱いありますが、プライム対応だと結構お高いし量が多過ぎ。(^^;)

ホームセンターとかで手頃な量で売ってると思いますので、調達してみてください。

 

専用ケース組み立て

まずはM3×5のトラス小ねじ2本を使って、背面パーツを組み立てます。

ネジに付属してたワッシャーを締め過ぎ防止として間に挟み込んでます。(無くてもOK)

ネジはあまり強く締めるとネジ穴がバカになってしまいますので、慎重に締めましょう。

 

Pi Zero Wを互換Piカメラモジュールを接続した状態で、背面パーツに載せます。

 

続いて、正面パーツを嵌め込みます。

上手くプリント出来てればパッチンと噛み合わせして嵌る筈です。

横のmicroUSBやHDMIコネクタへケースが干渉して無いことを確認します。

うん、イイ感じ♪

下面にはmicroSDカードスロットが見える筈です。

指でつまんでmicroSDカードが出し入れできるか確認しましょう。

 

続いてカメラ可動部の確認です。

指でそおっと押して角度を付けてみます。ここは無理するとフレキ断線しますので慎重に!

そぉっとそぉっと。

この辺が限界角度の筈です。

回転軸をフレキ面と合わせてあるので、出来るだけフレキへ無理なテンションが掛からない様にはしたつもりですが、プリント状況によっては軸位置のばらつきはあり得ます。

正面パーツを片方だけ開けてみるとこんな感じになってます。

写真の右赤丸部分のフレキコネクタは非常に脆いです、カメラを無理に曲げると引き抜き方向のテンションが掛かりますので、無理は禁物です。

また、左緑丸部分にケースのバリなどが当たると可動部で抉って断線する危険もあります。バリ取りはしっかり行って下さい。

尚、互換Piカメラはロットによって部品の実装状態が違うものがある様です。今のところ、2種確認してますが、2種とも外観形状は共通みたいでこのケースに入れるには支障ありませんでした。

ただ、先々の変更でケースに収まらないモノが絶対現れないとは言い切れません。 その辺、悪しからずご了承下さいます様お願いします。

 

idbox!へ装備する

っとその前に、ホルダー部をプリントする必要が有ります。

初期にテストプリントした時の写真しかないのですが、右の2パーツがホルダー部品です。

こんな感じで専用ケースを装着します。パンツ履かせるイメージですね。(笑)

idbox!の右上辺りが収まり良いです。こんな感じですね。(写真サンプルが初期試作品になってます ご了承くださいませ)

後は、給電用のmicroUSBケーブルと、3DプリンタのUSBケーブルをmicroUSBホスト変換アダプタ越しに繋ぐと完成です。

完成形はこんな感じ。

起動させてOctoPrintでカメラ映像を確認し、角度を微調整しましょう。

イイ感じに収まるとこんな画像になります。

 

以上で完成です。 Let’s 3D Print!!

 

まとめ

・Pi Zero WとPi CameraにOctoPrintを使って、映像監視機能付きWiFi対応3Dプリントサーバーを超ミニマム構成で構築出来た!

・PCレスでプリントさせれるというのはとても快適!!

・idbox!の岡持ちの完成度が更に向上!!!(今はこんな感じ↓で電源さえあればどこでもプリントOKです♪)

 

 

 

 

Pi Zero W

microSD 8GB 東芝製

GW-450D2

USB3.0対応 有線LANアダプタ付きUSB HUB

超小型microUSBホスト変換アダプタ

microUSB 左向きL型ケーブル

「週刊マイ3Dプリンター」再刊行版


 

明成化学さんの高品質フィラメント 3D Prinstar ナチュラル

明成化学さんの高品質フィラメント 3D Prinstar ホワイト

明成化学さんの高品質フィラメント 3D Prinstar ブラック

コメント