先週行った Maker Faire Tokyo 2018 のスイッチサイエンスさんのブースで、前から気になっていた M5Stack のデモや販売が行われていたので購入してしまいました。加速度センサーやジャイロが入っていた方が今後色々試すにも手軽かなと思ったので、 Basic ではなく Gray を購入しました。
今回はひとまず最低限の環境の準備までをやってみました。
アンボックス
パッケージの外観はこんな感じで、本体と同梱物がコンパクトにまとまっています。
開封すると本体の他に、充電やファームウェアのアップロードを行うための USB Type-C のケーブルやジャンパーケーブル、マニュアル等が入っています。
本体裏面にはピン番号が書かれたステッカーが貼られています。
本体の上部と下部は短いピンヘッダでつながっているだけなので、簡単に外すことができます。
ドライバのインストール
M5Stack の公式サイトには各環境用の設定方法が記載されたチュートリアルがあります。
まずはドライバのインストールからで、下記サイトから該当する環境用のドライバをダウンロードしてインストールします。
私は Mac を使用しているので、Mac OSX 用のドライバを使用します。私の場合は以前同じドライバをインストールしたことがあったのでそのまま使いますが、初めて Mac OSX で該当のドライバをインストールした際は、システム環境設定の セキュリティーとプライバシー
から、該当のドライバの利用について 許可
する必要があります。
Arduino IDE 環境設定
M5Stack では Arduino と MicroPython の2つの環境を使用できます。まずはこちらのサイトを参考に Arduino 環境から試してみます。
Arduino IDE が既に使用可能な状態になっているという前提で、最初に M5Stack で使われている ESP32 を Arduino IDE で扱うために ESP32 Arduino Core をインストールします。
私は以前にインストールしたことがあったので、下記コマンドでアップデートだけ実行しました。
$ 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' を選択してインストールします。
これで Arduino IDE で M5Stack が扱えるようになっていますので、 Arduino IDE の「ツール」メニューから、ボード -> M5Stack-Core-ESP32
を選択します。
さらに「ツール」メニューから、 シリアルポート -> /dev/cu.SLAB_USBtoUART
を選択します。
これで環境設定は一通り完了なので、サンプルコードで動作確認をしてみます。 Arduino IDE の「ファイル」メニューから、 スケッチ例 -> M5Stack -> Basics -> HelloWorld
を選択すると下記のサンプルコードが読み込まれます。
これを M5Stack に Upload して下記のように M5Stack のディスプレイに Hello World
と表示されれば成功です。
MicroPython 環境設定
次に下記サイトを参考に MicroPython の環境設定も試してみます。
まずはシリアルポートから ESP32 のフラッシュメモリの消去や書き込みを行うために esptool をインストールします。今回使っている Python のバージョンは 3.6.5 です。
$ pip install esptool
次に Github の下記リポジトリから M5Stack のファームウェアをダウンロードします。 MicroPython 環境では m5cloud という Web IDE を使ってオンラインでファームウェアをアップデートできる m5cloud 用ファームウェアと、オフラインでシリアルポートからアップデートするためのオフライン版のファームウェアがあります。
まずは参考サイトと同様にオフライン版を試してみます。上記リポジトリの 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 の表示までで止まってしまいました。
参考サイトの例とはバージョンが違うので、リポジトリにある古いバージョンも試してみましたが、いずれもIPアドレス等の表示までは行きませんでした。
リポジトリにはバージョン 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...
m5cloud 版ではIPアドレス等の表示まで実行されました。ここまで行けば Wi-Fi の AP として M5Stack-XXXX
という形で表示されるようになりますので、PC 等から接続します。そしてブラウザから 192.168.4.1
に接続すると Wi-Fi のセットアップ画面が表示されますので、 M5Stack を接続する Wi-Fi AP の情報を設定します。
すると M5Stack のディスプレイに m5cloud にデバイスを登録するためのコードが表示されます。このコードは60秒毎に更新されて行きます。
次に m5cloud にアクセスします。初回アクセスの際はユーザ登録をしてダッシュボードが表示されたら、デバイスを登録するために Add
ボタンをクリックします。
そして先ほど M5Stack のディスプレイに表示されていたコードを入力すると、デバイスが登録されます。
M5Stack 側にも登録成功のメッセージが表示されます。
これでひとまず環境としては準備できたので、サンプルコードを作成するために、 m5cloud のプロジェクトを作成します。
プロジェクトの情報を入力します。言語としては Python の他にも Lua が選択できるようですが、今回は Python を使用します。
プロジェクトを作成するとデフォルトで下記の内容で main.py が作成されますので今回はそのまま使用します。
from m5stack import lcd lcd.clear() lcd.setCursor(0, 0) lcd.setColor(lcd.WHITE) lcd.print("Hello World!")
M5Stack にアップロードして実行するには、画面左下の Upload&Run
ボタンをクリックします。
対象のデバイスを選択して Upload
ボタンをクリックするとファームウェアがアップロードされ、 M5Stack 上で実行されます。
下記画像のように M5Stack のディスプレイに表示されれば成功です。
ちなみにオフライン版では、 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 のクレードルをいただきました。他の方のツイートによると温湿度センサーが付いているようなので、こちらも今後試してみたいと思います。
まとめ
M5Stack はコンパクトなサイズに Wi-Fi、BLE、スピーカー、ボタン、GPIO等が詰め込まれていて、そして何よりディスプレイが付いているというのが良いですね。さらに M5Stack Gray なら加速度センサーやジャイロまで付いてますので、これ1つでいろんなことができそうです。 MicroPython のオフライン版の設定は思う通りには行かないところがありましたが、それ以外での設定は特に難しいところもなくできました。 m5cloud は IDE としては足りないところも多くまだまだこれからという感じですが、 PC からシリアル接続することなくファームウェアのアップロードができるので手軽に使えそうです。今後 IDE として改善されていくことを期待したいと思います。