ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

USBストレージのみ対応機器全般(ANYCUBIC Photon / Photon-S等)をWiFi対応させる方法

      2020/09/15

How to make all usb storage devices compatible with wifi 00000

筆者は光造形式3Dプリンター、ANYCUBIC Photon-Sを使っています。

そのほかに所有するFDM式プリンターをすべてOctoPrintというソリューションでWiFi対応させ、PCのWebブラウザから遠隔操作ができるようになっているのと比較すると、ANYCUBIC Photon-SはUSBストレージのみ対応で、PCとの密な連携ができない点に不満を感じます。

PCで作ったデータはUSBストレージにコピーし、それを物理的にANYCUBIC Photon-Sに持っていかざるを得ないのです。

How to make all usb storage devices compatible with wifi 00022

それがどうにも不満で調べていたところ、Raspberry Pi Zero Wを使ってANYCUBIC Photon / Photon-SをWiFi対応にする方法があるのを知って試してみました。

Raspberry Pi Zero WにはUSB Gadgetモードというものがあり、Raspberry Pi Zero WをあたかもUSB機器であるかのように振る舞わせることができます。(LinuxにあるUSB Gadget Driverを活用したものと思われます)

How to make all usb storage devices compatible with wifi 00018

USB接続した機器からRaspberry Pi Zero WがUSBストレージとして見えるようにし、Raspberry Pi Zero Wを同時にファイル共有サーバ(Samba)としても機能させる。

これによって、Windows、macOSなどからファイル共有サーバとして機能するRaspberry Pi Zero Wにネットワーク越しにファイルをコピーすると、それがUSB接続した機器(Raspberry Pi Zero WのことをUSBストレージだと認識している機器)からも見えるようになるという仕組みです。

How to make all usb storage devices compatible with wifi 00017

前述のページで公開されている起動ディスクイメージをMicro SDカードに書き込み、それを使ってRaspberry Pi Zero Wを起動するとまがりなりにも機能するのですが、ANYCUBIC Photon-Sの場合、USBストレージの中身が外的要因で書き換えられることを想定しておらず、ファイルリストを最新のものに更新する機能がないため、電源を切って入れ直すか、USBを抜き差しをしないとネットワーク越しにコピーした新しいファイルが見えず、画竜点睛を欠く状態です。

そこで、以下のページで紹介されているUSBストレージのリコネクトの処理を取り入れ……。

実用性を高めた起動ディスクイメージを作成しました。

How to make all usb storage devices compatible with wifi 00021

  1. 起動ディスクイメージをWindows、macOSなどでMicro SDに書き込む
  2. Windows、macOSなどでWiFiのSSIDの設定をする
  3. Raspberry Pi Zero Wにセット
  4. 接続機器とUSBケーブルで接続

黒い画面を一切見ることなく、これだけで使えます。

これを使うと、ANYCUBIC Photon-Sのように、USBストレージでのみ外界とのやりとりが可能な機器を、WiFi対応にできる可能性があります。

その導入方法を紹介します。

実行に必要なもの

あれば望ましいもの

起動ディスクイメージのダウンロード

Raspberry Pi Zero W用の設定済み起動ディスクイメージ: usb-wifi.img.zip(548.2MB)

起動ディスクイメージのMicro SDカードへの書き込み

  1. ダウンロードしたusb-wifi.img.zipを解凍
  2. PCに、用意したMicro SDカードをUSBカードリーダーなどを介して挿入
    • How to make all usb storage devices compatible with wifi 00016
  3. balenaEtcher(Windows用、macOS用等が存在)を使ってMicro SDカードに書き込む

macOS Mojaveで頑張っている人は、balenaEtcherの最新版が不調かもしれません。

筆者はバージョン1.5.54を使っています。

balenaEtcher使い方はすこぶる簡単で、

How to make all usb storage devices compatible with wifi 00001

  1. 「Select image」ボタンで「usb-wifi.img」を指定
  2. 「Select target」ボタンは、Micro SDカードを挿入していれば、自動的に指定されるでしょう。そうでない場合は挿入したMicro SDカードを指定
  3. 後は「Flash!」ボタンを押すだけです

WiFiの設定

