M5AtomLiteを使ってみる
 M5AtomLiteはなかなかの小型だが、機能は高い。GPIOピンもそれなりに豊富で拡張性もある。より多くのピンがあるstampなんてのも出ているけれど、それより安価だ?! これを使いこんでみよう。

 今のところ、ライブラリはTFT_eSPIを使っています。User_Setup.hで、どのように液晶とM5AtomLiteのピンをつなぐかを指定します。私の場合は、TFT_MOSI 23、TFT_SCLK 33、TFT_CS 25、TFT_DC 22、TFT_RST 19 としています。また、ST7735を使ったどの液晶かも指定します。購入したときに液晶面保護のフィルムについているタブの色で指定するようですので、しっかりとみておかねばなりません。私は無意識に捨ててしまったので、後に購入履歴で確認しました(^^;) ST7735_GREENTAB160x80でした。

 さらに、TFT_Driversフォルダ内にある、ST7735_Rotation.h内の switch (rotation) { で、case0〜3 において、colstartとrowstartを試行錯誤で適切に指定しないと、画面に不要線が出現します。

 その他にもあったかもしれないけれど、忘れています(^^;)


R4.8.27 AquesTalkが加わった

 実は、以前から分かっていたことだけど、面倒なので最終手段と考えていたこと。マルチタスク。これに挑戦しました。

 TFT_eSPIのexampleであるTFT_Flash_Bitmapを基本に、目の部分と口の部分とで xTaskCreatePinnedCore() を2つ使いました。遠回りしてここに帰着。

 AquestalkTTSはダメだったので、aquestalk.hを使うことで達成!(^^)

 こんな風になりました。

 参考にしたのは、「M5Stack マルチタスク」でグーグル検索して、ソンフン セルゲイさんとTeppei_sさんの記事。特に、Teppei_sさんの「while (1) // マルチタスクの処理は終了してはいけない」は、「なるほど〜」と。初心者はこういうところが嬉しい。そして、多少分かったところで、たなかまさゆきさんの「M5StickC(ESP32)でのマルチタスク利用例」。勉強になります(^^)/

 次の目標は、音に合わせて口パク。できるかな?


R4.8.22 AquesTalkを加える

 いつの間にか、ESP32ボード2.0.4ではAquestalk使用時には1.0.6のようにplatform.local.txtを加える必要がなくなっていました。AtomLiteでもそのまま使えました(^^)/

 Aquestalkを外部のI2Sで使う時には、AquesTalk.cppの後半部分、I2S DAC のところで、赤線のところを下のように変更し、ピン配置を赤枠のように設定するようですね。これはAquesTalkTTSでも同じだと思います。他にも要修正部分があるかな?

 ただ、以前の顔の動きスケッチで使用すると、無言です(^^;) リップシンクロしてみたいのに.....

 AquestalkTTSを使うと、「ADC: adc1_lock_release」「lock release called before acquire」等が出てきて、無言のまま(^^;) この後しばらくは成果なしです。


R4.8.19 基板にまとめる

 注文していた基板が届いたので、配線を確認して基板にまとめました。本当は、M5AtomとTFT液晶を基板の裏表にしたかったのだけど、ミスをしたので安全を狙って双方を同じ面にしました。下の図は配線の確認用

 こんな感じ。


R4.8.18 Avatarに進む

 一番の目的が、M5AtomLite+ST3375でのAvatar(風でも可)なので、いよいよトライしてみることに。

 ただ、lovyanGFXでAvatarは現段階では無理なので(^^;) TFT_eSPIサンプルのTFT_Flash_Bitmapで似た風にしてみようかと。

 こんな風になりました。

 TFT_eSPIライブラリの中のTFT_FLASH_Bitimapというexampleと Mukujiiさんの「Arduinoのマルチタスクについて」を参考にやってみました。皆さんありがとうございました(^^)/


R4.8.17 LovyanGFXの設定

 ArduinoIDEでSPIFFS領域のBMPとJPGファイルをLovyanGFXをライブラリに使ってTFT液晶に表示させようとしたら、うまくいきませんでした。原因はSPIFFS.hをLovyanGFX.hppよりも前にincludeしなかったからでした(^^;) 順番が大切らしい。


R4.8.16 LovyanGFXの設定例

 どんなライブラリィもスケッチもそうだけど、使用するマイコンや外部装置に応じた設定をすることが大事ですね。ただ、最初にその設定をするのが大変。メジャーなものなら設定例はあちこちで見つかるけれど、マイナーなものやマイナーな組み合わせをすると恐ろしく大変。私のような初心者は尚更です。ライブラリィにコメントが入っていたり、基本的なサンプル、1サンプルに1機能というようになっていると助かるのだけれど、てんこ盛りだと応用不可能(^^;)

 一応、LovyanGFXサンプルスケッチをAtomLiteとTFT液晶ST7735Sの組み合わせで動かすための、私の環境での設定例。動いているから、これでOKなんだろうということで。

 たなかまさゆきさんの「LovyanGFX入門 その10 外部LCD接続」をつい先ほど発見! もっと早くたどり着いておけばこれまでの苦労が軽減されていたのに! 記事を読ませていただいて、さらに勉強します(^^)


R4.8.15 LovyanGFXを使う3

 やはりLovyanGFXのサンプル、LongTextScroll。動体視力も弱いので読みにくいが、ありゃ簡単に日本語表示ができているじゃないか。素晴らしいライブラィをありがとうございます、 lovyan03さん(^^)/

 ここで見ることができます。

 こんなこともできました。当たり前か(^^;)


R4.8.15 LovyanGFXを使う2

 気を良くして、LovyanGFXサンプル、4_unicode_fonts中のarduino_misaki.inoを実行。IDEではコンパイル中だったけれど、TFT液晶にはこの画面が表出。コンパイルできてました(^^;)... 老眼なので、実用になりませんね。露出オーバーになるので、画面部分のみ。


R4.8.15 LovyanGFXを使う

 M5AtomLiteとST7735の関係で検索していたら、大分前の紅樹タカオさんの「M5AtomでLovyanGFXのサンプル動いた」というツィートを発見! 挑戦してみました。試行錯誤の挙句できたような? 少々オフセット値をミスってますが.....。紅樹さん有難うございました!


R4.8.13 アクエストーク再生をする

 アクエストークも動きます(^^) esp32ボード1.0.6ですので、tanakamasayukiさんのplatform.local.txtを作成して指定フォルダに入れ、I2Sのピン配置をきちんとすれば鳴るんですね(^^) 有難うございます! 雑音は扇風機です(^^;)

 ここで見ることができます。


R4.8.11 WebRadio再生をする

 MP3再生が成功すれば、次は当然WebRadio。M5Stackでは鳴らせたのでいい追加練習になるかと。といっても一から自前は無理なので、kilamrauon さんのM5Atom-web-radiosを使わせていただきました。ありがとうございます! あれこれ改変して鳴りました!


R4.8.10 MP3再生をする

 いよいよmp3ファイルの再生に着手。これまで、失敗ばかりで再生の目途が立っていなかった。

 TFT液晶でLiteのGPIOピンをかなり使ったので、残っているのはあと3本。GPIO21・26・32だ。ところが上手いことに、この3本さえあれば、MAX98357A搭載 I2Sオーディオモジュールを配線することができることがわかった。そこで、スイッチサイエンスさんに注文。即配送してくれたのでありがたかった。

 ここで見ることができるます。

 WebRadioとTFT液晶の両方を実行してみました。音声がバチバチします(^^;) まあ、できたということで満足しようかな。液晶画面が見えるようにビデオ画面は暗くしています。

 ここで見ることができます。

 私個人の環境でできたことなので、他の方の環境で再現できるかどうか。

 arduinoIDE1.8.19の環境。再生サンプルをコンパイルすると途中でフリーズ? 最初の方で進展しなくなってしまう。翌日まで待てばコンパイルされているかもしれないが、30分で中止。これまで実績のある解決策、esp32ボードドライバを1.0.6に変更。すると、コンパイルが進む。

しかし、esp8266audio内でのこれまでも良く見たエラーが続出し中断。これも古いバージョンを使えば可能かも?! ということで、1.8.0に変更。

 最後までコンパイルできそうだったが、最後の最後で、Atomに書き込めない! そこで、これも経験済みだった、M5Atom.h関連を削除。M5Atomじゃないよとあやふやな態度を取ってみる。すると、MP3再生成功!

 でもボタンが使えないんじゃない? それはまた必要になった時に解決すればいい(^^;)

ここで見ることができるけれど、音声が大きくなったり小さくなったり.....これもいつか解決するということで。


R4.8.9 漢字を使えるようにする

 折角なので日本語も表示したい。常用漢字に限定するとファイルサイズが小さくなってSPIFFSに収まると予想される。Processing3を使ってメイリオ16ドットのvlwファイルを作成。SPIFFSに入れられる610KBに収まった。

 これで、普通の文章なら表示できるということになった。


R4.8.9 SPIFFSを活用する

 SDカードを使えないので、SPIFFSを使ってみようと思う。取りあえずBMP画像を入れて表示してみる。

撮りためた惑星の画像

 環境によっては、RBG・GBR問題もある。赤と青が反転する問題だ。私の環境では、# define TFT_RGB_ORDER TFT_BGR の記述が必要だった。  さらに、よく見ると余分なラインが上と左に入っている。これは、User_Setup.h を作成して解消する。

 順にたどると、User_Setup.hで#define ST7735_GREENTAB160x80。ST7735_Defines.hで#define TAB_COLOUR INITR_GREENTAB160x80と#define CGRAM_OFFSET。次にST7735_Init.hでcolstartとrowstartを設定し余分なラインを消す。それだけだと、電源落とすと元に戻ってしまったのだが、もう一つ、ST7735_Rotation.hの中でcolstartとrowstartを設定しなければならなかった。tft.setRotation(3);を使っているからだった(^^;)

 ここまで出来ると、画像を複数入れて、パラパラ動画を再現して楽しむことができる。例えば、「会津大によるリュウグウの形状モデル」のGIF画像【画像クレジット:会津大, 神戸大(形状モデル作成), Auburn University(動画作成), JAXA】をパラパラ再生。

 火星の自転


R4.8.8 ライブラリィをTFT_eSPIに切り替える

 Adafruitのライブラリィよりも沢山のサンプルがあるTFT_eSPIに切り替えることにしました。このライブラリィでも、#include を使わないことで動作させることができました。

 ユーザーの設定さえ作ってしまえば、ほぼどのサンプルでも動きます。こんなのとかこんなの


R4.8.6 画面を与える

 M5Atomに画面とスピーカーを付けようと思う。スピーカーキットとディスプレイユニットを購入すればいいのだが、それにしては少々高くなる(^^;) そこで、TFT液晶を1000円未満で購入。サイズとしては、160x80の大きさ。M5StickCと同じだ。

 Adafruit_ST7735_and_ST7789_Libraryを使ってみたのだが、Atomでは多少画面は明るくなるものの動作しない。壊れてる?とArduinoUNOでやったら、動作した(^^;) ということは、使用者のミスだ。

 いろんな試行錯誤をして、#include を捨ててみると表示できるようになりました。