[M5Stack] 久しぶりに再開

【この記事の所要時間: 721秒】
M5Stack CoreS3とBasic V2.6

久しぶりにプログラミングをしたくなった。
センサーなどからの入力情報を処理して表示したり外部機器に反映するような、いわばIoT的な使い途を学ぶのも良いかな…と。

手元には現在特に使っていないRaspberry Piが5台(4B+×3、3B+、Zero 2 W)有るが、入出力機器(ユニット)の接続とプログラミングが容易なM5Stackシリーズを選択。
入出力機器の種類が豊富で、接続はGroveコネクタを挿すだけ、プログラムも対応ライブラリが揃っているため取っ付き易い。
ただ、手持ちのM5Stack BasicはGrove端子がPort.A(I2C)一つだけなのでセンサー系に多いPort.B(GPIO)とPort.C(UART)が使えない。

各Portの詳細や各ユニットとの対応については、マルツのサイトが大変参考になる。
⇒『「M5Stackシリーズ」×「Grove拡張ユニット」組み合わせ方超入門

M5Stack CoreS3

それならPort.BやPort.Cにも対応したモデルを1台新調すればいい…というわけで選んだのがM5Stack CoreS3
Port.A(I2C)/B(GPIO)/C(UART)三種のGrove端子の他に、30万画素カメラや照度・近接センサー、6軸MIU(3軸加速度計+3軸ジャイロスコープ)、3軸地磁気センサー、スピーカー、ステレオマイク、マルチタッチ対応タッチパネルが搭載されたテンコ盛りモデル。
外部給電は従来のUSB-C経由に加えて、付属のDIN BASEを使えばAC/DCアダプタ(9~24V)にも対応しているし500mAh/3.7Vのバッテリーも内蔵されている。

正面:2.0インチIPS液晶(320 x 240)、マルチタッチ対応静電容量式タッチパネル
ディスプレイの下には左からマイク(L)、カメラ(30万画素)、照度・近接センサー、マイク(R)
ディスプレイには保護フィルムを貼付している。

今回併せて幾つかのモジュール(Core2用ポート拡張モジュールCoreS3用バッテリーボトムGo/FIRE用チャージベース)を購入して組み合わせている。

  • ポート拡張モジュール
    Port.B/C/D/E ※Port.D/EはUIFlowで使用可。
  • バッテリーボトム
    500mAh/3.7Vバッテリー内蔵(チャージベース経由で充電可)
    Port.B/C
    赤外線送信用LED
    プログラマブルRGB LED(左右それぞれ5個)
  • チャージベース
    バッテリーボトムと磁力吸着し、ポゴピンで接続して給電する。

CoreS3自身に搭載されているカメラや各種センサーに加えて、モジュールによる外部I/Fの追加は非常に大きい。

前面:microSDカードスロット、リセットホール、リセットボタン(CoreS3)
GPIO(ポート拡張モジュール)
充電インジケーター[充電中:赤色点灯/充電完了:緑色点灯](バッテリーボトム)
右側面:小型スピーカー(CoreS3)
プログラマブルRGB LED(バッテリーボトム)
左側面:電源ボタン、USB-C端子、Port.A(CoreS3)
Port.D/E(ポート拡張モジュール)
プログラマブルRGB LED(バッテリーボトム)
後面:Port.B/C(ポート拡張モジュール)
Port.C/B(バッテリーボトム)
USB-C端子(チャージベース)
底面:バッテリーボトムとチャージベースは磁力吸着し、下部に有る4本のポゴピンで接続される。
撮影の関係でベースが小さく見えるけれど、もちろんフットプリントは同じ。
ポゴピン部分を拡大…実際の使用時はピンと受け側が向かい合わせに結合する。

DIN BASE

