ReSpeaker XVF3800 + Agora ten-framework エッジ会話クライアント展開ガイド
目標:ESP32S3をreSpeaker XVF3800と連携させ、Agora RTCを介して安定した低遅延双方向音声リンクを構築する。 ソースコード:https://github.com/Seeed-Projects/seeed-respeaker-agora-tenframework Seeed-Projects:https://github.com/Seeed-Projects/seeed-respeaker-agora-tenframework
はじめに
このチュートリアルでは、Seeed XIAO ESP32-S3とreSpeaker XVF3800を使用して音声キャプチャと再生を行い、Agora RTCを使用してデバイスとバックエンド間のリアルタイム音声接続を完了する方法をガイドします。バックエンドはAI Agentとして動作します。このプロジェクトは標準化された設定方法(.env / property.json)を提供し、ワンクリックDocker展開、動的トークン認証、プラガブルプロバイダー(ASR/LLM/TTSは必要に応じて交換可能)をサポートします。ASR → LLM → TTSの完全なループを自動的に完了し、合成された音声をデバイスにストリーミングして再生し、低遅延の「一度話して一度返答を得る」会話体験を提供します。

バックエンドの選択
このガイドでは2つのバックエンドオプションを提供します。あなたのシナリオに適したものを選択してください:
| オプション | 最適な用途 | サーバー必要 | リンク |
|---|---|---|---|
| Agora Conversational AI Agent v2(クラウド、直接) | 最速セットアップ / 最小インフラ | いいえ | 👉 Agent v2バージョンへ |
| TEN Framework(セルフホスト、プラガブルASR/LLM/TTS) | カスタムパイプライン / プロバイダー切り替え / 高度な機能 | はい(Docker) | ここにいます ✅ |
目次
Agora Assistant – クイックスタートガイド
アーキテクチャ概要
- ウェイクワード検出 – 事前定義されたアクティベーションフレーズを継続的に聞き取ります。
- 音声テキスト変換(STT) – 音声認識エンジンを使用してユーザーの音声をテキストに変換します。
- RAG対応LLM – ベクターデータベースから関連するコンテキストを取得し、LLMを使用してインテリジェントな応答を生成します。
- テキスト音声変換(TTS) – 生成された応答を自然な音声に変換します。
コアディレクトリ構造
ai_agents/
├── esp32-client/ # XIAO ESP32-S3 edge side: capture/play audio + Agora connection + conversation interaction
├── server/ # Server side: AI Agent orchestration / LLM / ASR / TTS, etc. (works with edge side)
├── agents/ # TEN Agent examples and extensions
├── playground/ # Web frontend UI
├── .env.example # Environment variable template
├── docker-compose.yml # Docker compose file
└── Dockerfile # Docker image build file
システムアーキテクチャ
┌─────────────────────────────────────────────────────────────────────┐
│ System Architecture │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ ESP32-S3 Device │ │ AI Agent Server │ │
│ │ (Edge Side) │ │ (Backend) │ │
│ ├─────────────────┤ ├─────────────────────────┤ │
│ │ • Microphone In │ ──── Agora RTC ──→ │ • ASR Speech Recognition│ │
│ │ • Wi-Fi │ Real-time audio │ • LLM Large Language │ │
│ │ • Speaker Out │ ←── Agora RTC ──── │ • TTS Speech Synthesis │ │
│ └─────────────────┘ └─────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
Workflow:
1. ESP32-S3 connects to the network and joins an Agora channel
2. The edge side captures microphone audio and publishes it to Agora
3. The server receives audio and runs the ASR → LLM → TTS pipeline
4. The backend sends response audio back; the device plays it, enabling real-time voice conversation
前提条件
ハードウェア要件
| ハードウェア | 備考 |
|---|---|
| Seeed Studio XIAO ESP32-S3 | メインコントローラーボード |
| ReSpeaker XVF3800 | 音声拡張ボード(マイクアレイ + スピーカーインターフェース) |
| スピーカー | AI応答を再生するための少なくとも1つのスピーカー |
| USB-Cデータケーブル | ファームウェアフラッシュとデバイス電源供給用 |

