M5StackおよびM5StickCを買ってみた

最近流行りのM5StackだかM5Stickだかいうやつを買ってみた。

M5なんとかというのは、ざっくり言うとWi-FiとBluetoothの使えるマイコン(ESP32)に液晶ディスプレイやらボタンやらバッテリーやらを付属させたモジュールである。これ単体があれば、Lチカじゃない本物の「Hello world!」が可能となる。すごい。

似たジャンルのマイコン/コンピューター類としてはArduinoやRaspberry Piなどがある。ArduinoとM5Stackの違いは、ArduinoでWi-FiやBluetoothを使うには別途シールド(拡張ボード)が必要なのに対して、M5Stackは搭載されているマイコン(ESP32)自体にWi-FiやBluetoothの機能が組み込まれていることである。

Raspberry Piとの違いについて。Raspberry Piは、その辺のパソコンやサーバーと同じようなOS(Linux等)が動いて、ユーザーが書くプログラムはその上で動く。なので、アプリケーションからGPIOを叩く場合はsudoで実行したり、デバイスの権限を変える等の措置が必要となる。これに対し、M5StackやArduinoには重厚なOSのレイヤーはなく(よく知らないけど、リアルタイムOSみたいなやつはあるのかな?)、ユーザーが書くプログラムは割と直接ハードウェアの上で動く。

電子工作・IoTをやるときにどれを使うかについて。Apache等のWebサーバーや、各種デバイスに対するUSBドライバーのようなソフトウェア資産をそのまま動かしたかったらRaspberry Piが必要になるし、そうじゃなかったらM5StackやArduinoでも十分かもしれない(M5StackやArduinoでもWebサーバーを書くこと自体はできるようだ)。

閑話休題。

今回買ったのは、「M5Stack Basic」「M5StickC」および「M5Stack用赤外線送受信ユニット」「M5Stack用プロトモジュール」「M5Stack用電池モジュール」「SideBB for M5Stack」「M5Stack用ユニバーサル基板セット2」である。いずれもスイッチサイエンスで購入できる。このほか、ノリで「M5StickV」も買っているが、M5StickVについては今回は扱わない。

M5Stackは、文字通りモジュールを「重ねて (stack)」拡張することができる。M5StickCは裏側に「重ねる」ことはできないが、本体前方にピンソケットがあって「Hat」と呼ばれるモジュールを挿して拡張できる。このほか、M5StackとM5StickCのいずれも、Groveと呼ばれる規格(?)のモジュールをつなぐためのソケットがついている。

(こういう、モジュールをつなげて(はんだ付けの必要なしに)モノを作っていくというのは、筆者が子供の頃に遊んでいたLEGO Mindstormsを彷彿とさせる。Arduinoも既製品のシールドを使えばはんだ付けの必要はないかもしれないが、M5Stackは「いかにも電子部品」な部分がケースで「隠れる」ために殊更LEGOを想起させるのかもしれない。ちなみにM5Stack系の製品にはLEGO用の穴(ポッチじゃなくて、テクニック系のペグを挿す穴)が空いているものがある。)

今回買ったM5Stack用の「重ねる」モジュールは、プロトタイピングに便利なものをいくつか(ブレッドボードが乗ったもの、ユニバーサル基板が乗ったもの)と、標準のものに比べて大容量の電池、である。Grove規格のモジュールとしては、赤外線送受信ユニットを買った。M5StickC用のHatは買っていない。

M5StackとM5StickCのいずれも、Arduino IDEを始めMicroPythonやらUIFlowやら、数種類のプログラミング環境に対応している。筆者はC++の使用経験があるので、Arduino IDEでプログラムを書くことにする。

Arduino IDEをM5Stack/M5Stick-Cで使うためのセットアップ手順は

を参照すれば良い。

M5Stack Basic用のHello worldは

#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Power.begin();
  M5.Lcd.print("Hello world!");
}

void loop() {
}

という感じになる。M5StickCの場合は

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Power.begin();
  M5.Lcd.print("Hello world!");
}

void loop() {
}

となる。M5Stack と M5StickC では #include するヘッダーの名前が違うので注意。

(Hello worldはM5StackのGitHubリポジトリにも置かれている: M5Stack用M5StickC用。これらのリポジトリはそれぞれのArduino用ライブラリのリポジトリで、M5Stack.h や M5StickC.h のコードを読みたかったら同リポジトリを見れば良い。)

筆者は当初M5StickCにM5Stack用のHello worldを書き込んでしまい、LCDが点かない状態に陥ってしまった。Macからもシリアルポートが認識されなくなったので文鎮化したかと焦ったが、Windowsからはシリアルポートが見えて無事プログラムを上書きできたので事なきを得た。この際に参考にさせていただいたページをいくつか挙げておく:

結局その後もMacからはM5StickCのシリアルポートが認識されないままである(USBデバイス自体は M5 Serial Converter という名前で認識されているが、 /dev/tty.ナントカ というデバイスファイルが出現しない)。M5Stackの方は問題ないのだが…。

M5StackやM5StickCを使った簡単な作例についても書こうと思ったが、長くなりそうなので別の記事にする。


M5StackおよびM5StickCを買ってみた」への1件のフィードバック

  1. ピンバック: M5StackおよびM5StickCを一眼レフの赤外線リモコンにする | 雑記帳

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です