M5 AtomS3UをUSBフラッシュメモリとして認識させて設定ファイルを保存する
M5AtomS3Uを買ったのが3か月ほど前。
PCのUSBポートに直接挿せるという仕組みがありそうでなくて(2022年にAtomU が出てるが...)非常に素晴らしいと思いました。
普通のM5StackとかはUSBケーブルでPCと接続して開発することになるのですが、直接ガシャっとPCと接続できるのが素敵です。
M5AtomS3Uの仕様は下記の通り。
- ESP32-S3FN8
- ボタン x 1
- RGB LED x 1
- マイク
- リセットボタン
- 赤外線エミッタ
デバイスの形状はUSBフラッシュメモリのように見えます。
フラッシュメモリのようにファイルを保存して、テキストファイルを設定をファイルとして使えばいろいろできるのではないか?とひらめきました。
まずArduino IDEを使いESP32を外部フラッシュメモリとして動かせるかを試しました。
TinyUSB関係のexamplesを何個も試したところM5AtomS3UをUSBフラッシュとして認識できる状態にできました。
ただ、その時はちゃんとファイルを保存していなかったので再現ができなくなりました。
Arduino IDEは依存ライブラリなどの設定がちゃんと保存できず(私がうまいやり方を知らないだけかもしれません)、開発環境をPlatformIOに移行することにしました。
TinyUSBのexampleを参考にしつつ完成したのが下記です。
コンパイル方法
-
ソースコードはgithubに置いてあります。git cloneしてからgit resetなどで当該コミットに移動してください。またVS CodeにPlatformIOをインストールしておいてください。
-
PlatformIOでcloneしたレポジトリ内にあるmscram_and_spiffs_oldディレクトリを開きます。
-
依存ライブラリのインストールなどで数分待つ必要があるかもしれません
-
M5AtomS3UをPCに接続して、リセットボタンを長押ししてからPlatformIOでcompileしてください
※PlatformIOの細かい操作方法は公式のドキュメントなどを参照してください。
使い方
-
M5AtomS3Uの中央のボタンを押したままPCに接続
-
しばらく待つとUSBストレージ(ATOMS3U_MSC)として認識され、SETTINGS.TXTファイルが表示されます
-
SETTINGS.TXTをメモ帳で開くとJSONファイルとなっています
-
colorの値を変更する(red, yellow, megenta, lime, blue, cyan)
-
保存する。メモリ領域を確保するため、
}
以降にスペースが入っています、スペースは消さないようにしてください -
USBメモリを取り外すのと同様にちゃんと
取り出し
でPCから外してください。これをやらずにPCから取り外すと変更がうまく保存されません -
再度PCに接続、中央ボタンを押すと4.で設定した色に光ります
処理A-1 接続時に中央ボタンが押されている場合
- M5AtomS3UがPCに接続される
- 中央ボタンが押されている場合、USBストレージとして認識し、ROM領域にあるデータをSETTINGS.TXTに書き込み表示
- SETTINGS.TXTに変更があった場合、変更分をROM領域に保存
取り出し
でPCから取り外す、LEDがチカチカするので、チカチカが終わってからUSBを抜く
処理A-2 接続時に中央ボタンが押されている場合
- M5AtomS3UがPCに接続される
- 中央ボタンが押されている場合、USBストレージとして認識し、ROM領域にあるデータをSETTINGS.TXTに書き込み表示
- PCがUSB Flashとして認識完了後に5秒以内に5回中央ボタンを押す
- ROM領域のファイルを削除してリスタートする、ファイルが無くなるので再起動時に設定は初期状態に戻る
処理B 接続時に中央ボタンが押されていない場合
- M5AtomS3UがPCに接続される
- 中央ボタンが押されると、SETTINGS.TXTで設定したcolorの値に基づいてLEDを点灯
M5AtomS3Uに設定情報を保存できるように
このサンプルではJSONファイルに簡単な文字情報を保存して、それに基づいて表示する色を変更できます。
使用前に処理A-1を行い、設定をファイルを書き換えてから処理Bの通常使用(Regular Mode)をするという使い方を想定しています。
ESP32のROM領域を使うことで簡単な設定情報が保存できるので、わざわざコンパイルをする必要がなくなります。
また、書き込んだファイルを削除したい場合は処理A-2を行ってください。
これを使って色々作っていきます。