M5Stack UI Flow を Mac で使う

 以前に下記ツイートを見てから試してみたいと思ってた UI Flow を試してみました。

 UI Flow は Scratch のようにブロックを並べることでプログラミングができ、画面レイアウトもパーツを並べることで行うことができるようになっています。ブロックではなく Micro Python でコーディングをすることもできます。

 チュートリアルとしては下記のページを参考にさせてもらいました。

forum.m5stack.com

ファームウェアのセットアップ

 UI Flow を使うにはそれに対応したファームウェアを使う必要があります。ファームウェアを簡単に選択してフラッシュすることができる M5Burner というツールが用意されていて、 UI Flow 用のファームウェアを選択することもできるのですが、このツールは Windows 用にしか用意されていないので、 Mac ではそのまま使うことができません。ですが、 M5Burner をダウンロードして解凍するとその中にファームウェアのイメージは含まれていて、フラッシュ用のコマンドが書かれた sh ファイルも含まれているので、これを利用することで UI Flow を使うことができます。

 M5Burner は M5Stack のサイトのダウンロードページからダウンロードすることができます。

f:id:akanuma-hiroaki:20180908220258p:plain

 ですが 2018/09/08 に試した時点では、ここからダウンロードできる zip に含まれている UI Flow 用のファームウェアはバージョン 0.4 までで、このバージョンだと UI Flow からプログラムを実行するところでうまく動きませんでした。

 そこで UI Flow の設定画面から取得した zip にはバージョン 0.5 まで含まれており、そちらであれば実行まで動作させることができたのでそちらを使用します。

 まずは M5UI.Flow にアクセスします。すると API Key 設定用のダイアログが表示されますが、まだ API Key はわからないので Skip します。

f:id:akanuma-hiroaki:20180908183250p:plain

 次に画面右上の設定ボタンをクリックして設定ダイアログを開きます。

f:id:akanuma-hiroaki:20180908183306p:plain

 API Key の設定フォームとファームウェア(M5Burner)のダウンロードリンクが表示されますので、ダウンロードリンクをコピーします。

f:id:akanuma-hiroaki:20180908183323p:plain

 ここからはターミナルで実行します。まずは wget で先ほどコピーしたダウンロードリンクから M5Burner をダウンロードします。

$ wget http://flow.m5stack.com/download/M5Burner-flow-only.zip
--2018-09-08 11:36:33--  http://flow.m5stack.com/download/M5Burner-flow-only.zip
Resolving flow.m5stack.com... 52.230.67.99
Connecting to flow.m5stack.com|52.230.67.99|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12199380 (12M) [application/zip]
Saving to: 'M5Burner-flow-only.zip'

M5Burner-flow-only.zip                                      100%[===========================================================================================================================================>]  11.63M  2.65MB/s   in 4.6s   

2018-09-08 11:36:38 (2.53 MB/s) - 'M5Burner-flow-only.zip' saved [12199380/12199380]

 そして解凍します。

$ unzip M5Burner-flow-only.zip

 すると下記のようファイルが展開されます。

$ ls -l
total 27152
-rw-r--r--  1 akanuma  staff  12199380 Sep  6 20:38 M5Burner-flow-only.zip
-rw-r--r--  1 akanuma  staff     31232 Aug 21 16:42 M5Burner.exe
-rw-r--r--  1 akanuma  staff       189 Jun  9 13:37 M5Burner.exe.config
-rw-r--r--  1 akanuma  staff     34304 Aug 21 16:42 M5Burner.pdb
-rw-r--r--  1 akanuma  staff    662528 Mar 24 17:44 Newtonsoft.Json.dll
-rw-r--r--  1 akanuma  staff    684778 Mar 24 17:44 Newtonsoft.Json.xml
drwxr-xr-x  4 akanuma  staff       128 Sep  6 19:14 firmwares
drwxr-xr-x  3 akanuma  staff        96 Sep  3 15:00 tools
-rw-r--r--  1 akanuma  staff       169 Aug 31 19:51 update.log

 使用するのは firmwares ディレクトリ配下のファイルだけで、 UI Flow 用のファームウェアの最新バージョンのディレクトリへ移動します。

$ cd firmwares/M5Flow/v0.5/
$ ls -l
total 8152
-rw-r--r--  1 akanuma  staff  1351152 Aug 31 19:16 firmware_0x1000.bin
-rw-r--r--  1 akanuma  staff      335 Sep  6 19:11 flash.sh
-rw-r--r--  1 akanuma  staff  2818048 Sep  6 19:05 spiffs_image_0x150000.img

 ここに flash.sh というファイルがあり、この中身はファームウェアをフラッシュするためのコマンドが書かれたものになっています。

$ cat flash.sh 
#!/bin/bash
esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART --baud 961200 write_flash -z 0x1000 firmware_0x1000.bin
esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART --baud 921600 --before default_reset --after no_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x150000 spiffs_image_0x150000.img

 このファイルに実行権限をつけて実行してしまっても良いのですが、それぞれのコマンドの実行結果を確認したかったので一つずつ実行します。 M5Stack を USB ケーブルで接続していれば下記のようにデバイスファイルが存在します。

$ ls -l /dev/tty.SLAB_USBtoUART 
crw-rw-rw-  1 root  wheel   21,  24 Sep  8 11:03 /dev/tty.SLAB_USBtoUART

 デバイスファイルが確認できたら、まず一つ目のコマンドで bin ファイルを M5Stack に書き込みます。

