M5Stack の環境設定(Arduino & MicroPython)

 先週行った Maker Faire Tokyo 2018 のスイッチサイエンスさんのブースで、前から気になっていた M5Stack のデモや販売が行われていたので購入してしまいました。加速度センサーやジャイロが入っていた方が今後色々試すにも手軽かなと思ったので、 Basic ではなく Gray を購入しました。

www.switch-science.com

 今回はひとまず最低限の環境の準備までをやってみました。

アンボックス

 パッケージの外観はこんな感じで、本体と同梱物がコンパクトにまとまっています。

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

 開封すると本体の他に、充電やファームウェアのアップロードを行うための USB Type-C のケーブルやジャンパーケーブル、マニュアル等が入っています。

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

 本体裏面にはピン番号が書かれたステッカーが貼られています。

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

 本体の上部と下部は短いピンヘッダでつながっているだけなので、簡単に外すことができます。

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

ドライバのインストール

 M5Stack の公式サイトには各環境用の設定方法が記載されたチュートリアルがあります。

M5Stack Documentation

 まずはドライバのインストールからで、下記サイトから該当する環境用のドライバをダウンロードしてインストールします。

www.silabs.com

 私は Mac を使用しているので、Mac OSX 用のドライバを使用します。私の場合は以前同じドライバをインストールしたことがあったのでそのまま使いますが、初めて Mac OSX で該当のドライバをインストールした際は、システム環境設定の セキュリティーとプライバシー から、該当のドライバの利用について 許可 する必要があります。

Arduino IDE 環境設定

 M5Stack では Arduino と MicroPython の2つの環境を使用できます。まずはこちらのサイトを参考に Arduino 環境から試してみます。

pages.switch-science.com

 Arduino IDE が既に使用可能な状態になっているという前提で、最初に M5Stack で使われている ESP32 を Arduino IDE で扱うために ESP32 Arduino Core をインストールします。

github.com

 私は以前にインストールしたことがあったので、下記コマンドでアップデートだけ実行しました。