アカウント & APIキー
展開前に、以下のサービスに登録してAPIキーを取得する必要があります:
🔹 Agora – 必須
- https://console.agora.io/ にアクセス
- 無料アカウントにサインアップ
- 新しいプロジェクトを作成
- App IDとApp Certificateをコピー
🔹 Deepgram(ASR)– 必須
- https://console.deepgram.com/ にアクセス
- 無料アカウントにサインアップ(無料クォータ利用可能)
- API Keysページに移動
- 新しいAPIキーを作成
🔹 OpenAI(LLM)– 必須
- https://platform.openai.com/ にアクセス
- サインアップして支払い方法を追加
- API Keysページに移動
- 新しいシークレットキーを作成
🔹 Cartesia(TTS)– 必須
- https://cartesia.ai/sonic にアクセス
- 無料アカウントにサインアップ(無料クォータ利用可能)
- API Key → New API Keyに移動
- APIキーをコピー
ソフトウェア要件
| ソフトウェア | バージョン | 目的 |
|---|---|---|
| Docker Desktop | 最新 | コンテナ化されたサーバー展開 |
| Git | 最新 | リポジトリのクローン |
| ESP-IDF | v5.2.3 | ESP32開発フレームワーク |
| ESP-ADF | v2.7 | ESP32音声開発フレームワーク |
ファームウェア更新
最高の再生体験を実現するため、XMOSファームウェアを最新バージョンに更新することをお勧めします。
ファームウェアダウンロード
ファームウェアはこちらからダウンロードできます。
更新手順
コンピューターでReSpeaker XMOS XVF3800 with XIAO ESP32S3を接続し、ファームウェア更新ツールを実行してファームウェアを選択します。
詳細なガイドについては、このページを参照してください。
ファームウェア更新は必須手順であり、最高の音声体験と安定性のために強く推奨されます。
サーバーサイド展開
Windows展開(推奨)
ステップA:Docker Desktopのインストールと設定(初回のみ)
-
Docker Desktopのダウンロードとインストール
https://www.docker.com/products/docker-desktop/ にアクセスしてダウンロードとインストールを行います。
-
インストールオプション
- Use WSL 2 instead of Hyper-Vをチェック(利用可能な場合)
-
インストールの確認
- インストール後にDocker Desktopを開く
- トレイアイコンがDocker is runningを表示するまで待つ
-
(推奨)WSL統合を有効にする
- Docker Desktop →
Settings→Resources→WSL Integration - よく使用するWSLディストリビューション(例:Ubuntu)を有効にする
- Docker Desktop →
ステップB:リポジトリのクローンと環境変数の設定
-
PowerShellまたはWindows Terminalを開く
-
リポジトリのクローン
git clone https://github.com/Seeed-Projects/seeed-respeaker-agora-tenframework.git
cd esp32-client-agora/ai_agents -
環境テンプレートのコピー
PowerShell:
Copy-Item .env.example .envCMD:
copy .env.example .env -
.envファイルを編集してAPIキーを入力メモ帳またはVS Codeで
.envを開き、キーフィールドを更新します:# ==============================
# Agora RTC (Required)
# ==============================
AGORA_APP_ID=your_agora_app_id
AGORA_APP_CERTIFICATE=your_agora_app_certificate
# ==============================
# Deepgram ASR (Required)
# ==============================
DEEPGRAM_API_KEY=your_deepgram_api_key
# ==============================
# OpenAI LLM (Required)
# ==============================
OPENAI_API_KEY=your_openai_api_key
OPENAI_MODEL=gpt-4o
OPENAI_PROXY_URL= # Optional: set if you need a proxy
# ==============================
# Cartesia TTS (Required)
# ==============================
Cartesia_TTS_KEY=your_cartesia_api_key
# ==============================
# Server config (usually no changes needed)
# ==============================
LOG_PATH=/tmp/ten_agent
LOG_STDOUT=true
GRAPH_DESIGNER_SERVER_PORT=49483
SERVER_PORT=8080
WORKERS_MAX=100
ステップ C: Docker サービスを開始
docker compose up -d
コンテナの状態を確認(オプション):
docker compose ps
以下のような出力が表示されるはずです:
NAME STATUS PORTS
ten_agent_dev running 0.0.0.0:3000->3000/tcp, 0.0.0.0:49483->49483/tcp
ステップ D: コンテナに入り、サンプルを実行
-
コンテナに入る
docker exec -it ten_agent_dev bash -
音声アシスタントサンプルをインストールして実行
cd agents/examples/voice-assistant
task install
task run -
サービスの開始を待つ
以下のようなログが表示されたら、サービスが実行中です:
[INFO] Server started on port 8080
[INFO] Waiting for connections...
ステップ E: サービスを確認
- API サーバー: http://localhost:8080
- フロントエンド UI: http://localhost:3000
- TMAN Designer: http://localhost:49483
一般的なコマンド
# View container logs
docker compose logs -f
# Stop services
docker compose down
# Restart services
docker compose restart
# Full cleanup (including volumes)
docker compose down -v
Linux/Mac デプロイメント
ステップ 1: Docker をインストール
Ubuntu/Debian:
sudo apt update
sudo apt install docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
# Log out and log back in to take effect
macOS:
# Install Docker Desktop via Homebrew
brew install --cask docker
# Then launch the Docker Desktop app
ステップ 2: クローンと設定
git clone https://github.com/zhannn668/esp32-client-agora.git
cd esp32-client-agora/ai_agents
cp .env.example .env
ステップ 3: 環境変数を編集
nano .env
# or use vim
vim .env
API キーを入力してください(上記の Windows セクションを参照)。
ステップ 4: サービスを開始
docker compose up -d
docker exec -it ten_agent_dev bash
cd agents/examples/voice-assistant
task install
task run
ESP32 側のデプロイメント
開発環境のセットアップ
ESP-IDF (v5.2.3) をインストール
Windows
-
ESP-IDF v5.2.3 オフラインインストーラーをダウンロード
https://docs.espressif.com/projects/esp-idf/zh_CN/v5.2.3/esp32/get-started/windows-setup.html
-
インストーラーを実行
- インストールパスを選択(推奨デフォルト:
C:\Espressif) - インストール後、スタートメニューに「ESP-IDF 5.2 PowerShell」のショートカットが表示されます
- インストールパスを選択(推奨デフォルト:
-
インストールを確認
「ESP-IDF 5.2 PowerShell」を開いて実行:
idf.py --version
Linux
# Create an install directory
mkdir -p ~/esp
cd ~/esp
# Clone ESP-IDF
git clone -b v5.2.3 --recursive https://github.com/espressif/esp-idf.git
# Install toolchain
cd esp-idf
./install.sh esp32s3
# Configure environment variables (add to ~/.bashrc)
echo 'alias get_idf=". $HOME/esp/esp-idf/export.sh"' >> ~/.bashrc
source ~/.bashrc
ESP-ADF (v2.7) をインストール
Windows
-
ESP-ADF をクローン
ESP-IDF PowerShell で:
cd C:\Espressif\frameworks
git clone --recursive https://github.com/espressif/esp-adf.git
cd esp-adf
git checkout v2.7
git submodule update --init --recursive -
ADF_PATH 環境変数を設定
オプション 1: システム設定
- 「システムのプロパティ」→「詳細設定」→「環境変数」を開く
- 新しいユーザー変数を作成:
ADF_PATH=C:\Espressif\frameworks\esp-adf
オプション 2: コマンドライン
setx ADF_PATH "C:\Espressif\frameworks\esp-adf"重要: 設定後、ESP-IDF PowerShell を再起動してください。
Linux
cd ~/esp
git clone --recursive https://github.com/espressif/esp-adf.git
cd esp-adf
git checkout v2.7
git submodule update --init --recursive
# Add env var
echo 'export ADF_PATH=$HOME/esp/esp-adf' >> ~/.bashrc
source ~/.bashrc
IDF パッチを適用
ESP-ADF では ESP-IDF に FreeRTOS パッチを適用する必要があります:
cd $IDF_PATH
git apply $ADF_PATH/idf_patches/idf_v5.2_freertos.patch
ESP-ADF ボードピン設定を変更(重要!)
ReSpeaker XVF3800 のピン配置がデフォルトの Korvo-2 V3 と異なるため、フレームワークのボード設定を変更する必要があります:
ファイルの場所:
- Windows:
C:\Espressif\frameworks\esp-adf\components\audio_board\esp32_s3_korvo2_v3\board_pins_config.c - Linux/Mac:
$ADF_PATH/components/audio_board/esp32_s3_korvo2_v3/board_pins_config.c
- このファイルは ESP-ADF フレームワークディレクトリにあり、プロジェクトディレクトリにはありません。
- 変更はこのボード設定を使用するすべてのプロジェクトに影響します。
- 最初に元のファイルをバックアップすることをお勧めします:
cp board_pins_config.c board_pins_config.c.backup
I2C ピンを更新 – get_i2c_pins() を見つけて以下に変更:
esp_err_t get_i2c_pins(i2c_port_t port, i2c_config_t *i2c_config)
{
// ReSpeaker XVF3800 I2C configuration
i2c_config->sda_io_num = GPIO_NUM_5; // ReSpeaker I2C SDA
i2c_config->scl_io_num = GPIO_NUM_6; // ReSpeaker I2C SCL
return ESP_OK;
}
I2S ピンを更新 – get_i2s_pins() を見つけて以下に変更:
esp_err_t get_i2s_pins(int port, board_i2s_pin_t *i2s_config)
{
// ReSpeaker XVF3800 I2S configuration
i2s_config->bck_io_num = GPIO_NUM_8; // BCLK
i2s_config->ws_io_num = GPIO_NUM_7; // WS/LRCK
i2s_config->data_out_num = GPIO_NUM_44; // DOUT
i2s_config->data_in_num = GPIO_NUM_43; // DIN
i2s_config->mck_io_num = -1; // Disable MCLK
return ESP_OK;
}
Agora IoT SDK をダウンロード
-
SDK をダウンロード
-
components ディレクトリに展開
cd esp32-client-agora/ai_agents/esp32-client/components
tar -xvf agora_iot_sdk.tar
esp32-camera サブモジュールを初期化
cd esp32-client-agora
git submodule update --init --recursive
ビルドとフラッシュ
AI エージェントパラメータを設定
ai_agents/esp32-client/main/app_config.h を編集します。LAN IP を使用する場合は、ESP32 とサーバーが同じ LAN にあることを確認してください。パブリック IP を使用する場合は、これを無視できます。
#pragma once
// ==============================
// AI Agent server configuration
// ==============================
// Change to your Server IP (the computer running Docker)
#define TENAI_AGENT_URL "http://192.168.x.x:8080"
// ==============================
// Agent graph selection
// ==============================
#define CONFIG_GRAPH_OPENAI // Use OpenAI graph
// ==============================
// Greeting and prompt
// ==============================
#define GREETING "Can I help You?"
#define PROMPT ""
// ==============================
// Graph configuration
// ==============================
#if defined(CONFIG_GRAPH_OPENAI)
#define GRAPH_NAME "voice_assistant"
#define V2V_MODEL "gpt-realtime"
#define LANGUAGE "en-US"
#define VOICE "ash"
#endif
// ==============================
// Agent identity configuration
// ==============================
#define AI_AGENT_NAME "tenai0125-11"
#define AI_AGENT_CHANNEL_NAME "test_channel_12345" // Channel name
#define AI_AGENT_USER_ID 12345 // User ID
// ==============================
// Audio codec configuration
// ==============================
#define CONFIG_USE_G711U_CODEC
// ==============================
// Agora App ID
// ==============================
#define AGORA_APP_ID "your_agora_app_id"
ファームウェアをビルド
-
ESP-IDF ターミナルを開く
- Windows: 「ESP-IDF 5.2 PowerShell」
- Linux/Mac:
get_idfを実行
-
プロジェクトディレクトリに移動
cd esp32-client-agora/ai_agents/esp32-client -
ターゲットチップを設定
idf.py set-target esp32s3 -
Wi-Fi と FreeRTOS を設定
idf.py menuconfig以下の項目を設定:
-
Wi-Fi 設定:
Agora Demo for ESP32 --->
(your WiFi SSID) WiFi SSID
(your WiFi password) WiFi Password -
FreeRTOS 後方互換性を有効化:
Component config --->
FreeRTOS --->
Kernel --->
[*] configENABLE_BACKWARD_COMPATIBILITY
-
-
ビルド
idf.py build成功すると以下が表示されます:
Project build complete. To flash, run:
idf.py flash
ファームウェアをフラッシュ
-
ボードを接続
- XIAO ESP32-S3 を USB-C ケーブルでコンピュータに接続
-
シリアルポートを特定
- Windows: デバイスマネージャー → ポート、COM ポートを見つける(例:COM3)
- Linux: 通常
/dev/ttyUSB0または/dev/ttyACM0 - macOS: 通常
/dev/cu.usbmodem*
-
フラッシュとモニター
# Windows
idf.py -p COM3 flash monitor
# Linux/Mac
idf.py -p /dev/ttyUSB0 flash monitorLinux 権限の問題: 権限拒否エラーが表示された場合、実行:
sudo usermod -aG dialout $USER
# then log out and log back in -
フラッシュ成功の確認
以下のようなログが表示されれば成功です:
Hard resetting via RTS pin...
Connecting...
検証とテスト
ESP32 起動ログを確認
正常に起動すると、シリアル出力に以下の重要なログが含まれるはずです:
I (xxxx) wifi: connected with YourWiFi, aid = 1
got ip: 192.168.x.x
~~~~~Initializing AIC3104 Codec~~~~
W (xxxx) AIC3104_NG: Found device at address 0x18
AIC3104 detected, page register = 0x00
~~~~~AIC3104 Codec initialized successfully~~~~
I (xxxx) AUDIO_PIPELINE: Pipeline started
~~~~~agora_rtc_join_channel success~~~~
Agora: Press [SET] key to join the Ai Agent ...
成功チェックリスト
| 項目 | 意味 |
|---|---|
WiFi connected | Wi-Fi 接続成功 |
got ip: xxx.xxx.xxx.xxx | IP アドレス取得 |
Found device at address 0x18 | AIC3104 検出 |
AIC3104 Codec initialized successfully | コーデック初期化成功 |
agora_rtc_join_channel success | RTC チャンネル参加成功 |
音声会話テストの実行
- ボード上の SET ボタンを押してAIエージェントを開始します
- マイクに向かって話します
- シリアルログを確認します。音声送受信ログが表示されるはずです
- スピーカーがAIの返答を再生します
FAQ
サーバーサイドの問題
Q1: Dockerコンテナの起動に失敗する
A: 以下を確認してください:
- Docker Desktopが実行されていることを確認します
- ポートが既に使用されているかチェックします:
netstat -an | grep 8080 - 詳細ログを確認します:
docker compose logs
Q: コンテナに入った後、taskコマンドが見つからない
A: 正しいイメージを使用していることを確認してください。docker compose pullを実行してイメージを更新します。
ESP32サイドの問題
Q2: ビルドエラー i2c driver install error
A: I2Cドライバの競合です。コードが新しいAPI(driver/i2c_master.h)ではなく、レガシーI2C API(driver/i2c.h)を使用していることを確認してください。
Q: ランタイムI2Cタイムアウト ESP_ERR_TIMEOUT
A: 考えられる原因:
- ハードウェア配線の問題 – I2Cライン/ケーブルを確認してください
- 間違ったピン設定 –
board_pins_config.cが正しく更新されているか確認してください - 間違ったI2Cアドレス – ログでスキャンされたアドレスを確認してください
デバッグログ:
W (xxxx) AIC3104_NG: Scanning I2C bus...
W (xxxx) AIC3104_NG: Found device at address 0x??
アドレスが0x18でない場合、aic3104_ng.hのAIC3104_ADDRを変更する必要があります。
Q: 音声出力がない
A: 以下を確認してください:
- AIC3104が正常に初期化されているか(シリアルログを確認)
- I2Sピンが正しく設定されているか
- スピーカーが正しく接続されているか
Q: ネットワークバッファエラー Not enough space
A: これはランタイムネットワークの問題で、通常は一時的に無視できます:
- ネットワーク品質を確認してください
- 音声ビットレートを下げてください
- ネットワークバッファサイズを増やしてください
Q: board_pins_config.cを修正した後もエラーが続く
A:
- 正しいファイルパスを編集したことを確認してください
- 完全クリーンのため
idf.py fullcleanを実行してください idf.py buildで再ビルドしてください
リファレンス
公式ドキュメント
| リソース | リンク |
|---|---|
| ESP-IDFプログラミングガイド | https://docs.espressif.com/projects/esp-idf/zh_CN/v5.2.3/esp32s3/ |
| ESP-ADFプログラミングガイド | https://docs.espressif.com/projects/esp-adf/zh_CN/latest/ |
| Agora RTCドキュメント | https://docs.agora.io/en/rtc/overview/product-overview |
| TENフレームワークドキュメント | https://doc.theten.ai |
| ReSpeaker XVF3800ファームウェアガイド | https://wiki.seeedstudio.com/cn/respeaker_xvf3800_introduction/ |
APIサービス
| サービス | コンソール |
|---|---|
| Agora | https://console.agora.io/ |
| Deepgram | https://console.deepgram.com/ |
| OpenAI | https://platform.openai.com/ |
| ElevenLabs | https://elevenlabs.io/ |
チップデータシート
| データシート | リンク |
|---|---|
| TI AIC3104データシート | https://www.ti.com/product/TLV320AIC3104 |
| XIAO ESP32-S3 Wiki | https://wiki.seeedstudio.com/ja/xiao_esp32s3_getting_started/ |
プロジェクトリポジトリ
| リポジトリ | リンク |
|---|---|
| TENフレームワーク | https://github.com/TEN-framework/ten-framework |
| ESP32 Client Agora | https://github.com/zhannn668/esp32-client-agora |
技術サポート & 製品ディスカッション
弊社製品をお選びいただき、ありがとうございます!お客様の体験を可能な限りスムーズにするため、サポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャンネルをご用意しています。