balenaEtcherで書き込みを終えたカードを一度PCから抜いて挿し直すと、「boot」というボリュームがPCにマウントされるはずです。

How to make all usb storage devices compatible with wifi 00008

この中にある「wpa_supplicant.conf」をテキストエディタで編集します。

How to make all usb storage devices compatible with wifi 00007

改行コードLFに対応したテキストエディタを使ってください。

中身は以下のようになっています。

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="abcdefg"
    psk="1234567890"
}

ssidとpskを、それぞれ自宅WiFiのSSIDとパスフレーズに書き換えて保存します。

Raspberry Pi Zero Wは5GHz帯に対応していないため、2.4GHz帯のSSIDを設定します。

用意した起動ディスクイメージでの起動とIPアドレスの確認

「wpa_supplicant.conf」の編集を終えたらいよいよ起動です。

PCからMicro SDを取り出し、Raspberry Pi Zero Wにセット。

How to make all usb storage devices compatible with wifi 00015

アダプタを介してHDMIケーブルを接続します(無論モニターも接続します)。

※起動する前にHDMIケーブルを接続しておかないと画面の表示が必要ないものと判断され、後からHDMIケーブルを接続しても画面が映りませんので注意してください。

Mini HDMI端子の隣のMicro USB端子を、ANYCUBIC Photon-SのUSB端子と接続し、ANYCUBIC Photon-Sの電源をオンにすることでRaspberry Pi Zero Wに給電(バスパワー)。

How to make all usb storage devices compatible with wifi 00026

モニターにしばらく起動メッセージが流れ、WiFiへの接続がうまくいっていれば、最後に自宅のWiFiルーターから割り振られたIPアドレスが表示されます。

How to make all usb storage devices compatible with wifi 00013

このIPアドレスを覚えておきます。

モニターが使えない場合は、Raspberry Pi Zero W起動前に自宅のWiFiルーターのDHCPリース状況を記録。

Raspberry Pi Zero W起動後にWiFiルーターのDHCPリースの状況を再度確認し、増えた機器がRaspberry Pi Zero Wなので、そのIPアドレスを覚えておきます。

DHCPリースを手動割当に変更

自宅のWiFiルータのDHCPリースの項目を確認。

さっきメモしたRaspberry Pi Zero WのIPアドレスを探します。

自動割当になっているはずなので、それを手動割当にします。

How to make all usb storage devices compatible with wifi 00020

これは筆者が使っているBUFFALOのWiFiルータでの設定です。

WiFiルータによっては新しく項目を作ってMACアドレスとIPアドレスを紐づけるような手順になっているかもしれません。

お手持ちのWiFiルータの取り扱い説明書のDHCPの項目を参照してください。

いずれにしてもIPアドレスが変わってしまわないようにDHCPから割り当てられるIPアドレスが固定されるように処置します。

固定されたIPアドレスが確認できたので、以降HDMIケーブルの接続は不要です。

How to make all usb storage devices compatible with wifi 00024

ファイルの転送

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」といった感じで接続先を指定し、ゲストユーザーとして接続します。

How to make all usb storage devices compatible with wifi 00006

IPアドレスは、実際にはご自身のRaspberry Pi Zero Wに割り振られたものを指定します。

接続が完了すると「usb」というボリュームが見えるはずです。

How to make all usb storage devices compatible with wifi 00004

ここにANYCUBIC Photon-Sへ転送したいファイルをコピーします。

How to make all usb storage devices compatible with wifi 00002

コピー終了後、最大30秒経過した後でANYCUBIC Photon-Sの「Print」メニューからファイルを確認すると、PCから転送したファイルが見えているはずです。

How to make all usb storage devices compatible with wifi 00009

既にファイルリストの画面を開いている場合は一度メインメニューに戻り、「Print」メニューに入り直します。

How to make all usb storage devices compatible with wifi 00010

30秒毎に新しいファイル操作があったかどうかを確認し、ファイル操作がなされていたら、一度USBストレージを抜いて挿し直すという動作を疑似的に行なっています。

このような動作に起因して、反映までのタイムラグが生じています。