$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART --baud 961200 write_flash -z 0x1000 firmware_0x1000.bin
esptool.py v2.5.0
Serial port /dev/tty.SLAB_USBtoUART
Connecting........___
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse
MAC: 80:7d:3a:c4:71:bc
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 961200
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1351152 bytes to 841602...
Wrote 1351152 bytes (841602 compressed) at 0x00001000 in 13.8 seconds (effective 784.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

 特にエラーはなく実行できたようです。次にもう一つのコマンドを実行し、 img ファイルを書き込みます。

$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART --baud 921600 --before default_reset --after no_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x150000 spiffs_image_0x150000.img
esptool.py v2.5.0
Serial port /dev/tty.SLAB_USBtoUART
Connecting........_
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse
MAC: 80:7d:3a:c4:71:bc
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 2818048 bytes to 667546...
Wrote 2818048 bytes (667546 compressed) at 0x00150000 in 18.7 seconds (effective 1205.6 kbit/s)...
Hash of data verified.

Leaving...
Staying in bootloader.

 こちらも問題なく実行できたようです。これでひとまずファームウェアの書き込みは行えたので、これ以降は Windows 環境で実行している場合と同様かと思います。

Wi-Fi 接続設定

 ファームウェアの書き込みが終了したら USB ケーブルを抜くか、 M5Stack 本体横のボタンで M5Stack を再起動すると UI Flow のロゴが表示されます。

f:id:akanuma-hiroaki:20180908183536j:plain

 そしてそのまま何もしなければ、標準でじゃんけんゲームのようなものが書き込まれているで、それが実行されます。

f:id:akanuma-hiroaki:20180908183601j:plain

 Wi-Fi の設定をするためにはもう一度 M5Stack を再起動して、 UI Flow のロゴが表示されている間に右のボタンを長押しします。

f:id:akanuma-hiroaki:20180908200058j:plain

 設定メニューが表示されますので、 set reconnect wifi を選択して真ん中のボタンを押します。

f:id:akanuma-hiroaki:20180908202532j:plain

 すると M5Stack が Wi-Fi AP として動作し、画面上に SSID とアクセス先 IP アドレスが表示されますので、 Mac からその AP に接続し、ブラウザから対象の IP アドレスにアクセスします。

f:id:akanuma-hiroaki:20180908200208j:plain

 下記のように M5Stack が接続する AP を選択する画面が表示されますので、 AP を選択してパスワードを入力し、 Configure をクリックします。

f:id:akanuma-hiroaki:20180908200402p:plain

 接続が成功すると下記のような画面になり、 M5Stack が再起動されます。

f:id:akanuma-hiroaki:20180908200456p:plain

UI Flow から M5Stack への接続

 M5Stack を再起動して UI Flow のロゴが表示されている間に、左のボタンを長押しします。

f:id:akanuma-hiroaki:20180908200624j:plain

 M5Stack から設定済み AP への接続が成功すると、下記のように API Key が表示されます。

f:id:akanuma-hiroaki:20180908201350j:plain

 これを UI Flow の設定画面から設定します。

f:id:akanuma-hiroaki:20180908201500p:plain

 API Key を設定しただけでは接続状態が画面に反映されていないので、画面左の M5Stack のイメージの Offline となっているところをクリックします。

f:id:akanuma-hiroaki:20180908201628p:plain

 接続に成功すると表示が Online に変わります。

f:id:akanuma-hiroaki:20180908201642p:plain

UI Flow でのプログラミング

 ここまででファームウェアの設定や接続等の環境の準備は完了なので、 UI Flow から簡単なプログラムを実装して実行してみます。まずは M5Stack のイメージの上部にある Label をイメージのディスプレイ上にドラッグ&ドロップします。

f:id:akanuma-hiroaki:20180908201711p:plain

 ブロックリストの Component -> Label から、 Label にテキストを表示するためのブロックを選択します。

f:id:akanuma-hiroaki:20180908201734p:plain

 元々配置されている Setup ブロックに選択したブロックを接続し、表示するテキストを変更します。画面にテキストを表示させるだけであればこれだけでOKなので、画面右上の実行ボタンをクリックして、 M5Stack 上で実行します。

f:id:akanuma-hiroaki:20180908201953p:plain

 下記のように実機の画面にテキストが表示されれば成功です。

f:id:akanuma-hiroaki:20180908202026j:plain

 テキストを変更して再度実行ボタンをクリックすれば、すぐに実機に反映されます。

f:id:akanuma-hiroaki:20180908202149p:plain

f:id:akanuma-hiroaki:20180908202239j:plain

 実行ボタンではその場で実行するだけかと思いますので、開発中は実装と動作確認を繰り返すのには良いかと思いますが、起動時に実行されるようにするには画面右上の書き込みボタンで実機に書き込んでおきます。

f:id:akanuma-hiroaki:20180908202401p:plain

まとめ

 M5Stack の Micro Python での Web IDE 環境としては M5Cloud もありますが、 UI Flow の利点としては画面イメージを視覚的に確認しながら作成できる点と、ブロックの配置で処理が実装できるので、学習等の目的としてはとても良さそうに思います。ですが現状ではまだ実装したプログラムを保存しておくことなどはできないようですので、今後 IDE としても充実してくることを期待したいと思います。