メインコンテンツまでスキップ

reSpeaker XVF3800 上の Muse Gadget

はじめに​

このプロジェクトでは、reSpeaker XVF3800 4 マイクアレイと XIAO ESP32-S3 を Muse Gadget に変身させます。ガジェットは BLE で Muse スマホアプリとペアリングし、あなたの Wi-Fi ネットワークに参加し、クラウド上の Muse VM への暗号化された Noise セッションを維持します。

  • ボタンを長押し:音声メモを録音します。Muse が文字起こしして返信し、その返信はアプリに表示され、スピーカーから TTS で読み上げられます。
  • タップ(1 秒未満):ライブ音声通話を開始します(MUSE_REALTIME_VOICE がオンの場合)。
  • もう一度タップ:通話を終了します。

概要として、データパスは次のようになります:

XIAO ESP32-S3 ──BLE──> Muse app (pairing)
│
└──Wi-Fi──> encrypted Noise session ──> Muse VM
│
├── /link-control : device.health, voice.configure, …
└── /chat/stream : voice note → transcript → reply

XIAO は I2S マスターであり、XVF3800 は I2S スレーブ 16 kHz ファームウェアを実行し、自身の 12 個の LED リングとアンプを制御します。

reSpeaker XVF3800 with XIAO ESP32-S3

必要なもの​

  • Muse の SDK トークン(mgst_…)
  • オプション:音声返信用の AssemblyAI キー
  • スマホにインストールされた Muse アプリ(開発者モードをオン)
  • ESP-IDF v6.0.3 がインストールされていること
  • I2S スレーブ 16 kHz ファームウェアが書き込まれた XVF3800
  • JST 5 W スピーカー(または 3.5 mm ヘッドホン)
  • 2.4 GHz Wi-Fi の認証情報
  • USB-C データケーブル

アカウントと API キー​

キー / 認証情報必須か?入手先設定場所
Muse SDK トークン(mgst_…, 48 文字)必須gadgets.muse.aiビルド時の sdkconfig 内の CONFIG_GADGET_SDK_TOKEN
AssemblyAI キー(32 文字)オプション — 音声返信用assemblyai.comビルド時の sdkconfig 内の CONFIG_MUSE_TTS_API_KEY
Groq キー(gsk_…)代替 TTSconsole.groq.com同じ場所(Groq の URL/モデルを指定)
Wi-Fi SSID + パスワード必須あなたの 2.4 GHz ネットワーク / ホットスポットペアリング中の Muse アプリ

TTS プロバイダ設定​

デフォルトのプロバイダは AssemblyAI です:

CONFIG_MUSE_TTS_ENABLE=y
CONFIG_MUSE_TTS_URL="https://tts.us.assemblyai.com/v1/openai/audio/speech"
CONFIG_MUSE_TTS_MODEL="assemblyai-tts-en"
CONFIG_MUSE_TTS_VOICE="alloy"
CONFIG_MUSE_TTS_RESPONSE_FORMAT="mp3"
CONFIG_MUSE_TTS_MAX_CHARS=800
CONFIG_MUSE_TTS_TIMEOUT_MS=15000
CONFIG_MUSE_TTS_API_KEY="YOUR_ASSEMBLYAI_KEY"

Groq(Orpheus、入力 200 文字の制限あり)は代替オプションです:

CONFIG_MUSE_TTS_URL="https://api.groq.com/openai/v1/audio/speech"
CONFIG_MUSE_TTS_MODEL="canopylabs/orpheus-v1-english"
CONFIG_MUSE_TTS_VOICE="hannah"
CONFIG_MUSE_TTS_RESPONSE_FORMAT="wav"
CONFIG_MUSE_TTS_MAX_CHARS=200
CONFIG_MUSE_TTS_API_KEY="gsk_..."

スマホアプリには TTS プロバイダ設定はありません。TTS は完全にファームウェア側で処理されます。

スマホアプリのセットアップ​

  • Android または iOS に Muse アプリ(Meta)をインストールします。
  • Muse アカウントでサインインします。
  • Settings → Devices → Developer mode をオンにします。
  • Muse は 米国とカナダでローンチされています。ペアリングと返信テキストの表示には、このアカウント / アプリが必要です。
  • アプリは返信を テキストとして表示し、TTS が設定されていればガジェットがそれを読み上げます。

オプションの外部ボタン(Grove Button)​

Grove Button を追加してプッシュ・トゥ・トークにすることができます:VCC → D3, SIG → D0, GND → GND。

