M5Stack のアバターを試してみる

 前回 m5stack の環境設定だけやってみましたが、購入前からやってみたかった顔表示を試してみたいと思います。と言っても @meganetaaan さんがライブラリを公開されているので、表示するだけならすぐにできてしまいました。

github.com

ライブラリのインストール

 Arduino IDE にライブラリをインストールするには、まず下記URLからライブラリの zip ファイルをダウンロードします。

https://github.com/meganetaaan/m5stack-avatar/archive/master.zip

 次にダウンロードした zip ファイルを Arduino IDE のメニューからアップロードします。

f:id:akanuma-hiroaki:20180818204126p:plain

 これで Arduino IDE で m5stack-avatar ライブラリが使えるようになります。 Library Manager でも下記のようにライブラリが確認できます。

f:id:akanuma-hiroaki:20180818204351p:plain

サンプルの実行

 ライブラリが正しくインストールされていれば、 Arduino IDE からサンプルスケッチが選択できるようになっています。顔を表示するだけであれば basic を選択します。

f:id:akanuma-hiroaki:20180818205920p:plain

 あとはスケッチを m5stack にアップロードすれば、ディスプレイに顔が表示されるようになります。

f:id:akanuma-hiroaki:20180818211118j:plain

表情をランダムに変更する

 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);
}

 これを実行すると下記のように吹き出しでメッセージを表示したり色々な表情に切り替わって行きます。

f:id:akanuma-hiroaki:20180818212147j:plain

f:id:akanuma-hiroaki:20180818212226j:plain

f:id:akanuma-hiroaki:20180818212337j:plain

まとめ

 顔が表示されるようになるとそれだけで何か愛着が湧いてくるから不思議ですね。今はただ表情を変えてるだけですが、実用的な機能も追加してアシスタントっぽくして行けないかなーと思ってます。もしくは個人的には C++ よりも MicroPython の方が好きなので、 MicroPython でもアバターっぽいものが作れないかなーと考えています。