XiaoZhi ESP32 ファームウェア v2.5 解説:ESP-IDF 6、全バリアント一括リリース、セキュリティ強化

XiaoZhi ESP32 ファームウェア v2.5 解説:ESP-IDF 6、全バリアント一括リリース、セキュリティ強化

2026年10月23日

2026 年 7 月から 10 月にかけて、上流のファームウェアリポジトリ 78/xiaozhi-esp32 は v2.4.x と v2.5.x を公開しました。この間の変更のうち、実際にみなさんの作業を変えるのは 3 つだけです。ソースからのビルドに ESP-IDF 6 が必要になったこと、ビルド済みファームウェアの公開方法が変わったこと、プロトコル実装に一連の検証が加わったことです。この記事ではリリースを順に見ていきます。各項目には根拠となるコミットまたはドキュメントを明記しているので、ご自身で確認できます。

バージョンは、そのコミットを最初に含むタグで割り当てています。数値は v2.5.2 タグと、そのリリースのマニフェストに基づきます。上流は更新され続けるため、公式のリリースページを正としてください。

1. 要点

あなたの立場すること
ビルド済みファームウェアを書き込むだけファームウェアダウンロードのページで、お使いのボードのバリアントを選ぶ。開発環境は不要
ファームウェアを自分でビルドするESP-IDF v6.0.1 以降(release/v6.1 ブランチを推奨)をインストールする。ESP-IDF 5.x はサポート終了。ESP-IDF のセットアップを参照
カスタムボードを保守しているボードのコードを ESP-IDF 6 に合わせる。カスタムボードを ESP-IDF 6 に移行するを参照
自前サーバーを運用している、またはクライアントを書いているプロトコルのドキュメントが更新された。WebSocketと MQTT + UDPを参照

2. リリースの経緯

バージョン主な変更出典
v2.4.0ESP-IDF 6.0 への移行と、それに続く強化3e78cd7 (#2120)、0f6c435 (#2123)
v2.4.2ESP32-S31 ボードへの対応3e86f0a (#2151)
v2.5.0ESP-IDF 5.x のサポートを削除。ストリーミングによる notify の再生。MCP での文字列長の検証と JSON-RPC のエラーコード。ブラジルポルトガル語の UI 言語4a5d446、bb9122a (#2191)、acb2fc7 (#1847)、d68505f (#2243)
v2.5.2手動で起動する、全バリアント一括のファームウェアリリースワークフロー。WebSocket と OTA のセキュリティ修正。IP101 イーサネットドライバーの ESP-IDF 6 への移行49b4380 (#2302)、d436097、f05adce、d395220

v2.5.2 の PROJECT_VER は 2.5.2 です。

3. ビルド:ESP-IDF 6 への移行

  • 大規模な移行を 1 回で実施:コミット 3e78cd7 は 119 ファイルを変更しており、ボードのドライバーヘッダー、依存関係のバージョン、オーディオコーデックが含まれます。ボード単位の変更は移行の記事で扱います。
  • バージョン要件:main/idf_component.yml は idf: '>=6.0.1' を宣言しています。上流の README は release/v6.1 ブランチを推奨し、ESP-IDF 5.x はサポート終了と述べています。
  • 既知の問題が 1 件:README は、v6.1 のリリースタグを使わないよう警告しています。ESP32-C3 で Wi-Fi の初期化に失敗するという報告があります(issue #2344)。
  • SDK の切り替え:git submodule update --init --recursive を実行し、export.sh を読み込み直してから、idf.py fullclean を実行します。詳細は ESP-IDF のセットアップにあります。
  • ESP32-S31:このチップ向けのバリアントには ESP-IDF 6.1 以降が必要です。

4. リリース:全バリアント一括のファームウェアワークフロー

コミット 49b4380 で、手動で起動する Release Firmware ワークフローが追加されました。上流の docs/releasing.md に記載があります。

  • ESP-IDF 6.1 が対応するすべてのリリースバリアントを、scripts/build.py <board> --name <variant> --zip でビルドします。
  • 各バリアントは、merged-binary.bin を 1 つだけ含む v<version>_<variant>.zip を生成します。
  • リリースには、release-manifest.json(全バリアントの一覧)と、すべてのアーカイブの SHA256SUMS も含まれます。

v2.5.2 のマニフェストには、154 個のボードディレクトリと 188 種類のファームウェアバリアントが記録されており、ESP-IDF 6.1.0 でビルドされています。完全な一覧は対応ボード一覧を参照してください。

上流の README には今も「138 個のボードディレクトリと 171 のリリースバリアント」と書かれていますが、これはマニフェストより古い数値です。本サイトはマニフェストに従っています。ダウンロードしたら、アーカイブを SHA256SUMS と照合してください。

5. 機能とプロトコル

  • ストリーミング notify:bb9122a がストリーミング再生を追加し、サーバーが対話の外から送る音声通知を、デバイスが非同期に再生できるようになりました。非同期音声通知を参照してください。
  • Glyph Push:ローカルのフォントにないグリフを、サーバーが送れます。Glyph Pushを参照してください。
  • MCP の検証:デバイス側の MCP サーバーが、文字列引数の max_length を検証し、JSON-RPC のエラーコードを返します。MCP プロトコルを参照してください。
  • ESP32-P4:P4 のビルドはそれぞれ、rev < 3 のバリアントと -p4x バリアントに分かれました(b7dc88f)。
  • UI 言語:pt-BR のロケールが追加されました(d68505f)。

6. セキュリティ強化

上流のコミットメッセージに書かれている強化点は次のとおりです。

領域変更出典
MQTTgoodbye メッセージのセッション ID を検証するe182471 (#2023)
WebSocketサーバーの hello の transport が文字列でないとき、旧コードは null ポインタに strcmp を呼び、デバイスがパニックしていた。現在は先に型を確認するd436097 (#2247)
OTA安全でない eFuse シリアル番号を拒否するf05adce
暗号化MQTT と BluFi の暗号化を PSA Crypto に移行上流の README「Recent updates」

これらはすべて v2.5.2 に含まれています。

7. ドキュメントの変更

上流の docs/ は英語が先で、中国語版は *_zh.md という名前です。新規または大きく改訂されたドキュメントには、custom-board、websocket、mqtt-udp、mcp-protocol、mcp-usage、blufi、glyph-push、notify、releasing があります。本サイトの対応するページは、v2.5.2 に合わせて書き直しました。

出典

  • 上流のタグ v2.5.2 と v2.5.0:コミット履歴、README.md、docs/releasing.md、main/idf_component.yml。
  • 2026-10-23 に確認。訂正は [email protected] までお送りください。