出荷時スタックチャンファームウェアのAIエージェントで、Nature Remo Lapis経由でエアコンを操作させる

M5Stack公式スタックチャンファームウェアのAIエージェントを使って、Nature Remo Lapis経由でエアコンを操作できるようにしてみました。

tl;dr

  • M5Stack公式スタックチャンのファームウェアには、MCPが利用できるAIエージェントが使えるようになっています
  • MCPで、ホームオートメーションプラットフォームであるHome Assistantと連携できます
  • Nature Remo Lapisを使うと、赤外線リモコンで操作する機器をMatter対応デバイスとしてHome Assistantで操作できるようになります
  • これらを組み合わせることで、スタックチャンからエアコンのオンオフを操作できました

構成図

M5Stack公式スタックチャン

スタックチャンは、ししかわさんが開発するM5Stackコアモジュールを使ったオープンソースハードウェアのコミュニケーションロボットプロジェクトです。

protopedia.net

M5Stack公式から、スタックチャンの筐体が発売されることになりました。 以下は現在の一般発売のプレオーダーページです。

StackChan: Kawaii Co-Created Open-Source AI Desktop Robotshop.m5stack.com

筆者もクラウドファンディングで支援し、製造された1体が昨日手元に届きました。

公式ドキュメントには、AIエージェントからHome Assistantプラグインを介して、Home Assistantで登録されているデバイスが操作できるようになると書いてあったので、早速試してみました。

出荷時ファームウェアに、AIエージェントが組み込まれている

スタックチャンはスマートフォンアプリでセットアップして、Wi-Fiに接続できるようになると、AIエージェントアプリが利用できるようになります。 セットアップ方法は公式ドキュメントを参照してください。

docs.m5stack.com

このAIエージェントは、現在のところ無料で利用できます。 XiaoZhiというプロジェクトで、個人は無料で利用できるAIエージェントが提供されており、そちらに接続しているようです。

github.com

画面を触るか、「Hi! StackChan」と話しかけると、AIエージェントが起動して対話できます。 比較的応答が早く、会話を楽しめました。

XiaoZhiではMCPが利用できる

XiaoZhiでは、MCP(Model Context Protocol)が利用できるようになっています。 詳細はよく分からないのですが、XiaoZhiで提供されるWebSocketのAPIに接続すると、AIエージェントからMCPの仕組みで情報をやりとりできるようになっているようです。

通常MCPと聞くとエージェントクライアントからMCPサーバーに接続するイメージですが、XiaoZhiではMCPサーバー側からエンドポイントに接続すると、エージェントクライアントから使ってもらえる仕組みのようです。

このエンドポイントは、スタックチャンのスマートフォンアプリから確認できます。 Settings → MCP を押すと、「Access point address」が表示されます。

公式ドキュメントでは、Home Assistantと連携するMCPのソースコードが紹介されていました。 こちらを使ってみようと思います。

Nature Remo LapisをMatterデバイスとして使う

Nature Remo Lapisは、Nature社が発売するスマートリモコンです。 赤外線リモコンの家電を、Matterデバイスにすることもできます。

Nature Remo Lapisshop.nature.global

スマホから様々な家電にアクセスできるようになって非常に便利な商品ですが、WebAPI経由でアクセスする機能が提供されており、お家IoTの製作にも重宝しています。

Home Assistantとは

Home Assistantは、オープンソースのホームオートメーションプラットフォームです。 Home Assistantは、様々なスマートホームデバイスと連携できるようになっており、ユーザーは自分のスマートホームを一元管理できるようです。

www.home-assistant.io

筆者は名前を知っていましたが、実際に使ったことがなく、スタックチャンにエアコンを操作できるところまでやってみようと思いました。

Home Assistantでは、Home Assistant OSという、Raspberry PiなどにまるっとインストールするOSが提供されていて、その利用が推奨されているようです。 筆者は、Dockerコンテナとしても利用できるということで、LinuxマシンでDockerコンテナの構築を行いました。 公式ドキュメントにはWindows上にVirtualBox、Hyper-Vを用いて、Home Assistant OSを構築する方法が書かれています。

