M5StickCとScratchで遊ぼう
https://gyazo.com/a8a57b3f4c968a10381142558ab3513c
はじめに
ここでは、M5StickCとScratch Remote Sensorを使って遊んでみます。
M5StickCってなあに?
https://gyazo.com/9055c595042ccb0f95725c1ff01af377
M5StickCのパッケージ
M5StickCは、様々な機能(後述)やI/Oが簡単に利用できるように一つのパッケージにまとめられたIoTマイコンデバイスです。
M5StickCを手に入れるだけで、フリーの開発環境で様々な機能やI/Oを使って、簡単にIoTデバイスを作ることができます。
ざくっと言うと、M5Stackの(かなり似ている)弟分
M5StickC=M5Stackの諸機能変更版+LED+IR送信
仕様変更: 80x160ディスプレイ, ボタンスイッチx2, マイク, バッテリー,スピーカー
M5Stackは、ESP32の弟分(機能拡張版)
M5Stack=ESP32+(無線LAN+)Bluetooth+320x240ディスプレイ+ボタンスイッチx3+スピーカ+バッテリー+I2C+microSD+I/O PORT+BUS PORT(+9軸センサ+UART+IR送信+LEDバー)
ESP32は、無線LANが使えるArduinoマイコン
ESP32=Arduinoマイコン+無線LAN
M5StickCの付属物
USB-Cケーブル
3種類のマウント
腕時計型マウント(ベルトも含む)
壁掛けマウント
LEGO互換マウント
似たような機能をもつM5Stack Grayと比較した仕様の詳細は、以下の表をご覧ください。
table:M5StickCとM5Stack Grayの仕様比較
M5StickC M5Stack Gray 備考
価格 1980円 4290円 switch-science 2019/12/02調べ
大きさ 48 × 24 × 14mm 54 × 54 × 17 mm
画面(LCD) 0.96インチ 80×160 TFT 320x240 TFT
ボタン 2ボタン、1リセット 3ボタン、1リセット
IMU 加速度+ジャイロ(6軸) 加速度+ジャイロ+地磁気(9軸)
LED 赤色LED 無し
赤外線 送信(リモコン機能) 無し
音声 マイク スピーカ
microSD 無し 1
ネットワーク 無線LAN/Bluetooth 無線LAN/Bluetooth
バッテリー 80mAh 150mAh
拡張機能 Grove, GPIO Grove, I/O, BUS
ソフトウエアは、以下のような環境で作成可能です。
ソフトウエア開発環境
UIFlow: Scratchのようなブロックベース(Blocky)のプログラミング環境 Arduino IDE(C,C++)
UIFlow:ブロックベースのプログラミング環境
https://gyazo.com/f4130e6319ea07ed34c0241d4e456bb4
UIFlowの画面(画面はM5Stack用)
M5StickCで、一番簡単にプログラミングできる方法は、おそらくUIFlowを使うことです。
ブロックベースのプログラミング言語で、ブロックを並べていくだけで、プログラムを作ることができます。
簡単にプログラミングできるだけでなく、プログラムをM5StickCに転送することなく、プログラムを実行する機能も持っています。
Scratchやmicro:bitのように、ブロックでプログラミングする(Blocklyベース)
M5StickCにプログラムを転送しなくても実行できるし、転送してM5StickCだけでも実行できる
ブロックで提供されていない機能を使いたい場合は、MicroPythonでのプログラミングもできる
Arduino IDE
https://gyazo.com/0f1cd46172def74ab7fcadf4182a612c
Arduino IDE
Arduino IDEは、C/C++ベースのプログラミング環境です。
基本的に、初期化をsetup()関数で行い、ループごとに実行する内容をloop()関数に記述します。
Arduino IDEでは、様々なArduino互換ボード用の設定が提供されています。
もちろん、M5Stack/M5StickC用の設定も提供されています。
ここでは、M5StickCを使うための初期設定などは説明しませんのでご了承ください。
Life Gameなどの様々なデモも提供されているので、一度、ひととおりのデモを試してみると良いでしょう。
Scratch1.4 Remote SensorとM5StickCで遊ぶ
https://gyazo.com/96802d12543895d7c3a5055cf0e66b7c
M5StickCを/とScratchで遊ぶ
Scratch 1.4 には、ネットワーク経由でScratchとデータの送受信をするRemote Sensor(遠隔センサー:以下SRS)という機能があります。
これは、Scratchが特定のポート(TCP 42001)で待ち受けをしており、簡単なプロトコルを実装することで、データのやり取りを行います。
SRSでは、変数のやり取りを行うこと(sensor-update)と、任意の文字列であるイベントのやり取り(broadcast)を行えます。
プロトコルの詳細などは、以前の発表をご覧ください。
むとうの昔の発表(最近のものから古いものへの順)
今回と同じように、M5StackでScratchと遊ぶ例です
SRSを、ESP8266ベースのWeMosボードで使ってみます
at 2017年02月11日(土) 関西*BSDユーザ会 第1回研究会
FreeBSDのScratch 1.4を使って、AndroidやESP8266やmicro:bitでSRSを使ってみます
AndroidとESP8266から、SRSを使ってみます
このSRS機能を使って、M5StickCとScratchの間で、M5StickCのI/Oデータや、Scratchからの変数の値のやり取りをしてみましょう。
今回は、Arduino IDEを使って、プログラミングします。
変数のssid, password, hostは、適宜、自分の環境に合わせて設定してください。
ScratchとM5StickCのデータのやりとりは、以下のようになっています。
ScratchからM5StickCへ
変数r,g,b: Red(赤), Green(緑), Blue(青)で指定された色を送る
変数s: sで指定された文字列を送る
変数l: LED点灯をlの値(0か1)で決める
M5StickCからScratchへ
センサー(ax, ay, az): x方向, y方向, z方向の加速度の値を送る
センサー(gx, gy, gz): x方向, y方向, z方向のジャイロの値を送る
イベントBtnA, BtnB: ボタンA, Bが押されたことを知らせる
(おまけ: M5Stack Gray (Faces)版の場合(→Scratch))
イベントBtnA, BtnB, BtnC: ボタンA,B,Cが押されたことを知らせる
イベント"Key_キー": キーボードのキーが押されたことを知らせる
これらのデータを使って、上の写真および下のYouTube動画のデモでは、以下のようなことを実現しています。
M5StickC側での動作
Scratchで作った乱数の変数r,g,bで決まる色で、M5StickCのディスプレイの色を変え、さらに値をディスプレイに表示する
Scratchで作った変数sの文字列をディスプレイに表示する
Scratchの変数lの値にしたがって、M5StickCのLEDを点灯・消灯する
Scratch側での動作
M5StickCの加速度データを変数ax,ay,azに入れ、変数ax,ayにしたがってScratch Catの位置を変更する
M5StickCのボタンが押された時BtnAというメッセージを送り、Scratch Catが歩いているように見えるようにコスチュームを変更する
デモの様子は、以下のYouTubeの動画をご覧ください。
https://www.youtube.com/watch?v=9VmtaLVe28o
これからやりたいこと
これで、M5StickCとScratchをつないで遊ぶことができるようになりました。
ただ、現状のプログラムでは、しばらく使っているとM5StickCの画面が止まってしまいます。
しばらくすると、復旧することもあるのですが、不安定なことに変わりはありません。
おそらく、通信がうまくいってないようなので、なおしたいと思っています。
おわりに
大きさがかわいい!!
本体に入っている機能が、ツボをついてる!!
付属品(特に腕時計マウント)が、ツボをついてる!!
Blocky(UIFlow)でもプログラミングできる!!
Scratchと遊ぶと、もっといい!!