SDに入れた複数のアプリを選んで起動したり、WiFiの接続設定を行ったり、他にも色々できるランチャーアプリを作りました。
<投稿者:らびやん @lovyan03>
らびやんと申します。主にWindows用の業務ソフトの開発をしています。2018年の夏ごろにM5Stackを入手して以来ハマっております。M5Stackの開発ではArduinoを使用しています。Pythonは把握できていません…。
制作動機
M5Stackを触り始めて何か作ろうと思った時、まずメニューのUIが必要だと思い、ツリー形式のUIを作り始めました。SDカードの内容一覧やWiFiのAP一覧が表示できるサンプルを作るうち、次第に多機能化していったので、UI部分をライブラリとして公開し、特に利便性のよい機能を集めてアプリとして公開する事にしました。
M5Stack_TreeView
こちらが作成したツリービュー形式のライブラリ部分です。
ボタンA短押しで親階層に移動、ボタンBで決定、ボタンCでフォーカス移動。ボタンAとCは長押しでフォーカス連続移動ができます。(ボタンAだけ短押しと長押しで挙動が違います。)PLUSエンコーダやGROVE JoyStick等にも対応しています。
M5Stack_LovyanLauncher
そしてこちらが作成したアプリケーション、LovyanLauncherです。
#M5Stack LovyanLauncher公開してます。SDカードからアプリ起動、各種WiFi接続、ftpによるSDとSPIFFSのアクセス、I2Cスキャナ、ベンチマーク、バイナリビューアなど。https://t.co/gYw1me29Bb pic.twitter.com/zwsE6NRxRS
— らびやん (@lovyan03) May 11, 2019
Windows環境でしたらReleasesからM5Burner.zipをダウンロードして実行するのが簡単です。ビルド済バイナリがありますので、ESP32 Flash Download Toolを使用しても良いです。
色々な機能がありますが、特に次の2つについて説明します。
- SDカードからアプリを読み込んで起動するSD-Updater
- 多数の設定手段が用意された WiFi 設定
この2つの機能によって、複数のアプリを入れ替えて試すことが容易になり、アプリ作成時のWiFi設定の実装が不要になります。
SD-Updater
フランスのtobozoさんの作成された、SD-Updaterというライブラリがあります。
これを使うと、SDカードに入れてあるアプリを読み込んで起動することができます。より具体的には…、ESP32のフラッシュメモリにはOTA用にアプリ領域が2つあり、 (厳密には、パテーション設定でOTA領域を有効にしている場合に限ります) 片方にランチャーアプリを入れて、もう片方にSDから読み込んだアプリを書込んで起動します。
SDに入れるアプリには、起動時にボタンAが押されていたらランチャーに戻るコードを書いておきます。
こうすることでSD-Updater対応アプリになり、アプリからランチャーへ、ランチャーからアプリへ、切り替えが自由になります。
WiFi設定
M5StackでWiFiに接続する際、WiFi.begin関数の引数でSSIDとパスワードを渡せますが、実は引数を省略し 「 WiFi.begin(); 」 と書くと、最後に使用した設定値が使用されます。つまりLovyanLauncherでWiFi設定を行えば、アプリを作る側はSSID・パスワードの記述やWiFi設定機能の実装が不要になります。
LovyanLauncherでは、WiFiの設定手段を複数用意しています。
- アクセスポイント一覧から選択(パスワードをM5Stackで入力)
- WPSプッシュボタン方式(WPS対応APのボタンを押す方式)
- SmartConfigアプリ(スマホアプリで現在接続しているAPのパスワードを入力)
- APモード+HTTPサーバ(スマホ等でAP接続しブラウザ上でパスワード入力)
WPS対応のAPであればWPSが一番簡単です。スマホがあればSmartConfigアプリが手軽でしょう。また、M5Stack本体しかない状況であっても、本体の3ボタンでのパスワード入力が可能です。
おわりに
元々は自分用の単純なUIの試作から始まったものでしたが、Twitterで公開したことでたくさんの反響を頂き、githubを使い始めるきっかけになり、こうして記事を書かせて頂いたりと、M5Stackとネットのお陰で新しい経験を色々とすることができました。これからどんな事が起こるのか、楽しみです。
<投稿者:らびやん @lovyan03>
らびやんと申します。主にWindows用の業務ソフトの開発をしています。2018年の夏ごろにM5Stackを入手して以来ハマっております。M5Stackの開発ではArduinoを使用しています。Pythonは把握できていません…。