www.home-assistant.io

LinuxマシンにDockerコンテナとしてHome Assistantを構築する

筆者はLinuxマシン(Ubuntu 24.04)にDockerコンテナとしてHome Assistantを構築しました。 公式ドキュメントにも手順が書かれています。

以下のようにDocker Composeファイルを作成して、起動しました。

# compose.yml
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /var/opt/home-assistant:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
    environment:
      TZ: Asia/Tokyo

  matter-server:
    container_name: matter-server
    image: ghcr.io/home-assistant-libs/python-matter-server:stable
    volumes:
      - /var/opt/home-assistant-matter-server:/data
      - /run/dbus:/run/dbus:ro
    restart: unless-stopped
    network_mode: host
    security_opt:
      - apparmor=unconfined
    environment:
      TZ: Asia/Tokyo

ドキュメントにあるDocker Composeの例に、以下を追加しました。

  • volumesのconfigの指定を/var/opt/home-assistantに変更。このディレクトリに構築したデータは全て出力されるようです。
  • environmentのTZに、Asia/Tokyoを指定。
  • matter-serverのサービスを追加(参考

Home Assistant OSでは、Matter Serverが含まれていますが、Dockerコンテナには含まれていないため別途追加が必要でした。

以下のコマンドで起動し、http://<IPアドレス>:8123 でHome AssistantのWeb UIにアクセスできるようになりました。

# 起動
docker compose up -d

# 起動確認
docker compose ps

なお、Windows、macOSのDocker Desktopでも同様の構築が可能かどうかは確認していません。 さまざまなネットワークやBluetooth上のデバイスを検出して動作する仕組みを持っているようなので、Windows、macOSのDocker Desktopでは動作しない可能性が高いと思います。

Home Assistantから、XiaoZhiのMCPエンドポイントに接続する

HACSをインストール

まず、Home Assistantにプラグインを追加できるHACSをインストールします。 HACSの導入方法は下記に公式ドキュメントがあります。

www.hacs.xyz

筆者のDockerで構築した場合についても、記述がありました。

# コンテナのIDを確認
docker ps

# コンテナのBASHに入る
docker exec -it <コンテナ名> bash

# ダウンロードスクリプトを実行
wget -O - https://get.hacs.xyz | bash -

ダウンロード後、Home Assistantのコンテナを再起動しました。

docker compose restart

その後、Home AssistantのWeb UIにアクセスし、HACSの初期化が必要になります。 以下のドキュメントに記述があります。

www.hacs.xyz

「設定->デバイスとサービス->統合タブ->統合を追加ボタン->HACS」を選択して追加します。 ダイアログのチェックボックスにチェックをいれ、その後の画面でGitHubの認証(おそらくプラグインを取得するため)を行うと、セットアップが完了します。

MCP Server for Xiaozhiのインストールと設定

XiaoZhiのMCPエンドポイントに接続するためのプラグイン、MCP Server for Xiaozhiをインストールします。 以下のリポジトリのREADMEにある「OPEN HACS REPOSITORY ON MY (マーク)」をクリックします。

github.com

すると、リダイレクトでHACSを開くためのページが表示されます。 このページ下部の「Your instance URL」をペンマークで変更し、Home AssistantのWeb UIのURLを入力します。 そして、Open linkをクリックすると、Home AssistantのWeb UIが開き、インストールします。

インストール後にHome Assistantの再起動が求められるため、Web UI上から行う(設定->開発者ツール->確認して再起動)か、Dockerコンテナを再起動します。

次に、MCP Server for Xiaozhiに、MCPエンドポイントのURLを設定します。 「設定->デバイスとサービス->統合タブ->統合を追加ボタン->MCP Server for Xiaozhi」を選択します。 「Input WebSocket Access Point For XiaoZhi Ai」の欄が表示されるため、スタックチャンのスマートフォンアプリのSettings->MCPから確認したMCPエンドポイントのURL( wss://api.XiaoZhi.me/mcp/?token=xxxx )を入力します。

正しく接続できている場合、スタックチャンのスマートフォンアプリのSettings->MCPに、Access Point Statusの項目が表示されるようになります。 これが使えるツールのリストのようです。

Home Assistantでいくつかのデバイスを認識できていれば、「デバイスのリストを取得して」と伝えると、リストアップしてもらえるようになりました。

Home Assistantで、Matter経由で、Nature Remo Lapisを操作できるようにする

Home Assistantを、Matter Serverに接続する必要があります。 Home Assistant OSを利用している場合は、Matter Serverは同梱されているため、特に追加の設定は必要ないかもしれません。

「設定->デバイスとサービス->統合タブ->統合を追加ボタン->Matter」を選択します。 Matter ServerのWebSocketのURLを入力するように求められます。 筆者の構築の場合は、ws://<IPアドレス>:5580/ws で接続できました。 これでHome AssistantがMatter Serverに接続した状態になります。

Home Assistantに、Nature Remo LapisをMatterデバイスとして追加します。 「設定->デバイスとサービス->デバイスタブ->デバイスの追加ボタン->Matterデバイスの追加」を選択します。 「デバイスはすでに別のMatterコントローラーに追加されていますか?」とダイアログが出ますが、筆者のNature Remo LapisはGoogle Homeに接続している状態だったため、「はい。既に使用されています。」を選択し、「その他コントローラー」を選択しました。 すると「セットアップコードを入力」のダイアログが表示されます。 Nature Remo LapisのAndroidアプリNature Homeを開き、「設定(右上の歯車)->ホームから接続したいものを選択->デバイスからRemo Lapisを選択->Matter連携からMatter連携をする」を選択し、ペアリング用のコードを表示しました。 このコードを、「セットアップコードを入力」のダイアログに、ハイフン付きの数値で入力します。 入力が完了し、セットアップが完了すると、「設定->デバイスとサービス->デバイスタブ」にNature Remo Lapisで認識しているデバイスが表示されるようになります。

スタックチャンから確実に操作するためのHome Assistantの設定

これで、スタックチャンから操作できるようになります。 しかし、このAPIではデバイスの名称を正しく認識して指示する必要があり、エアコンをそのまま指示できませんでした。 そのため、以下の2つのことをやりました。

余計なデバイスを無効にする

Home Assistantは多くのデバイスを認識します。 Google Homeだったり、ネットワークに接続されたスピーカーが検出されていました。 MCPではこれらのデバイスが同列に見えます。 操作して欲しくないデバイスを無効にして、見えるデバイスが減るようにしました。

「設定->デバイスとサービス->デバイスタブ」から、不要なデバイスをクリックし、そのデバイスの画面の右上の「編集ボタン(鉛筆マーク)」をクリックし、ダイアログから「デバイスを有効にする」のチェックを外して、更新を押します。 これを、不要なデバイスの数だけ繰り返しました。

デバイスのエリアと名前を設定する

Home Assistantでは、デバイスにエリアが設定され、指示にはエリアも引数として必要になります。 日本語で指示するため、日本語のデバイス名とエリアを設定すると良いと思われます。

「設定->エリア、ラベル、ゾーン」を開くとリストが表示されます。 確か最初のうちは「リビングルーム」になっていたため、編集ボタン(鉛筆マーク)をクリックし、呼びやすい「リビング」に変更しました。

「設定->デバイスとサービス->デバイスタブ->設定したいデバイス」をクリックし、そのデバイスの画面の右上の「編集ボタン(鉛筆マーク)」をクリックします。 ダイアログから「エリア」を先ほど設定した「リビング」に変更し、名前欄も、デバイス名もわかりやすいものに変更して、更新を押します。 筆者は、エリア「リビング」、名前「エアコン」にしました。

スタックチャンに指示する

スタックチャンのMCPを使って、正確に「エリア」と「名前」を指定してMCPのAPIをAIに呼び出してもらう必要があります。 まずは「デバイスのリストを教えて」と指示して、認識されているデバイスを確認します。 その後、AIがデバイスのリストを把握した状態で、「リビングのエアコンをオンにして」と伝えると、操作できました。

実際にエアコンからリモコンを受信したときの「ピッ」という音も聞こえてきて、動作が開始しました。 Nature Homeアプリ上でも、エアコンのステートが変わっているのを確認できました。

筆者のところでできていないこと

エアコン操作で、現在できているのは以下の3パターンの指示です。

  • エアコンをオンにする
  • エアコンをオフにする
  • エアコンの温度をXX度にする

冷房、暖房、送風のモード切り替えは実現できていません。 オンにしたときのモードはNature Remoが管理している、前回のモードのようです。

スタックチャンアプリ上のMCPのところにツールのリストが表示されていると言いました。

このツール上でエアコンの操作に利用できそうなものは以下の3つです。

  • HassTurnOn(オン)
  • HassTurnOff(オフ)
  • HassClimateSetTemperature(温度設定)

つまりこのMCPではモードの切り替えに対応できていません。 MCP側にこれらのツールが登録されているわけではなく、Home AssistantのBuilt-in intentsから使えるものをツールとして登録しているようです。

developers.home-assistant.io

HassClimateSetTemperatureの項目を見ると、引数には「temperature」しかなく、モードは切り替えられそうにありません。 おそらく現在の構成では上記のようなことしかできないと思われます。

現在のMCP、Home Assistantの制限で、いくつか制約があることがわかりました。

使ってみて感想

M5公式アプリでスタックチャンをAIエージェントとして使ってみた感想はいくつかあります。

  • なでるなどの操作に反応してかわいいです
  • エージェントの応答が速い!

今感じている不具合はいくつかありますが、愛嬌という感じがします。

  • 「Hi, StackChan!」のウェイクワードの打率が3割くらい(私が作ったファームウェアより反応が悪い気がします)
  • レスポンスの文が、英語がはさまると口調が変わる。時々日本語ではなく中国語として発音される。

試していた過程

Home AssistantとNature Remo Lapisの連携を、最初のうちはななりんさん(@NaNaRin_ks)製作の、プラグインを試していました。

github.com

こちらでは、エアコンのデバイスに対して、オンオフする操作ができなかったため、コードをforkして機能を足していました。

https://github.com/NaNaLinks/homeassistant_nature_remo/compare/main...74th:homeassistant_nature_remo:main

このようなことをしていたところ、Kenta IDAさん(@ciniml、Nature Remoデバイスの開発に携われている方)からMatterを使えばできるのではないかとアドバイスをいただき、今回の構成を試すことになりました。 Matter連携で、すんなりエアコンを操作できるようになりました。 改めて、Nature Remo Lapisは良い製品だと感じました。

拙著『お家AIエージェントスタックチャン召喚術』の紹介

最後に、このテーマで少し紹介をさせてください。

筆者は、2026年4月に「お家AIエージェントスタックチャン召喚術」という同人誌を頒布しました。 こちらは、自作ファームウェアを作り、Claude Agent SDKと連携して、家電の操作を行わせるAIエージェントに、スタックチャンを仕立てることをテーマにしています。

booth.pm

この書籍の過程で開発した、Claude Agent SDKと連携するファームウェアとサーバーのコードは、オープンソースとして公開しています。

github.com

まだ改良中ですが、独自に拡張したAIエージェントスタックチャンを構築したいと思ったら参考にしてみてください。

技術書典20にて『お家AIエージェントスタックチャン召喚術』を頒布します

2026/4/11から始まる技術書典20にて、『お家AIエージェントスタックチャン召喚術』を頒布します!

techbookfest.org

4/12に池袋サンシャインシティで開催されるオフラインイベントの他、以下の技術書典オンラインマーケットでも購入できます。

techbookfest.org

2026-05-03追記

Boothでの販売も開始しました。物理書籍はこちらから購入できます。

74th.booth.pm

この本で分かること

  • ししかわさん開発の、M5Stack製品を使ったオープンソースハードウェアのコミュニケーションロボット、スタックチャンとは何か?
  • スタックチャンを組み立てる方法。JLCPCBへの接続ボードと3Dプリントケースの発注方法
  • 74thがスタックチャンを音声エージェントにするために組み立てたアーキテクチャ
  • M5Unifiedを使ったスタックチャン向けのファームウェアの開発方法
  • LLMエージェント開発に使えるClaude Agent SDKの解説
  • 赤外線リモコンをClaude Agent SDKで扱えるようにして家電を操作する方法
  • お家のAIエージェントで便利な知識をスキルとして与える方法

製作経緯

スタックチャンとは、ししかわさん開発の、M5Stack製品を使ったオープンソースハードウェアのコミュニケーションロボットです。

protopedia.net

M5Stack公式が、まもなく公式スタックチャンキットを発売します。

www.kickstarter.com

このスタックチャンを、お家の中に特化したAIエージェントとしてリビングに置いたら、かわいくて便利だろうと思い、製作を始めました。 以前から、カスタマイズ可能なお家AIエージェントを作りたいと思っており、このスタックチャンが出るタイミングにやってみようと思いました。

実際に自宅に置き、「Hi! Stack-Chan」と声をかければ、日常会話の他、エアコンの操作や、次のバス時刻の問い合わせなどができるようになりました。 このスタックチャンを構築するに当たって必要だった知識をまとめた書籍になります。

また、今回製作したフレームワークは、オープンソースとして公開しています。 このフレームワークは、スタックチャンとPythonサーバをWebSocketで接続して、AIエージェントと簡単に組み合わせられるようにするものです。 このフレームワークを使えば、簡単にAI音声エージェントを構築できるようになるはずです。

github.com

本書では、開発したフレームワークの使い方ではなく、フレームワークを作るのに必要だった知識や考え方、フレームワークを活用してお家を便利にするところにフォーカスしています。 フレームワークの使い方自体は、技術書典イベントまでにフレームワークリポジトリ内にドキュメントを整えています。

お品書き

既刊を含めたオフラインイベントのお品書きは以下となります。 ぜひ、4/12は技術書典オフラインイベントにご来場ください。

オフライン会場では、音声を使ったデモはしません(同人誌頒布イベントのため)が、スタックチャンの動く姿を展示する予定です。

目次

  • まえがき
  • 1.スタックチャンの基礎知識と組み立て方
    • 1.1.スタックチャンとは
    • 1.2.スタックチャンの主な部品
    • 1.3.スタックチャンのファームウェア
    • 1.4.可能な組み合わせ
    • 1.5.自分で接続ボードとケースを製造する方法
    • 1.6.ケースと接続部品以外に必要な部品
    • 1.7.タカヲさん製作ケースでの組み立て方
    • 1.8.M5Stack公式スタックチャンキット
    • 1.9.その他
  • 2.筆者のAIスタックチャン製作アーキテクチャ
    • 2.1.AIエージェントの稼働場所
    • 2.2.筆者のホームAIエージェントスタックチャンのアーキテクチャ
    • 2.3.今回作成したファームウェアとサーバのフレームワーク
  • 3.ファームウェア開発
    • 3.1.PlatformIO
    • 3.2.WebSocket通信
    • 3.3.M5Unified
    • 3.4.サーボモータの操作
    • 3.5.ウェイクアップワード検出をESP-SRで実現する
    • 3.6.WebSocketコントロールスタックチャン
  • 4.AIエージェント開発
    • 4.1.AIエージェント開発
    • 4.2.汎用のAIエージェントフレームワークに必要な機能
    • 4.3.代表的な汎用AIエージェントフレームワークの選択
    • 4.4.Claude Agent SDKを使う
    • 4.5.スキルで知識を与える
    • 4.6.カスタムツール
  • 5.ホームエージェントにする
    • 5.1.Nature Remoシリーズを使って赤外線リモコンを操作する
    • 5.2.赤外線リモコンをREST APIで操作できるようにする
    • 5.3.スキルで生活の知識を入れる
    • 5.4.今後やりたいこと
  • おわりに

M5Stack Core S3などで、音声認識ライブラリESP-SRを使う

tl;dr

  • ESP-SRはESP32でウェイクアップワードと命令認識が使えるEspressif社のライブラリです
  • ESP-SRに"Hi! StackChan"というウェイクアップワードが含まれており、スタックチャン製作に活用できます
  • M5UnifiedでESP-SRが使えるようにライブラリを作りました

すぐに使いたい人はこの記事を読まずに、以下のライブラリのページを見て、導入手順を読んで導入してみてください。

github.com

経緯

過去にスマホから家電を操作できるスマートホームを作っていましたが、お家の中で気軽に使えるAIエージェントが欲しくなりました。 M5Stack公式スタックチャンが発売されるにあたり、スタックチャンをスマートホームAIエージェントにしたら面白くて便利そうと思いました。 そのために、ESP32上で動作するウェイクアップワード技術を調べていたところ、EspressifからESP32向けの音声認識エンジンESP-SRを見つけました。

スタックチャンで利用したM5Stack CoreS3は、ESP32-S3を搭載したコアモジュールです。 Core2からマイクが搭載されるようになりましたが、CoreS3から本体に載るようになり、マイクを利用しやすくなりました。 なお、CoreS3には、CoreS3、CoreS3 SE、CoreS3 Liteの3種類がありますが、どれにもマイクが搭載されています。 私はCoreS3 SEを使いました。

M5Stack CoreS3 SEwww.switch-science.com

ESP-SRとは

ESP-SRとは、Espressif社が提供しているESP32上で動作する音声認識ライブラリです。Espressif社がAIプロダクト開発に便利なように提供してくれているようです。

github.com

ノイズキャンセルなどの機能を持っており、結構しっかりと作られています。

  • エコーキャンセル
  • ノイズキャンセル
  • 音声アクティビティ検出
  • 自動ゲイン制御
  • ウェイクワード検出エンジン
  • 音声コマンド検出エンジン

ウェイクアップワード検出の利用には、任意のウェイクアップワードを認識するわけではなく、モデルが必要です。 リポジトリのREADMEにありますが、「Hi,ESP」など多数のモデルが公開されています。 その中に「Hi, Stack Chan」が含まれています。

スタックチャン製作にはこれを使わない手はないと思い、試してみました。

なお、ESP-SRのウェイクアップワード自体はESP32-S3以外のESP32でも動作しますが、ESP32のArduinoライブラリにESP32-S3、ESP32-P4でのみ有効になるように作られています。私のテストではESP32-S3である、CoreS3、Atom S3R+Atomic Echo Base、Atom EchoS3Rでのみ動作しました。

モデルファイル

ESP-SRでは、srmodels.binというモデルファイルを作成し、それをmodelsパーティションに入れ、それを読み込んで動作します。 モデルファイルは、esp32-arduinoにも含まれていますが、こちらは「Hi,ESP」と英語コマンドのモデルが入っていました。 「Hi,Stack Chan」を動かしたい場合、srmodels.binを作る必要があります。

このファイルを作成する方法は、以下のリポジトリに記載してあります。 こちらを参照してください。

github.com

esp32-arduinoにはESP-SR用のパーティションファイルが作られています。 このパーティションファイルを使うと適用できます。

github.com

パーティションにsrmodels.binを書き込むには以下のように、ファームウェアアップロードに追加でコマンドを実行する必要があります。

esptool.py --chip esp32s3 --port "/dev/cu.usbmodem114401" --baud 1500000 write_flash 0xd10000 "srmodels.bin"

ArduinoのESP-SRライブラリを使おうとしたが、よく分からなかった

esp32-arduinoに付属するESP-SRライブラリを使おうとしました。 このライブラリでは、I2Sを操作する部分もライブラリに含まれていました。

私の場合、I2Sを操作する部分はM5Unifiedの機能を使いたいと思っていました。 それと組み合わせる方法が、私にはできませんでした。

M5Unifiedのマイクから得たバイナリを渡すように変更

esp32-arduinoに含まれるESP-SRライブラリを変更し、ESP-SRライブラリからはI2Sを操作せず、音声データのバイナリだけを渡すようにすれば、I2Sの制御で競合せずに動くのではないかと思いました。

M5UnifiedではM5.Mic.record()でint16_tの配列データの形でデータが手に入ります。

#define AUDIO_SAMPLE_SIZE 256

void loop() {
  M5.update();

  // 音声の取得
  static int16_t audio_buf[AUDIO_SAMPLE_SIZE * 2];
  bool ok = M5.Mic.record(audio_buf, AUDIO_SAMPLE_SIZE, 16000, true);
}

その方法で実装し、試行錯誤したところ、無事動くようになりました。

最後にハマっていたのは、ESP-SR側のモノラル指定の仕方のあたりでした。

英語のコマンドも動きました。

英語のコマンドは以下のように、命令を作っておくと、検出してくれます。

static const sr_cmd_t sr_commands[] = {
    {0, "Turn on the light", "TkN nN jc LiT"},
    {0, "Switch on the light", "SWgp nN jc LiT"},
    {1, "Turn off the light", "TkN eF jc LiT"},
    {1, "Switch off the light", "SWgp eF jc LiT"},
    {1, "Go dark", "Gb DnRK"},
    {2, "Start fan", "STnRT FaN"},
    {3, "Stop fan", "STnP FaN"},
};

配列の3つ目の要素であるphonemeは、以下のpythonスクリプトで生成できるようです。

github.com

ライブラリ化

M5Unifiedで動いた実装を、他でも使えるようにライブラリ化しました。

github.com

このライブラリでは、PlatformIOと、Arduino IDEでの利用方法を載せています。 日本語用のドキュメントも用意したので、使ってみたい方はこちらを参照して使ってみてください。

github.com

なお、PlatformIOを使う場合、PlatformIO公式のESP32 Platform はesp32-arduinoの更新が2系で止まっているため、3系がメンテナンスされているpioarduino/platform-espressif32 を使う必要がありました。設定方法はライブラリのドキュメントに記載しています。

Atom S3R+Atomic Echo Base、Atom EchoS3Rでも動作確認した

M5Stack CoreS3で動作を確認しましたが、同じくPSRAM付きのESP32-S3を搭載したAtom S3R+Atomic Echo Baseの組み合わせと、Atom EchoS3Rでも動作を確認しました。

Atom Echo S3R - スマートスピーカー開発キットwww.switch-science.com

ATOMS3R AI Chatbotキット(8 MB PSRAM)www.switch-science.com

ただし、AtomS3RはFLASHが8MBと、CoreS3の16MBの半分しかありません。 ESP-SR用のパーティションはFLASH 16MB用しか提供されておらず、自作しました。

github.com

イベント会場で使ってみた

第三回スイッチサイエンス大感謝祭というイベントに参加し、その時にESP-SRの機能を付けたスタックチャンを見せていました。 ある程度騒がしい会場でしたが、ウェイクアップワードは動作していました。

ぜひ使ってみてください

ぜひ音声で認識するスタックチャンを作ってみたいならば、便利なので使っていきましょう!

2026年4月に開催される技術書典20では、スタックチャンでスマートホーム音声AIエージェントを作った技術についての解説、製作記となる本を作ろうと思います。現在鋭意製作&執筆中です。

techbookfest.org