AppleScriptを使った共有フォルダへのアクセス

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が勝手に共有フォルダをスキャンしてメタデータを自動的に書き込むといったこともあり得ます。

LEDによる通知

ファイル操作の反映までコピー終了後から最大30秒の遅延が生じるため、いつ反映されるのかと気が急いてしまう人も少なくないと思われます。

そこで、USBストレージを抜いて挿し直すという疑似的な動作の終了時にLEDが点滅するように設定しておきました。

How to make all usb storage devices compatible with wifi 00025

Raspberry Pi Zero WのGPIOの17番とGNDの間にLEDと抵抗をつないでおくと機能します。

How to make all usb storage devices compatible with wifi 00023

How to make all usb storage devices compatible with wifi 00011

LEDの点滅は/home/pi/notifysend.pyの実行によりますので、これを書き換えれば任意の通知処理に変更ができます。

筆者はPushoverでスマートフォンに通知を送っています。

パイロットランプとシャットダウンボタン

Raspberry Pi Zero Wはバスパワーで動かすことを前提に説明してきました。

ANYCUBIC Photon-Sの電源を切ると当然Raspberry Pi Zero Wへの給電も断たれ、いわゆる電プチ状態になってしまいます。

電プチ運用だと、起動ディスクの中身が損傷する可能性があります。

そこで、押すとシャットダウンが行われるスイッチが接続できるように設定してあります。

また、Raspberry Pi Zero W側の準備が完了した時点で点灯し、シャットダウン完了直前に消灯するパイロットランプも接続できるように設定しました。

前出の「USBストレージを抜いて挿し直すという疑似的な動作の終了時に点滅するLED」も合わせると、ボタン一つにLEDが二つ接続できるようになっているわけです。

  1. USBストレージを抜いて挿し直すという疑似的な動作の終了時に点滅するLED
  2. シャットダウン実行ボタン
  3. パイロットランプ

これを具体的な接続図に起こすと以下のようになります。抵抗は上図と同様220Ω程度です。

How to make all usb storage devices compatible with wifi 00027

左のLEDが(1)のLEDで、右のLEDが(3)のパイロットランプ。

残るスイッチが、もちろんシャットダウン実行ボタンです。

横に四つ並べて配置したので、4ピンのQIコネクタでハーネスを作成して、LEDやボタンを接続するとよいかと思います。

How to make all usb storage devices compatible with wifi 00030

How to make all usb storage devices compatible with wifi 00029

How to make all usb storage devices compatible with wifi 00028

ANYCUBIC Photon-Sの電源を切る前にシャットダウンボタンを0.5秒以上押し、パイロットランプが消えてから5秒後ぐらいにANYCUBIC Photon-Sの電源スイッチを切る、といった感じの使い方になります。

3Dプリンターで体裁を整えました。

How to make all usb storage devices compatible with wifi 00033

How to make all usb storage devices compatible with wifi 00034

SSHでのログインに使うユーザ名とパスワード

手順上SSHでのログインは必要ありませんが、Raspberry Pi Zero Wへのログインアカウントは、デフォルトから変わっていません。参考までに記しておきます。

User: pi

Password: raspberry

ssh pi@192.168.1.xx

ファイル共有サーバ(Samba)経由以外でのファイルの転送

Raspberry Pi Zero W上の/mnt/usb_shareのファイル操作を監視し、変化があればUSBストレージを抜いて挿し直すという疑似動作を実施しているので、Samba経由以外でもここにファイルをコピーできるのであれば、どんな方法を使ってもOKです。

例えば、scpでもいいわけです。

scp _hogehoge.photons pi@192.168.1.xx:/mnt/usb_share/

PC側の特定のフォルダにファイルが置かれたらscpで転送という自動処理も可能ですね。

先にマウントするという操作をせずに済みますし、先述の注意点にある轍を踏まずに済むことにもなります。

光造形式低価格3Dプリンターの使い勝手が劇的に向上

今回紹介したシステムは、ANYCUBIC Photon / Photon-S以外にもたくさんあると思われるUSBストレージのみ対応の光造形式低価格3DプリンターをWiFi対応にできる可能性があるものです。

試してみる価値は大いにあるといえるのではないでしょうか。

 - 3Dプリンター, ガジェット