$ mkdir -p ~/Documents/Arduino/hardware/espressif
$ cd ~/Documents/Arduino/hardware/espressif
$ cd esp32
$ git submodule update --init --recursive
$ cd tools/
$ python get.py

 次に M5Stack のライブラリをインストールします。 Arduino IDE の Library Manager から M5Stack ライブラリを検索し、下記画像の例では真ん中の `M5Stack by M5Stack' を選択してインストールします。

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

 これで Arduino IDE で M5Stack が扱えるようになっていますので、 Arduino IDE の「ツール」メニューから、ボード -> M5Stack-Core-ESP32 を選択します。

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

 さらに「ツール」メニューから、 シリアルポート -> /dev/cu.SLAB_USBtoUART を選択します。

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

 これで環境設定は一通り完了なので、サンプルコードで動作確認をしてみます。 Arduino IDE の「ファイル」メニューから、 スケッチ例 -> M5Stack -> Basics -> HelloWorld を選択すると下記のサンプルコードが読み込まれます。

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

 これを M5Stack に Upload して下記のように M5Stack のディスプレイに Hello World と表示されれば成功です。

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

MicroPython 環境設定

 次に下記サイトを参考に MicroPython の環境設定も試してみます。

pages.switch-science.com

 まずはシリアルポートから ESP32 のフラッシュメモリの消去や書き込みを行うために esptool をインストールします。今回使っている Python のバージョンは 3.6.5 です。

$ pip install esptool

 次に Github の下記リポジトリから M5Stack のファームウェアをダウンロードします。 MicroPython 環境では m5cloud という Web IDE を使ってオンラインでファームウェアをアップデートできる m5cloud 用ファームウェアと、オフラインでシリアルポートからアップデートするためのオフライン版のファームウェアがあります。

github.com

 まずは参考サイトと同様にオフライン版を試してみます。上記リポジトリの OFF-LINE ディレクトリから最新の bin ファイルをダウンロードします。

$ wget https://github.com/m5stack/M5Cloud/raw/master/firmwares/OFF-LINE/m5stack-20180516-v0.4.0.bin

 次に一度 M5Stack のフラッシュメモリを esptool で消去します。

$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART erase_flash
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...
Erasing flash (this may take a while)...
Chip erase completed successfully in 5.9s
Hard resetting via RTS pin...

 そして先ほどダウンロードしたオフライン用のファームウェアを書き込みます。

$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART write_flash --flash_mode dio -z 0x1000 m5stack-20180516-v0.4.0.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...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1747296 bytes to 1119059...
Wrote 1747296 bytes (1119059 compressed) at 0x00001000 in 98.6 seconds (effective 141.8 kbit/s)...
Hash of data verified.

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

 これで参考サイトの通りなら M5Stack が Wi-Fi の AP として動作して、接続するためのIPアドレス等が表示されるはずなのですが、私が試した限りでは Device ID の表示までで止まってしまいました。

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

 参考サイトの例とはバージョンが違うので、リポジトリにある古いバージョンも試してみましたが、いずれもIPアドレス等の表示までは行きませんでした。

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

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

 リポジトリにはバージョン 0.3.8 までしかなかったので一旦オフライン版は諦めて、 m5cloud 版を使用してみます。

$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART write_flash --flash_mode dio -z 0x1000 m5cloud-20180516-v0.4.0.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...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1747552 bytes to 1119193...
Wrote 1747552 bytes (1119193 compressed) at 0x00001000 in 98.6 seconds (effective 141.8 kbit/s)...
Hash of data verified.

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

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

 m5cloud 版ではIPアドレス等の表示まで実行されました。ここまで行けば Wi-Fi の AP として M5Stack-XXXX という形で表示されるようになりますので、PC 等から接続します。そしてブラウザから 192.168.4.1 に接続すると Wi-Fi のセットアップ画面が表示されますので、 M5Stack を接続する Wi-Fi AP の情報を設定します。

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

 すると M5Stack のディスプレイに m5cloud にデバイスを登録するためのコードが表示されます。このコードは60秒毎に更新されて行きます。

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

 次に m5cloud にアクセスします。初回アクセスの際はユーザ登録をしてダッシュボードが表示されたら、デバイスを登録するために Add ボタンをクリックします。

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

 そして先ほど M5Stack のディスプレイに表示されていたコードを入力すると、デバイスが登録されます。

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

 M5Stack 側にも登録成功のメッセージが表示されます。

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

 これでひとまず環境としては準備できたので、サンプルコードを作成するために、 m5cloud のプロジェクトを作成します。

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

 プロジェクトの情報を入力します。言語としては Python の他にも Lua が選択できるようですが、今回は Python を使用します。

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

 プロジェクトを作成するとデフォルトで下記の内容で main.py が作成されますので今回はそのまま使用します。

from m5stack import lcd

lcd.clear()
lcd.setCursor(0, 0)
lcd.setColor(lcd.WHITE)
lcd.print("Hello World!")

 M5Stack にアップロードして実行するには、画面左下の Upload&Run ボタンをクリックします。

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

 対象のデバイスを選択して Upload ボタンをクリックするとファームウェアがアップロードされ、 M5Stack 上で実行されます。

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

 下記画像のように M5Stack のディスプレイに表示されれば成功です。

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

 ちなみにオフライン版では、 Wi-Fi AP として接続することはできなかったものの、シリアルポートから接続して操作をすることはできました。

$ sudo cu -s 115200 -l /dev/tty.SLAB_USBtoUART
Password:
Connected.

>>> print('hello world')
hello world
>>> 
>>> from m5stack import lcd
>>> lcd.clear()
>>> lcd.print('hello')
>>> 
>>> ~.

Disconnected.

おまけ

 Maker Faire Tokyo での M5Stack 購入特典として M5Stack のクレードルをいただきました。他の方のツイートによると温湿度センサーが付いているようなので、こちらも今後試してみたいと思います。

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

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

まとめ

 M5Stack はコンパクトなサイズに Wi-Fi、BLE、スピーカー、ボタン、GPIO等が詰め込まれていて、そして何よりディスプレイが付いているというのが良いですね。さらに M5Stack Gray なら加速度センサーやジャイロまで付いてますので、これ1つでいろんなことができそうです。 MicroPython のオフライン版の設定は思う通りには行かないところがありましたが、それ以外での設定は特に難しいところもなくできました。 m5cloud は IDE としては足りないところも多くまだまだこれからという感じですが、 PC からシリアル接続することなくファームウェアのアップロードができるので手軽に使えそうです。今後 IDE として改善されていくことを期待したいと思います。