PlatformIO+M5Stackを使ってみた


先日購入したM5Stack FIREですが、最近気になっていたクロスプラットフォームのIDE「PlatfomIO」をこのM5Stackで試してみることにしました。

PlatformIOはMicrosoftのエディタVisual Studio Codeのアドオンとして利用できる、クロスプラットフォームの開発環境です。
ここで、クロスプラットフォームというのはWindows/Mac/Linuxというだけでなく、Arduinoを初めとした様々な開発環境に対してもクロスプラットフォームになっています。
PlatformIOだけで、Arduinoの開発もmbedの開発も(PlatformIOでサポートされているボードならば)行えます。

とりあえずインストールしてみました。
参考にしたのは以下のページです。

PlatformIO IDE for VSCode でESP32のプログラム開発

Arduinoと違ってサンプルがインストールされないようなので、インターネットからPlatformIO対応のプロジェクトを探して、まずはビルドさせてみました。

試してみたのは以下のソフトです。
ネットラジオやゲームやオシロ、Webサーバ、天気予報、WiFiモニタなどM5Stackでできることを一まとめにしたアプリケーションです。

botofancalin/M5Stack-MultiApp-Advanced: A M5Stack firmware made on PlatformIO

ZIPファイルとしてダウンロードし、解凍してフォルダをPlatformIOから開けば準備OKです。
ビルドはウインドウ左下のチェックマーク、M5Stackへの転送はその隣の矢印マークをクリックします。

無事、動作が確認できたので、今度は自分でもプロジェクトを作ってみました。

新規のプロジェクトで、開発ボードを選択するのですが、現時点で507種ものボードがサポートされています。
そして、M5Stack FIREもその中に含まれています。(Huge update for ESP32 dev/platform: Debug, PSRAM, Embedding Binary Data – Announcements – PlatformIO Community

プロジェクト作成時にボードとしてM5Stack FIREを指定すれば、ツールチェインは適切に自動選択されます。
さらに、M5Stack用のArduinoライブラリがPlatformIOにも用意されているので、それをインストールします。

M5Stack by Zibin, M5Stack · Libraries · PlatformIO

インストールは、PlatformIOのLibrariesアイコンをクリックし、検索窓にM5Stackと入れればライブラリが見つかるので、クリックします。

すると、ライブラリの詳細とインストールボタンが出てきますので、インストールすれば完了です。

このライブラリを自分のプロジェクトで使用するには、platform.iniファイル(プロジェクト作成時に自動で生成されます)に以下の記述を追加します。

lib_deps =
     # Using library Id
     1851

     # Using library Name
     M5Stack

     # Depend on specific version
     M5Stack@0.2.2

     # Semantic Versioning Rules
     M5Stack@^0.2.2
     M5Stack@~0.2.2
     M5Stack@>=0.2.2

今回は、以前Arduino用に作成したブロック崩しを移植してみました。
LCDが縦横逆ですが、解像度自体は変わりませんので、LCD、サウンド、ボタン周りの修正で済みました。
(2018/8/14追記:画面が縦横逆なのは修正しました)

コードは以下にアップロードしてあります。

boochow/breakout-m5stack

PlatformIO、なかなか良いです。何といってもエディタがVS Codeなのが良いですね。
デバッグ機能は有償らしいですが、そのうちどんなものか調べてみようと思います。

M5Stack FIREのファームウェアはM5GOのものでした


psRAMが無事使えるようになったM5Stack FIREですが、もともと入っていたファームウェアは消えてしまいました。
これはどこかに提供されていないのか、探してみたのですが、どうやらそもそもFIREには専用のファームウェアはなく、M5GO用のものがインストールされていたようです。
ファイルは以下で提供されています。

m5stack/M5GO

上記で提供されているv0.15をFIREにインストールしてみたところ、購入時と同じ状態になりました。
購入時のファームウェアからUARTへ出力される起動メッセージは保存してあったのですが、上記のファームウェアの出力はSPIFFSの利用状況やMicroPythonのバージョン・ビルド日時も含めて全く同じです。
ですので、おそらくこれが初期ファームウェアだったと思われます。

で、「あれ?M5GOFIREってモーションセンサに違いが無かったっけ?」と疑問が湧いたのですが、このファームウェアでも起動時のジャイロの動作デモ(Nextを何回か押すと出てくるもの)は問題なく動作しました。

調べてみると、M5GOもFIREもジャイロ&加速度センサ自体は同一(MPU-6050)で、コンパスがM5GOはANK8963、FIREはMAG3110になっているようです。そして、M5GOに搭載されているMPU-9250の実体はMPU-6050+ANK8963なのでした。

I2Cでデバイスの接続状況を調べてみたところ、

>>> from machine import I2C
>>> import i2c_bus
>>> i2c=i2c_bus.get(i2c_bus.PORTA)
>>> i2c.scan()
[14, 104, 117]
>>> 

MPU-6050(addr=104)は接続されていますが、ANK8963(addr=12)は接続されておらず、代わりにMAG3110(addr=14)が接続されています。

ただ、ANK8963はMicroPythonのドライバがあるのですが、MAG3110については不明です。

というわけで、M5Stack FIREとは

・FIRE≒(M5GO – 各種センサ類 – ANK8963 )+ 4MB psRAM + MAG3110
・ソフトウェアは同じ(現時点psRAMは無効)

ということのようです。