最近流行りの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からはシリアルポートが見えて無事プログラムを上書きできたので事なきを得た。この際に参考にさせていただいたページをいくつか挙げておく:
- M5Stackの困ったときの対処や注意すること | ラズパイ好きの日記
- M5Stick-Cが起動しないと慌てる前に – Qiita
- M5StickCのトラブルシュート 動かないときに試すこと – Lang-ship
結局その後もMacからはM5StickCのシリアルポートが認識されないままである(USBデバイス自体は M5 Serial Converter という名前で認識されているが、 /dev/tty.ナントカ というデバイスファイルが出現しない)。M5Stackの方は問題ないのだが…。
M5StackやM5StickCを使った簡単な作例についても書こうと思ったが、長くなりそうなので別の記事にする。
ピンバック: M5StackおよびM5StickCを一眼レフの赤外線リモコンにする | 雑記帳