eBadgeでウェイクワード
>nishio 顔ついてるのもかわいいなと思ったのでeBadgeに顔とウェイクワードと音声入力でのレスポンスを入れてみた。ウェイク自体は素早いけど思考が遅くて待ち時間が長いな。そしてなぜか猫も返事してるw
使っている部品:
ESP-SR の AFE(音声の前処理)と
WakeNet9 の配布済みモデル wn9_hiesp で「Hi ESP」を聞き分けます。モデルは Arduino core 3.3.11 に同梱の srmodels.bin(3.3 MB)をそのまま使っています。
マイク:
ES7210 の左側のマイク1本を AFE に渡しています。16 kHz、ゲインは 30 dB です。
スピーカーとの同時使用: マイク(ES7210)とスピーカー(
ES8311)は同じクロック線につながっています。そのため I2S_NUM_0 を1つ、全二重(入力と出力を同時に使う設定)で開き、聞きながら喋れるようにしました。
いつ反応するか: 眠っているとき、うとうとしているときに検出すると起きます。待っている途中なら、起きるアニメなしでそのまま答え直します。起きる途中や喋っている最中の検出は、数えるだけで無視します。自分の声で反応し直さないための作りです。
返事の流れ(ここから OpenAI を使う)
首をかしげた顔で聞きます。話し終わり(0.8 秒の無音)まで、最大 8 秒録音します。
Whisper で文字にします。時刻の質問なら本体で答えを作り、それ以外は gpt-4o-mini に聞きます。この間は「考える」顔で、吹き出しの点が順に灯ります。30 秒たつと諦めます。
返事を gpt-4o-mini-tts で声にし、pitch 1.2 で喋ります。口パクは音の大きさに合わせて動かします。
待っている状態を経て、また眠ります。
Wi-Fi と API キーは本体の設定領域(NVS)に入れるので、git やビルド成果物には入りません。