Grove ButtonXIAOGPIO
GNDGND—
VCCD34(High 出力)
SIGD01(入力、アクティブ High)
NC——

ファームウェア設定はすでにオーバーレイに含まれています:

CONFIG_HOMEHUB_BUTTON_GPIO=1
CONFIG_HOMEHUB_BUTTON_POWER_GPIO=4
CONFIG_HOMEHUB_BUTTON_ACTIVE_HIGH=y
CONFIG_HOMEHUB_BUTTON_LABEL="TALK"

Grove Button は アクティブ High です。ファームウェアは GPIO4 を High にして電源を供給し、GPIO1 をプルダウン付きで読み取ります。

XMOS I2S ファームウェアを書き込む​

XIAO は I2S マスターなので、XVF3800 は I2S スレーブ 16 kHz ファームウェアを実行している必要があります。USB ファームウェアは XIAO では動作しません。

公式のファームウェア更新ガイドに従って、respeaker_xvf3800_i2s_slave_v1.0.9_16k.bin イメージを書き込みます:

respeaker_xvf3800_i2s_slave_v1.0.9_16k.bin(I2S スレーブ、16 kHz)を選択してください — デフォルトの USB ファームウェアではありません。

検証​

Muse ファームウェアは次のようにログを出力します:

link.xvf3800: XVF3800 firmware 1.0.9; 16 kHz I2S slave, ESP32 is master

または次を実行します:

xvf_host VERSION

プロジェクトをクローンする​

メンテナンスされているフォークをクローンします。これは upstream の SDK をベースとしており、すでに XVF3800 ポートと TTS 統合が含まれています:

git clone https://github.com/KasunThushara/muse-gadget-sdk.git
cd muse-gadget-sdk

seeed-respeaker-xvf3800 ポートは facebookincubator/muse-gadget-sdk の upstream には含まれていません。代わりに upstream を使う場合は、以下の追加を自分で適用する必要があります。

フォークによって追加されたファイル:

esp32/devices/sdkconfig.seeed-respeaker-xvf3800
esp32/main/voice_board_xvf3800.c
esp32/main/xvf3800.c
esp32/main/xvf3800.h

フォークによって変更されたファイル:

esp32/main/Kconfig.projbuild      (HOMEHUB_LED_BACKEND_XVF3800, button options)
esp32/main/CMakeLists.txt (xvf3800.c, voice_board_xvf3800.c)
esp32/main/led_status.c (XVF3800 ring over I2C)
esp32/main/button.c (active-high button, optional power GPIO)
esp32/main/voice.c (tap-vs-hold measurement)
esp32/tools/board.sh (seeed-respeaker-xvf3800 case)
esp32/components/muse/Kconfig (MUSE_TTS_*)
esp32/components/muse/muse_chat_session.cpp (start_tts / WAV / MP3)

ファームウェアをビルドする​

ESP-IDF v6.0.3 をインストール​

esp32/cmake/validate_config.cmake は ESP-IDF v6.0.3 を要求します:

git clone -b v6.0.3 --recursive https://github.com/espressif/esp-idf.git ~/esp/esp-idf-v6.0.3
~/esp/esp-idf-v6.0.3/install.sh esp32s3
. ~/esp/esp-idf-v6.0.3/export.sh

また、Git、Python 3、USB-C データケーブルも必要です。Windows では、XIAO のコンソールはネイティブ USB(303a:1001)で、COMx として認識されます。tools/board.sh は bash なので、Git Bash で実行するか、idf.py を直接呼び出してください。

キーを設定する​

cd esp32
idf.py -B build-seeed-respeaker-xvf3800 menuconfig

ESP32 Device SDK の下で設定します:

  • Muse Gadgets SDK トークン → mgst_…
  • TTS オプション(Muse メニュー内)→ プロバイダ、URL、モデル、ボイス、API キー

または build-seeed-respeaker-xvf3800/sdkconfig を直接編集します:

CONFIG_GADGET_SDK_TOKEN="mgst_…"
CONFIG_MUSE_TTS_ENABLE=y
CONFIG_MUSE_TTS_URL="https://tts.us.assemblyai.com/v1/openai/audio/speech"
CONFIG_MUSE_TTS_MODEL="assemblyai-tts-en"
CONFIG_MUSE_TTS_VOICE="alloy"
CONFIG_MUSE_TTS_RESPONSE_FORMAT="mp3"
CONFIG_MUSE_TTS_MAX_CHARS=800
CONFIG_MUSE_TTS_API_KEY="YOUR_ASSEMBLYAI_KEY"

