R5.4.15 AtomS3現状
結局、いろいろやって今は、Radikoに落ち着いています。
R5.4.9 メモリ情報
AtomS3でESP32S3DevModuleボードを使ってのChatGPTスケッチは77%使うようなので、サーボ関連を装着することに。でもやはりServoEasingでは動作しない。ServoEasingは中身多いし解読不能なので、単純に並列処理で行う。一応ランダムに動く。
最大2097152バイトのフラッシュメモリのうち、スケッチが1614989バイト(77%)を使っているのに対し、サーボを付加すると、スケッチは1615393バイト(77%)を使っているらしい。僅か404バイトの増加。百分率にすると変化なし。僅かな努力だったんだ。(^^;)
R5.4.7 ChatGPTに挑戦
M5StackでChatGPTをやったら、それなりにうまくいったので、AtomS3でもやってみようかと。
M5StackGrayと同じスケッチをM5AtomS3に書き込んでみた。ただ、M5Stack-ATOMS3のボードでは書き込める パーティションスキームがなかった(100%を超える)ので、以前使っていたESP32S3DevModuleボードNoOTA(2MBApp)を選択。動いたけれど、また声が出ない。どこかのファイルでI2Sピンをセットしなければならない。
残念なことに、M5Unified.cppには、ESP32S3DevModuleボードでのI2Sピン記述がなかった。そこで、M5Unifiedは使うけれど、M5Unifiedのspeakerの部分は諦めて、esp8266のAudioOutputI2Sを使うことに。これは、AtomS3で実績があったライブラリ。で、口パクはなかったけれど、ようやく喋ってくれた。
いろいろ読んだ結果、void lipSync(void *args)の部分で、*out.getBuffer();をout->getLevel();に変更することで口パクもできた。
そんなことをツイートしていると、らびやんさんにアドバイスをいただいた。M5.begin後に、スピーカの設定をしてやると可能らしい。そこで、書式が分からないので、あちこち参照して、見様見真似の書式で書いてみたら、M5Unifiedで完結した。声出し口パクOK。感謝です。
R5.4.3 新しい顔作成
オリジナルな顔で大きいものを作成した。背景画として、AtomS3の128×128サイズのjpg顔画像を作ってSPIFFSに入れておく。それをバックにavatorを動かせばいいのだ。
デフォルトのavatarではなくて、robo8080さんのM5Stack_WebRadio_Avatarで使われている表情とそのスケッチを使う。このケッチ内では、avatorになっていることに注意。
その顔を色反転させ、目や口の位置を確認して背景となっている顔の画像に重ねる。
同じ手法はM5Stackでも使えるの便利。やっているうちにだんだん慣れてくる。しかし、すぐに忘れる。忘れてもいったんスケッチに仕上げておくと、再度それを参考に新しいスケッチを作ることができるのだ。忘れることを恐れてはならない(^^;)
R5.3.23 VoiceTextは難しい
私には、AtomS3で滑らかなVoiceTextができそうもない。VoiceTextは能力の高いM5Stackがいいのではないかと思う。M5Unifiedを使えば、だいたいのM5Stack用のスケッチは、Atom3のピンや液晶サイズに合わせてやれば動くから、AquesTalkやRadikoがいいかな。
サーボを使って上下左右の動きをさせたのだけれど、超小型のサーボでホーンをねじ止めするときにシャフトをねじ切りしてしまったようで動かなくなってしまった。それに換えて新しいサーボを使ったけれど、今度はArminJoさんのServoEasingでは動かなくなってしまった。PWM を14bitで使うと動く。私のスケッチがいけないのかな? やはり、皆さんが使う実績のあるサーボがいいと思う、大きいけどね。
R5.3.20 次の目標
mongontaさんのM5Core2ImageAvatarLiteを実現したいな〜と、girl画像を1枚のbmpにまとめたものをSPIFFSに入れて表示。avatar仕様の動きができたらいいな、ということでこれから挑戦。難しそう...(^^;)
M5Core2ImageAvatarLiteの必要な画像ファイルをAtomS3用に縮小してSPIFFSに入れ、そのままinoファイルを書き込んでみたら、恐ろしいことにエラー無く書き込めてしまった(^^;) ただ、画面が若干反応したものの表示なし。画面サイズが1/4ほどなので表示しないなとは思ったが...jsonファイルの書き込み形式が違ったか? そもそもM5StackとM5AtomS3の液晶が違うからか?
とりあえず、たなかまさゆきさんの「M5Stack ATOM EchoにSPIFFSにmp3ファイルを埋め込んで再生する」を参照してAtomS3のSPIFFSにbmpとmp3を入れて再生してみた。jpgはできなかった(^^;)
R5.3.17 課題の解決
音声に反応した口パクと水色の目という2つの課題。
口パクは、robo8080さんの改善策AudioOutputI2S.cpp3カ所への追加のうち、最後の行。INTERNAL_DACでない私の場合は、その下に入れるのではなく、elseの方に入れるんだった。よく読まなければいけません(^^;)
もう一個の課題。uint32_t primaryColorとして色を受け取っていましたが、uint16_t primaryColorと16ビットで受け取ってやると、水色の目が白に変わりました(^^)/ M5AtomS3の液晶の色制限かなと。どこかで、18ビットまで...のようなことを見たかも。
ついでに、黒背景でなく、白背景にしてみました。単純に、定義するPRIMARY_COLORとSECONDARY_COLORを入れ替えだけと思ったが、悪戦苦闘・試行錯誤の結果、目にクマのある疲れ切った顔になった(^^;)
R5.3.15 Radikoを聴きながら
なかなかうまいこと行かないしコンパイルも長いので、結局とりあえずRadikoプレイヤーにして、放送聞きながらチマチマやることにした。そうすると、デフォルトのavatarではなくて、robo8080さんのM5Stack_WebRadio_Avatarで使われている表情とそのスケッチを使おうと。ただRadikoからの音声getLevelが反映できなかったので、ランダムでの口パク。不思議なことに青色の目となった(^^;)
R5.3.12 組み立て
aquestalkのライセンスを購入する前に、HOYAさんのVoicetextが使えないかと。そこで、robo8080さんのM5Core2_VoiceText_TTSをM5AtomEcho用にアレンジしたところ声が出ました(^^)/ robo8080さんいつも感謝です。しかし、音が切れる(^^;) こんな感じ
自宅のネットワークの遅さかな? と思ったが、別のところでも同じ現象だった。M5Stackではそれなりに途切れはわずかだったのに比べ、AtomEchoやAtomS3では途切れたので、ハード性能が起因かな? と思う。速いネットワークではEchoでも大丈夫かも。
R5.3.11 組み立て
いよいよ下右の4つを、内部のサーボの動きを邪魔しないように配置を考えて配線・組立する。それが問題だ(^^;) 失敗しないように少しずつ前へ進む。
一応組みあがって、こんな感じになった。しかし.....スピーカー音がビビりまくり、サーボが動かない(^^;) 色々試した挙句、PWM_level を 12ビットにしたら、サーボは安定して動作した(^^) この間、壊れたサーボを使って、動かずに悩むということもあった(^^;) よくあること。動きは子犬のようで、満足(^^)
R5.3.11 自作顔で
Avatarの顔をfillEllipseやfillRectやらで描いていたのだけど、赤色が黒になっていた。そこで、robo8080さんのスケッチを参考にあれこれやっていると、何が原因だったのか、何がきっかけだったのか、ようやく色を使えた(^^;)
R5.3.8 AquesTalkで喋る
昨年、M5AtomでAquesTalkを喋らせていた時の自作モジュールを発見した。SparkFun I2S Audio Breakout - MAX98357Aを使っているらしい。もう忘れていた。(^^;) M5AtomS3とピン配置が違うがどうにかなるだろう(^^)
こんな感じになった。
R5.3.4 スタックちゃん?
ミニのサーボがあったので、スタックちゃんもどきを作ろうかと。
マイクロビットで使っていた、こんな音声合成LSIも発見!(^^)したので、AtomS3と組んでみた。 こんな感じ(音声大きいので注意)。
R5.3.3 AtomS3の始まり
やっぱり最初はavatarかな。液晶画面がついているので。TakaoAkakiさんが公開してくださっているスケッチを利用させていただいた。micは無いんだけど(^^;) 最初、スケッチの書き込みで迷いました。
ArduinoIDE環境を使っているけれど、ボード選択で M5Stack-ATOMS3 を選びました。AtomS3を入手したときにはあったのかな? 最初のうちは ESP32S3 Dev Module を使っていた覚えがあります。どちらも使えますが、ツールメニューが変わりますね。ちょっと大きなスケッチを描くときの NO OTA が前者では選べません。いずれできるようになるんだろうけど。ポートを選ぶときにも、場合によって出てくる名前が変わることがあります。関係なさそうだけど。初心者は気になる。LOLIN S3 って誰?