前回 m5stack の環境設定だけやってみましたが、購入前からやってみたかった顔表示を試してみたいと思います。と言っても @meganetaaan さんがライブラリを公開されているので、表示するだけならすぐにできてしまいました。
ライブラリのインストール
Arduino IDE にライブラリをインストールするには、まず下記URLからライブラリの zip ファイルをダウンロードします。
https://github.com/meganetaaan/m5stack-avatar/archive/master.zip
次にダウンロードした zip ファイルを Arduino IDE のメニューからアップロードします。
これで Arduino IDE で m5stack-avatar ライブラリが使えるようになります。 Library Manager でも下記のようにライブラリが確認できます。
サンプルの実行
ライブラリが正しくインストールされていれば、 Arduino IDE からサンプルスケッチが選択できるようになっています。顔を表示するだけであれば basic を選択します。
あとはスケッチを m5stack にアップロードすれば、ディスプレイに顔が表示されるようになります。
表情をランダムに変更する
m5stack-avatar では普通の顔以外にもいくつか表情が用意されています。サンプルの中にはボタンを押すごとに順番に表情や画面の色を変更していくものがありますが、それをベースに一定時間ごとに表情をランダムに変更するようにしてみました。また、表情が普通の場合には事前に定義したフレーズの中からランダムに吹き出しで表示するようにしました。
#include <M5Stack.h> #include <Avatar.h> using namespace m5avatar; Avatar avatar; const Expression expressions[] = { Expression::Angry, Expression::Sleepy, Expression::Happy, Expression::Sad, Expression::Doubt, Expression::Neutral }; const int expressionsSize = sizeof(expressions) / sizeof(Expression); int idx = 0; const char* phrases[] = { "How are you?", "Hungry...", "I'm bored." "What's time?", "Did you say something?", "It's time." }; const int phrasesSize = sizeof(phrases) / sizeof(char*); int phrase_idx = 0; void setup() { M5.begin(); M5.Lcd.setBrightness(30); M5.Lcd.clear(); avatar.init(); } void loop() { M5.update(); idx = rand() % expressionsSize; Expression expression = expressions[idx]; avatar.setExpression(expression); if (expression == Expression::Neutral) { phrase_idx = rand() % phrasesSize; avatar.setSpeechText(phrases[phrase_idx]); } else { avatar.setSpeechText(""); } delay(30000); }
これを実行すると下記のように吹き出しでメッセージを表示したり色々な表情に切り替わって行きます。
まとめ
顔が表示されるようになるとそれだけで何か愛着が湧いてくるから不思議ですね。今はただ表情を変えてるだけですが、実用的な機能も追加してアシスタントっぽくして行けないかなーと思ってます。もしくは個人的には C++ よりも MicroPython の方が好きなので、 MicroPython でもアバターっぽいものが作れないかなーと考えています。