USBストレージのみ対応機器全般(ANYCUBIC Photon / Photon-S等)をWiFi対応させる方法
2020/09/15
価値ある情報をユーザー視点で発信するブログ
2020/09/15
筆者は光造形式3Dプリンター、ANYCUBIC Photon-Sを使っています。
そのほかに所有するFDM式プリンターをすべてOctoPrintというソリューションでWiFi対応させ、PCのWebブラウザから遠隔操作ができるようになっているのと比較すると、ANYCUBIC Photon-SはUSBストレージのみ対応で、PCとの密な連携ができない点に不満を感じます。
PCで作ったデータはUSBストレージにコピーし、それを物理的にANYCUBIC Photon-Sに持っていかざるを得ないのです。
それがどうにも不満で調べていたところ、Raspberry Pi Zero Wを使ってANYCUBIC Photon / Photon-SをWiFi対応にする方法があるのを知って試してみました。
Raspberry Pi Zero WにはUSB Gadgetモードというものがあり、Raspberry Pi Zero WをあたかもUSB機器であるかのように振る舞わせることができます。(LinuxにあるUSB Gadget Driverを活用したものと思われます)
USB接続した機器からRaspberry Pi Zero WがUSBストレージとして見えるようにし、Raspberry Pi Zero Wを同時にファイル共有サーバ(Samba)としても機能させる。
これによって、Windows、macOSなどからファイル共有サーバとして機能するRaspberry Pi Zero Wにネットワーク越しにファイルをコピーすると、それがUSB接続した機器(Raspberry Pi Zero WのことをUSBストレージだと認識している機器)からも見えるようになるという仕組みです。
前述のページで公開されている起動ディスクイメージをMicro SDカードに書き込み、それを使ってRaspberry Pi Zero Wを起動するとまがりなりにも機能するのですが、ANYCUBIC Photon-Sの場合、USBストレージの中身が外的要因で書き換えられることを想定しておらず、ファイルリストを最新のものに更新する機能がないため、電源を切って入れ直すか、USBを抜き差しをしないとネットワーク越しにコピーした新しいファイルが見えず、画竜点睛を欠く状態です。
そこで、以下のページで紹介されているUSBストレージのリコネクトの処理を取り入れ……。
実用性を高めた起動ディスクイメージを作成しました。
黒い画面を一切見ることなく、これだけで使えます。
これを使うと、ANYCUBIC Photon-Sのように、USBストレージでのみ外界とのやりとりが可能な機器を、WiFi対応にできる可能性があります。
その導入方法を紹介します。
もくじ
macOS Mojaveで頑張っている人は、balenaEtcherの最新版が不調かもしれません。
筆者はバージョン1.5.54を使っています。
balenaEtcher使い方はすこぶる簡単で、
balenaEtcherで書き込みを終えたカードを一度PCから抜いて挿し直すと、「boot」というボリュームがPCにマウントされるはずです。
この中にある「wpa_supplicant.conf」をテキストエディタで編集します。
改行コードLFに対応したテキストエディタを使ってください。
中身は以下のようになっています。
country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="abcdefg" psk="1234567890" }
ssidとpskを、それぞれ自宅WiFiのSSIDとパスフレーズに書き換えて保存します。
「wpa_supplicant.conf」の編集を終えたらいよいよ起動です。
PCからMicro SDを取り出し、Raspberry Pi Zero Wにセット。
アダプタを介してHDMIケーブルを接続します(無論モニターも接続します)。
※起動する前にHDMIケーブルを接続しておかないと画面の表示が必要ないものと判断され、後からHDMIケーブルを接続しても画面が映りませんので注意してください。
Mini HDMI端子の隣のMicro USB端子を、ANYCUBIC Photon-SのUSB端子と接続し、ANYCUBIC Photon-Sの電源をオンにすることでRaspberry Pi Zero Wに給電(バスパワー)。
モニターにしばらく起動メッセージが流れ、WiFiへの接続がうまくいっていれば、最後に自宅のWiFiルーターから割り振られたIPアドレスが表示されます。
このIPアドレスを覚えておきます。
モニターが使えない場合は、Raspberry Pi Zero W起動前に自宅のWiFiルーターのDHCPリース状況を記録。
Raspberry Pi Zero W起動後にWiFiルーターのDHCPリースの状況を再度確認し、増えた機器がRaspberry Pi Zero Wなので、そのIPアドレスを覚えておきます。
自宅のWiFiルータのDHCPリースの項目を確認。
さっきメモしたRaspberry Pi Zero WのIPアドレスを探します。
自動割当になっているはずなので、それを手動割当にします。
これは筆者が使っているBUFFALOのWiFiルータでの設定です。
WiFiルータによっては新しく項目を作ってMACアドレスとIPアドレスを紐づけるような手順になっているかもしれません。
お手持ちのWiFiルータの取り扱い説明書のDHCPの項目を参照してください。
いずれにしてもIPアドレスが変わってしまわないようにDHCPから割り当てられるIPアドレスが固定されるように処置します。
固定されたIPアドレスが確認できたので、以降HDMIケーブルの接続は不要です。
ANYCUBIC Photon-SとはUSB接続を済ませていますので、Raspberry Pi Zero WがUSBストレージとして見えるようになっているはずです。
ただし、Gadget Modeが機能し、USBストレージとして機能するまでには電源投入後1分ぐらいかかります。
Raspberry Pi Zero W上で起動しているファイル共有サーバ(Samba)に接続します。
macOSの場合は、Command+Kで「サーバへ接続」ダイアログを表示し、「smb://192.168.1.xx」といった感じで接続先を指定し、ゲストユーザーとして接続します。
IPアドレスは、実際にはご自身のRaspberry Pi Zero Wに割り振られたものを指定します。
接続が完了すると「usb」というボリュームが見えるはずです。
ここにANYCUBIC Photon-Sへ転送したいファイルをコピーします。
コピー終了後、最大30秒経過した後でANYCUBIC Photon-Sの「Print」メニューからファイルを確認すると、PCから転送したファイルが見えているはずです。
既にファイルリストの画面を開いている場合は一度メインメニューに戻り、「Print」メニューに入り直します。
このような動作に起因して、反映までのタイムラグが生じています。
macOSで使えるAppleScriptで共有フォルダを開く処理は以下のようになります。
これをアプリケーションとして保存しておくと、一発で共有フォルダを開けます。
tell application "System Events" mount volume "smb://guest:guest@192.168.1.xx/usb" end tell property the_path : "/Volumes/usb/" set the_folder to (POSIX file the_path) as alias tell application "Finder" open the_folder activate end tell
アンマウント(イジェクト)は以下のようになります。
tell application "Finder" eject "usb" end tell
スクリプトエディタにペーストし、IPアドレスを書き換え、保存時、書き出し時に「アプリケーション」を選ぶと、実行可能なアプリケーションになります。
共有フォルダにファイル操作が認められると、3Dプリンタがプリント中であろうが擬似的にUSBストレージを抜いて挿し直す動作をやってしまうため、出力がそこで止まってしまうことでしょう。
プリントを開始する前にRaspberry Pi Zero Wとのネットワーク接続を切ることを徹底してください。
自分は操作していなくとも、OSが勝手に共有フォルダをスキャンしてメタデータを自動的に書き込むといったこともあり得ます。
ファイル操作の反映までコピー終了後から最大30秒の遅延が生じるため、いつ反映されるのかと気が急いてしまう人も少なくないと思われます。
そこで、USBストレージを抜いて挿し直すという疑似的な動作の終了時にLEDが点滅するように設定しておきました。
ファイル操作検知で擬似USBストレージのリコネクトが発生するまで最大30秒の遅延があるので、リコネクト発生時(つまりPhoton-Sのファイルリストに反映されたタイミング)でLEDを点滅させるようにしてみた。
— moyashi (@hitoriblog) September 13, 2020
これはPhoton-Sに限らずUSBストレージのみ対応という光造形機全部で使えるソリューション。 pic.twitter.com/qbuaCFh8yD
Raspberry Pi Zero WのGPIOの17番とGNDの間にLEDと抵抗をつないでおくと機能します。
LEDの点滅は/home/pi/notifysend.pyの実行によりますので、これを書き換えれば任意の通知処理に変更ができます。
筆者はPushoverでスマートフォンに通知を送っています。
Raspberry Pi Zero Wはバスパワーで動かすことを前提に説明してきました。
ANYCUBIC Photon-Sの電源を切ると当然Raspberry Pi Zero Wへの給電も断たれ、いわゆる電プチ状態になってしまいます。
電プチ運用だと、起動ディスクの中身が損傷する可能性があります。
そこで、押すとシャットダウンが行われるスイッチが接続できるように設定してあります。
また、Raspberry Pi Zero W側の準備が完了した時点で点灯し、シャットダウン完了直前に消灯するパイロットランプも接続できるように設定しました。
前出の「USBストレージを抜いて挿し直すという疑似的な動作の終了時に点滅するLED」も合わせると、ボタン一つにLEDが二つ接続できるようになっているわけです。
これを具体的な接続図に起こすと以下のようになります。抵抗は上図と同様220Ω程度です。
左のLEDが(1)のLEDで、右のLEDが(3)のパイロットランプ。
残るスイッチが、もちろんシャットダウン実行ボタンです。
横に四つ並べて配置したので、4ピンのQIコネクタでハーネスを作成して、LEDやボタンを接続するとよいかと思います。
ANYCUBIC Photon-Sの電源を切る前にシャットダウンボタンを0.5秒以上押し、パイロットランプが消えてから5秒後ぐらいにANYCUBIC Photon-Sの電源スイッチを切る、といった感じの使い方になります。
3Dプリンターで体裁を整えました。
手順上SSHでのログインは必要ありませんが、Raspberry Pi Zero Wへのログインアカウントは、デフォルトから変わっていません。参考までに記しておきます。
Password: raspberry
ssh pi@192.168.1.xx
Raspberry Pi Zero W上の/mnt/usb_shareのファイル操作を監視し、変化があればUSBストレージを抜いて挿し直すという疑似動作を実施しているので、Samba経由以外でもここにファイルをコピーできるのであれば、どんな方法を使ってもOKです。
例えば、scpでもいいわけです。
scp _hogehoge.photons pi@192.168.1.xx:/mnt/usb_share/
PC側の特定のフォルダにファイルが置かれたらscpで転送という自動処理も可能ですね。
先にマウントするという操作をせずに済みますし、先述の注意点にある轍を踏まずに済むことにもなります。
今回紹介したシステムは、ANYCUBIC Photon / Photon-S以外にもたくさんあると思われるUSBストレージのみ対応の光造形式低価格3DプリンターをWiFi対応にできる可能性があるものです。
試してみる価値は大いにあるといえるのではないでしょうか。