生成された build-*/sdkconfig はオーバーレイを上書きします。devices/sdkconfig.seeed-respeaker-xvf3800 を変更した後は、生成された sdkconfig を更新するか削除してください。

コンパイル​

tools/board.sh seeed-respeaker-xvf3800 build

または直接:

idf.py -B build-seeed-respeaker-xvf3800 \
-DIDF_TARGET=esp32s3 \
-DSDKCONFIG=build-seeed-respeaker-xvf3800/sdkconfig \
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;devices/sdkconfig.seeed-respeaker-xvf3800" \
build

イメージは次の場所に生成されます:

esp32/build-seeed-respeaker-xvf3800/muse-gadget.bin

ファームウェアを書き込む​

tools/board.sh seeed-respeaker-xvf3800 flash COM10

または直接:

idf.py -B build-seeed-respeaker-xvf3800 \
-DIDF_TARGET=esp32s3 \
-DSDKCONFIG=build-seeed-respeaker-xvf3800/sdkconfig \
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;devices/sdkconfig.seeed-respeaker-xvf3800" \
-p COM10 flash
  • COM10 を XIAO のポートに置き換えます(macOS では ls /dev/cu.usbmodem*、Linux では /dev/ttyACM*)。
  • フラッシュが接続できない場合:BOOT を押し続け、RESET をタップし、BOOT を離してから再試行します。
  • ポートを占有しているシリアルモニタを閉じます。
  • 再フラッシュしてもペアリング / Wi-Fi は保持されます。erase-flash は NVS とペアリングを含め、すべてを消去します。

ペアリングとテスト​

  1. Muse アプリ → Settings → Devices → Developer mode ON。
  2. Add Device (+) → MuseGadget-respeaker-XXXXXX を選択。
  3. 確認のためにボタン(または Grove Button)を押します。
  4. 2.4 GHz の Wi-Fi を選択し、パスワードを入力します。
  5. 緑のリングが点灯するまで待ちます。
  6. ボタンを長押しして話し、離します:
    • link.voice: recorded X.Xs
    • muse_chat_session: TTS: N chars
    • link.voice: reply: X.Xs of speech
    • 返信はスピーカーから読み上げられ、アプリにも表示されます。
  7. 音量: Muse に依頼します(「音量を 80 にして」など)または voice.configure を使用します。
  8. ミュート: XVF3800 の Mute ボタンを使用します。ミュート中もボタンはセットアップ用の役割を維持します。
  9. セットアップのリセット: ボタンを 5 秒間押し続けると、ペアリング / Wi-Fi を消去します。

役立つログ行:

link.xvf3800: AIC3104 outputs powered (DAC 0 dB, HP + line out)
link.xvf3800: XVF3800 firmware 1.0.9; 16 kHz I2S slave, ESP32 is master
link.xvf3800: reSpeaker XVF3800 audio ready
link.voice: ready
link.ble: advertising as MuseGadget-respeaker-XXXXXX
muse_chat_session: connected to VM …
muse_chat_session: TTS: N chars
muse_chat_session: reply audio: 16000 Hz, 1 ch, 64 kbps
link.xvf3800: amp on: X0D30=0 X0D31=0 X0D33=1

セキュリティに関する注意事項​

  • SDK トークンはファームウェア(または NVS)内に同梱されています。これはパスワードではなく識別子として扱ってください。漏えいした場合は gadgets.muse.ai で失効/ローテーションしてください。
  • TTS キーは esp32/build-*/sdkconfig に保存されており、gitignore に設定されています。コミットしないでください。
  • コミュニティペアリングにはメーカー認証がなく、アクティブな MITM を防ぐことはできません。信頼できるネットワーク上でセットアップしてください。
  • セキュアブートとフラッシュ暗号化は オフ のままです。アプリはコミット済みの開発用キーで署名されているため、自由に再フラッシュできます。
  • NVS 暗号化(CONFIG_HOMEHUB_NVS_ENCRYPTION)を推奨します。これは eFuse HMAC キーから自動的に導出されます。認証情報を保存する前に有効にするかどうかを決めてください。
  • セキュアブートがない場合は CONFIG_HOMEHUB_PAIRING_EFUSE_AUTH を有効にしないでください。

リソース​

技術サポートと製品ディスカッション​

弊社製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに合わせて選べる複数のコミュニケーションチャネルをご用意しています。

Loading Comments...