M5stackでMicroPythonを使えるようにする

※ 2019/5/17 注記： M5Stack で MicroPython 単体および M5Cloud はすっかりメンテされなくなり、UI.Flow に移行しているため、本記事はもう古すぎな内容となっています。

ESP32を使った開発モジュール[M5stack](http://www.m5stack.com/)、カラー液晶画面つきで、キーボード開発キット「FACES」も出て、MicroPythonも使えるとあって手を出しました。

![IMG_4287.JPG](https://qiita-image-store.s3.amazonaws.com/0/106817/d6f5160e-f2cf-4f65-994a-3d3f4bdc1f11.jpeg)

技適の表示もあることを確認。日本でも安心して電波出せます。

![IMG_4293.JPG](https://qiita-image-store.s3.amazonaws.com/0/106817/bfcb39c0-0cf3-227c-4fa4-2c53d4978501.jpeg)

FACESの電源入れるといきなりスーパーマリオブラザースが起動します(さすがに、スイッチサイエンスが日本で取り扱っているFACESではこのプレインストールがありません)。ちょっと遊んでみる限り、液晶の発色はあまりよくなく、スピーカからの音もひどいノイズで聞けたもんじゃありません。

![IMG_4290.JPG](https://qiita-image-store.s3.amazonaws.com/0/106817/6e3a3cda-e67e-d775-1f50-09f6263c6261.jpeg)

さて、マリオはさっさとつぶしてMicroPython環境を入れることにします。ただ、[公式ページ](http://www.m5stack.com/)に情報がほとんどありません。ググってみて[Pycomのファームウェアを入れる](https://appelsiini.net/2017/m5stack-esp32-firmware-cli/)というのは見つけたのですが、これはちょっと違う気が。そこで、[M5stackのgithub](https://github.com/m5stack)を見てまわって、それっぽいものがあったので試してみることにしました。

~~中国語ですが、~~それっぽい説明は[ここ](https://github.com/m5stack/M5Cloud/blob/master/README.md)にあります。"M5Stack MicroPython"というキーワードもあるので、いかにもそれっぽい。この説明にしたがって試してみることにします。

# ファームウェアのダウンロードと書込み

ファームウェアは[ここ](https://github.com/m5stack/M5Cloud/tree/master/firmwares)にあります。とりあえず最新の ~~m5cloud-20180102-v0.2.5.bin~~ m5cloud-20180228-v0.3.4.bin をダウンロードします。~~m5cloud-psram-20180102-v0.2.5.bin~~ m5cloud-psram-20180228-v0.3.4.bin というのはたぶん2017年末に出た4MB PSRAM付用です。

ファームウェアをESP32に書き込むのにはesptool.pyを使いました。バージョン2.1以上がいいらしいです。書込みは、PCとM5stackを付属のUSBケーブルでつないで以下の２つのコマンドラインで出来ます (Macの場合)。

```bash
$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART erase_flash
$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART write_flash --flash_mode dio -z 0x1000 m5cloud-20180228-v0.3.4.bin
```

# Wi-Fi接続の設定

ファームウェアの書込みが終わると、自動でリセットがかかり、M5stack 自体が Wi-Fiのアクセスポイントになります。この時点でLCD画面の表示から MicroPython が動いているらしいことがわかります。

![IMG_4294.JPG](https://qiita-image-store.s3.amazonaws.com/0/106817/17c7382d-c244-5c13-d398-3ba31220d4f8.jpeg)

LCD画面の表示からアクセスポイントの SSID は "M5Stack-49c048" なので、PCのWi-Fi接続先をそこに変えます。

![スクリーンショット 2018-01-02 21.06.47.png](https://qiita-image-store.s3.amazonaws.com/0/106817/c4538323-4edd-25ca-395a-fc4d33c821d2.png)

Webブラウザで 192.168.4.1 にアクセスして、普段使っている Wi-Fi のSSIDとパスワードを入力して "Configure" をクリックします。

![スクリーンショット 2018-01-02 21.09.18.jpg](https://qiita-image-store.s3.amazonaws.com/0/106817/9662419a-95b4-820a-e0dd-94e59d83cbf6.jpeg)

Wi-Fi接続が行われます。~~Wi-Fi接続中にLCD画面にパスワードが表示されるのはセキュリティ的にマズイ。他の人に使わせるときには注意してください。~~ Wi-Fi接続に成功すると、LCD画面にチェックコードが表示されます。

![IMG_4299.JPG](https://qiita-image-store.s3.amazonaws.com/0/106817/75b7d3b1-13a5-c97e-0908-ee006bdc7d71.jpeg)

PCのWi-Fi接続先は元に戻しておきます。

# M5Cloud へのデバイス登録

Webブラウザで[M5Cloud](http://cloud.m5stack.com/)にアクセスします。ログイン画面になるので、まずはアカウントを登録するために "Register" をクリックします。

![スクリーンショット 2018-01-02 21.13.03.png](https://qiita-image-store.s3.amazonaws.com/0/106817/d03afb78-2f39-4279-95f6-e6c38851bfd6.png)

アカウント登録画面になるので、アカウント名となるEメールアドレスとパスワードを入力して "Register" をクリックします。

![スクリーンショット 2018-01-02 21.13.25.png](https://qiita-image-store.s3.amazonaws.com/0/106817/1ff717a9-951e-9492-bd63-eb466bd60369.png)

"Device Management" 画面になるので、"+Add" をクリックします。

![スクリーンショット 2018-01-02 21.14.01.png](https://qiita-image-store.s3.amazonaws.com/0/106817/07de8949-f27f-8894-87e0-1c3a9a6e450f.png)

M5stack のLCDに表示されていたチェックコードを入力します。チェックコードは一定間隔で変わるので、必ずLCD画面に表示されている最新のものを入力します。

![スクリーンショット 2018-01-02 21.19.06.png](https://qiita-image-store.s3.amazonaws.com/0/106817/f21e02d3-3a3c-1587-fa72-f9dbc1f971f1.png)

デバイス一覧に出てきて、"status" が "online" になっていれば登録完了です。

![スクリーンショット 2018-01-02 21.19.40.png](https://qiita-image-store.s3.amazonaws.com/0/106817/c1eab0b9-c811-f612-b145-0cbcb3befbec.png)

# IDEでの開発とアップロード

”Device Management" 画面の左側にあるアイコン "</>" をクリックすると IDE画面になります。最初に使用するデバイスの選択になるので、登録したデバイスを選択します。

![スクリーンショット 2018-01-02 21.20.28.png](https://qiita-image-store.s3.amazonaws.com/0/106817/ca572e23-f056-1eaa-bd39-badcf343cde4.png)

IDEでは最低限のファイルが用意されます。

![スクリーンショット 2018-01-02 21.22.00.png](https://qiita-image-store.s3.amazonaws.com/0/106817/cb7973b7-eda5-ea4a-7f52-408bd16a3712.png)

boot.py は　デバイスブート時に実行されるもので、デフォルトではWi-Fi設定、NTP時刻取得、デバイスとクラウド間の通信の設定が行われます。

config.jsonにはWi-Fi接続のためのSSIDとパスワードが設定されています。パスワードは暗号化されていないので他人に見られないよう要注意。

main.pyがMicroPythonスクリプトの本体です。デフォルトでは　"Hello world!"　をLCD画面に出力ものがコメントアウトされています。このコメントアウトを外して、左側の雲のアイコンをクリックします。ファイルが M5stack に転送・実行されます。

![IMG_4302.JPG](https://qiita-image-store.s3.amazonaws.com/0/106817/7dfb15a8-feac-d869-f89a-5ab182759d6f.jpeg)

# オフラインでの開発方法（元に戻す自信のない人は止めときましょう）

いちおう、これでM5stackのMicroPython開発環境は出来たわけですが、Wi-Fiに繋がってないと開発できないというのはちょっと不便。Wi-Fi使えない環境だと、M5stackが接続待ちで固まってしまうので、オフライン環境で開発するにはブート時のWi-Fi接続を止める必要があります。これを行うにはboot.pyでの "wifisetup" と "m5cloud" のimportをコメントアウトしてM5stackに転送します。

![スクリーンショット 2018-01-02 21.27.52.png](https://qiita-image-store.s3.amazonaws.com/0/106817/627b7e7d-6a0d-546f-4f0b-5350e2fa13ce.png)

以後は自動でM5cloudに接続しに行かなくなるので、PCとM5stackを付属のUSBケーブルで繋いで、シリアル端末からREPL操作したり、ampyでファイル転送ができるようになります。ただし、これを行うと、当然ながら以後のM5cloudからのファイル転送は出来なくなりますので、元のboot.pyを復活させる自信の無い人は止めておきましょう。

また、v0.3.0から[M5Clouldを使わない人のためのファームウェア](https://github.com/m5stack/M5Cloud/tree/master/firmwares/OFF-LINE)も用意されました。

---
# API調査（途中）

* [M5Stack MicroPython API調査記録 LCD編](https://qiita.com/inachi/items/686658a81ef8096f890f)
* [M5Stack MicroPython API調査記録 ボタン編](https://qiita.com/inachi/items/e86a0dc24d5627af42c2)
* [M5Stack MicroPython API調査記録 RTC編](https://qiita.com/inachi/items/1ae2284bef8e77fc188c)
* [M5Stack MicroPython API調査記録 スレッド編](https://qiita.com/inachi/items/4be6eff91742e5518bf5)