前面:AC/DCアダプタ用DCジャック(Φ5.5/Φ2.1)、電源スイッチ(内蔵バッテリにも有効)
右側面
左側面:RJ45用と思われる目隠し板。
他モデル(M5Stack CoreMP135)に付属しているDIN BASEにはこの部分にEthernet端子が有る。
後面:Port.C/B
底面:DINレールへの装着や壁面などへの固定を想定した構造。
DINレール装着用のパーツも付属している。
今回装着した二つのモジュールは合わせるとDIN BASEとほぼ同じ厚さのため、元の固定ネジをそのまま使用出来る。
やはり、ポート拡張モジュールのポート配置だけが変。

M5Stack Basic V.2.6

正面:2.0インチTFT液晶(320 x 240)
ディスプレイの下には3個の物理ボタンが並ぶ。
こちらもディスプレイには保護フィルムを貼付している。

やはり手持ちのBasicでもPort.B/Cを接続出来るようにしたい…というわけで、こちらにもモジュール(HMIモジュール)を追加。
このモジュールはPort.B/Cの他にも名称(HMI…Human Machine Interface)の通りUI機能(プッシュ対応ロータリーエンコーダー、プッシュボタンスイッチ×2、LEDインジケーター×2)が装備され、併せて500mAh/3.7Vのバッテリーも内蔵されている。

Port.B/Cの追加のみならM5GO/FIREバッテリーボトムが有るがHMIモジュールの方が安かった。
バッテリーボトムはUI系が一切無いがアナログマイクが装備され、チャージベースにも対応しておりバッテリー容量は同じ。

HMIモジュールを装着したBasicのPort.Aにユニット(ENVⅣ)を接続してUIFlowで簡単なプログラムを組んで実行すると"Invalid CRC calculated"エラーが頻発。
調べてみるとHMIで使用しているI2Cの接続ピン番号/アドレスがBasicのPort.Aと同じなため干渉している模様。
一方のアドレスを変更するか、I2Cを使用せずPort.B/Cを追加するバッテリーボトムに換装するか…思案中。
HMIモジュールのロータリーエンコーダーやプッシュボタンスイッチの可能性も捨て難いので悩む。

他に、スタンディングベース(温度・湿度センサー搭載)を装着している。

※前面はmicroSDカードスロットのみなので写真は無し。

右側面:小型スピーカー(Basic)
GPIO(Basicボトムカバー)
左側面:電源/リセットボタン、USB-C端子、Port.A(Basic)
ロータリーエンコーダー(プッシュ対応)、LED-A、PBSW-A、LED-B、PBSW-B(HMI)
GPIO(Basicボトムカバー)
後面:リセットホール(Basic)
Port.C/B(HMI)
GPIO(Basicボトムカバー)
スタンディングベース:給電用USB-C端子
スタンディングベースにはSPI/I2Cが接続され、温度・湿度センサーが搭載されている。

開発環境セットアップ

以前とは異なるPCのため、開発環境(Arduino IDE、Visual Code Studio/PlatformIO、UIFlow)を新規にセットアップする必要が有る。
必要なソフトウェアやセットアップ手順については先達の方々が大変詳しく解説されているので、そちらを参考に滞り無く完了。

ところが…セットアップ後に数回試した際は問題無かったが、その後Arduino IDEとVCS/PlatformIOでビルドするとPCがシャットダウンしてしまうようになり一時中断中。
シャットダウンするようになったタイミングはWindows Updateの適用後、他にはシステムはおろかアプリ関係でも特に追加や変更は行っていない。
アプリが落ちる程度ならともかく、PC自体が突然シャットダウンしてしまうのは不安過ぎる。
現在は開発環境を全て(UIFlowはWebアプリなので除く)アンインストールし、再インストールするか思案中。

UIFlowは特に問題無く使えているようなので、暫くはこちらで進めよう。
ただ、CoreS3に対応しているUIFlow2はUIFlow1に比べてユニット/モジュールの対応が今ひとつで、特にCoreS3の内蔵カメラ(センサーも?)に対応していないのが残念。
また、UIFlow2は言語設定を日本語にしても英語表記のままなので使い勝手も今ひとつ。