WICの中から

機構設計者が株式投資や育児に奮闘するblog

M5Stackで連邦に反省を促すダンスを再生してみた

何かを変えたいと思った時は環境を変えると良い。そんなわけでボヤッと過ごすフリータイムを終わらせるため、今更ながらM5Stackを買いました。買ったからには何かしなければ、という気になるので散財は正義ですね。

M5Stack Gray(9軸IMU搭載)

M5Stack Gray(9軸IMU搭載)

  • スイッチサイエンス
Amazon

M5Stackには元からLCDがついているということで、手始めに動画再生をトライしてみました。動画再生と言いつつ動画ファイルを再生するわけではなく、イメージファイルの連続表示です。いわゆるパラパラ漫画ですね。

f:id:temcee:20210808220125j:plain

いつもどおり備忘録がてら手順とコードを残しておきます。

動画をJpgに変換

まずは再生する動画をJpgに変換します。今回は偽マフティの連邦に反省を促すダンスを使わせていただきました。

やっちゃいなよ!そんな偽物なんか! - ニコニコ動画

閃光のハサウェイ見に行きたいなー。

Jpgへの変換は"Free Video to JPG Converter"を使いました。

Free Video to JPG Converter 5.0.92.607 用 Windows - ダウンロード

シンプルなGUIで、一定フレームごとに画像を抜き出す事が可能です。

f:id:temcee:20210808221346p:plain

M5 stackのディスプレイサイズは320×240なので、最大限表示させる場合は"縮小専用"などでサイズ変更してください。

「縮小専用。」定番の複数画像一括縮小ツール - 窓の杜

これで大量に偽マフティ画像が得られました。これらを連続再生するとM5Stackで連邦に反省を促すダンスが流れるわけです。

f:id:temcee:20210808222359p:plain

SDカードにデータを入れてM5Stackに突っ込み、前準備完了です。

コード

ファイル名の取得の仕方がわからなかったので力技で実装です。
ファイル数もファイル名も把握できているので、事前にそれを知っている事ありきで書いています。中のファイル数だけfor文を分まわし、インクリメントされているファイル名を文字列足し合わせてM5.Lcd.drawJpgFile のパスに入れています。応用性ゼロです。

#include <M5Stack.h>
void setup(){
  M5.begin(); 
  M5.Power.begin(); 
}

void loop() {
  String filename;
  for (int i = 1; i < 507; i++){
    if(i < 10){
      filename = "/Mufti/Mufti 00";
    }else if(i < 100){
      filename = "/Mufti/Mufti 0";
    }else {
      filename = "/Mufti/Mufti ";
    }

    filename += i;
    filename += ".jpg";

    Serial.println(filename);

    int str_len = filename.length() + 1;
    char filename_array[str_len];

    filename.toCharArray(filename_array, str_len);
   
    M5.Lcd.drawJpgFile(SD, filename_array);
  }
}

Arduino sketchでの文字列とdrawJpgFileの仕様にハマる

Arduino sketchはあまり触れた経験が無く、文字列の取り扱いでハマりました。

まずは文字列の結合、特にint型を文字列に入れ込む方法。これはそのまま filename += i;でいけました。

次にdrawJpgFileの引数、String型のfilenameをそのまま渡すと駄目で、char型の配列に入れ直しています。

結果

まとめ

M5Stackはじめました。

動画流すくらいなら簡単にできるかなと思っていましたが、意外と手こずりました。手を動かすと頭で考えているようにはいかないですね。

drawJpgFileを使った連続再生だと思ったより速度が出なくてカクカク感があります。調べてみると高速化されている方もいて、そちらも試してみたのですが何故かうまく動かず原因解析も時間かかりそうだったので保留中。

ごちゃごちゃ試している間に入門書も届いたので、一通り本に習ってみてから今後なにかやっていければなと思っています。

参考にしたリンク

【M5Stack】パラパラ漫画をLCD表示させる方法 & JpgLoopAnime_Simple.verのご紹介 | Haratta Tech Lab

string — ArduinoでintまたはStringをchar配列に変換する

M5Stackを使ってみる - Attic or Garret

string — ArduinoでintまたはStringをchar配列に変換する

Arduino 日本語リファレンス