見出し画像

M5Stack「StackChan」の通信先をソースコードから徹底調査してみた

M5StackのオープンソースAIデスクトップロボット「StackChan(スタックチャン)」。
かわいい見た目とカスタマイズ性の高さから、すでに手に入れた方や、これから購入を検討している方も多いのではないでしょうか。

私も最近、このStackChanの魅力に惹かれている一人です。
小さなデバイスでありながら、音声で会話できたり、AIとつながったりするところに、大きな可能性を感じています。

一方で、カメラやマイクを搭載し、インターネット経由でAIとやり取りするデバイスを自宅に置いたり、連れて歩くとなると、ふと気になることもあります。

「自分が話した音声は、どこへ送られているのか」
「カメラの映像は、どのように扱われているのか」
「AIとの会話データは、どこかのサーバーに保存されているのか」

映画『ターミネーター』に登場するスカイネットほど極端な話ではないにしても、私たちの行動や会話に関する情報が、自分でも十分に意識しないうちに蓄積・分析されているとしたら、少し怖さがあります。

たとえ私が住んでいる田舎町であっても、インターネットにつながるデバイスを使う以上、便利さと引き換えに、どのような情報を預けているのかを意識することは欠かせません。

だからこそ、StackChanのような魅力的なAIデバイスを安心して楽しむためにも、通信先やデータの扱いを知ることは、とても大切だと思います。

そこで今回は、GitHubで公開されているStackChanの公式ソースコード(m5stack/StackChan)を読み解き、
「どのようなデータが」
「どのタイミングで」
「どこへ送られているのか」
を、技術的な視点から調査しました。

あわせて、「ソースコードのどこに書かれているのか」も確認しながら、できるだけわかりやすく解説していきます。

結論から言うと、何も操作していない通常起動時に、常に音声や映像が送信され続けているわけではありません。
しかし、AI会話やアバター連携など、特定の機能を利用する場合には、音声や画像、会話データが外部サーバーへ送信される可能性があります。

この記事では、その仕組みを中学生にも理解できるくらい、できるだけやさしく整理していきます。


1. StackChanの通信先は大きく4つ

StackChanのシステムは、「ファームウェア(本体)」「モバイルアプリ」「サーバー」の3つで構成されています。これらが通信する相手は、主に以下の4つに分類されます。

  1. StackChan専用バックエンドサーバー(中国・深セン)

  2. XiaoZhi AI サーバー(香港)

  3. M5Stack EzData サーバー(香港)

  4. 標準NTPサーバー(時刻同期用)

それぞれの通信先について、詳しく見ていきましょう。

① StackChan専用バックエンドサーバー

これは、デバイスの管理やソーシャル機能(Moments)、ダンスデータの保存などを担当するサーバーです。

ソースコードを確認すると、一部の通信先として 47.113.125.164 というIPアドレスが直接書き込まれていました。このIPアドレスを調べると、中国・深センにあるAlibaba Cloudのサーバーであることがわかります。

ソースコードでの確認箇所:
firmware/main/hal/hal_account.cpp (L18-20)

static const std::string_view _get_user_account_info_url    = "http://47.113.125.164:12800/stackChan/device/user";
static const std::string_view _get_device_info_url          = "http://47.113.125.164:12800/stackChan/device/info";
static const std::string_view _unbind_user_account_info_url = "http://47.113.125.164:12800/stackChan/device/unbind";
  • いつ通信するの?: ユーザーが「Account」メニューを開いたときや、アプリセンターを開いたとき 。

  • 何を送るの?: デバイスのMACアドレス(個体識別番号)。

  • 何を受け取るの?: ユーザー名、デバイス名、アプリのリスト。

また、「AVATAR」アプリを起動したときには、WebSocketという技術を使ってリアルタイム通信が始まります。この時、カメラの映像(JPEG画像)や音声データがサーバーへ送信され続ける設計になっています。

ソースコードでの確認箇所:
firmware/main/hal/hal_ws_avatar.cpp (L408付近)


if (image_to_jpeg((uint8_t*)frameData, frameSize, width, height, (v4l2_pix_fmt_t)format, 20, &jpeg_data, &jpeg_len)) {
    if (jpeg_data) {
        sendPacket(DataType::Jpeg, jpeg_data, jpeg_len);  // Type 2 for JPEG
        free(jpeg_data);
    }
}

② XiaoZhi AI サーバー

StackChanの目玉機能である「AIとの会話」を支えているのが、このXiaoZhi(シャオチー)サーバーです。

  • 通信先: xiaozhi.me や api.xiaozhi.me。IPアドレスを調べると、香港のAlibaba Cloudでした。

  • いつ通信するの?: ユーザーがAIエージェントモード(XiaoZhiモード)を有効にして話しかけたとき。

  • 何を送るの?: あなたの音声データ、デバイスのMACアドレス。

音声はリアルタイムで香港のサーバーに送られ、そこで文字に変換され、AI(QwenやDeepSeekなどの言語モデル)が回答を考え、再び音声となって返ってきます。つまり、AIと会話している内容は、すべてこのサーバーを経由(または保存)していることになります。

ソースコードでの確認箇所:
XiaoZhiの通信は firmware/patches/xiaozhi-esp32.patch を通じて、外部のXiaoZhiプロジェクト(78/xiaozhi-esp32)に依存しています。
XiaoZhi公式ドキュメント(docs/websocket.md)には、デバイスが Opusエンコードされたバイナリ音声データ をWebSocket経由でサーバーに送信し続ける仕様が明記されています。

③ M5Stack EzData サーバー

M5Stackが提供している、IoT機器向けのデータ通信サービスです。

  • 通信先: uiflow2.m5stack.com や ezdata2.m5stack.com。こちらは香港のMicrosoft Azureでした。

  • いつ通信するの?: ランチャーから「EZDATA」アプリを選択して起動したとき。

  • 何を送るの?: MACアドレス、サーボモーターの角度や速度データ。

ソースコードでの確認箇所:
firmware/main/hal/hal_ezdata.cpp (L158, L257)

const std::string url = "https://ezdata2.m5stack.com/api/v2/device/registerMac";
// ...
_mqtt->Connect("uiflow2.m5stack.com", 1883, client_id, _token, "" );

④ 標準NTPサーバー

これはインターネット上の時計のようなもので、StackChanが正しい時刻を知るために使われます。

  • 通信先: pool.ntp.org や time.google.com など。

  • いつ通信するの?: 起動時や定期的な時刻合わせのとき。

  • 何を送るの?: 時刻を教えてほしいというリクエストのみ。プライバシーに関わるデータは送りません。

ソースコードでの確認箇所:
firmware/main/hal/hal_network.cpp (L37-39)

esp_sntp_setservername(0, "pool.ntp.org");
esp_sntp_setservername(1, "time.google.com");
esp_sntp_setservername(2, "cn.pool.ntp.org");

2. 知らぬ間にデータは送られている?

一番気になる「知らぬ間にプライバシーがアップロードされ続けているのか?」という疑問についてまとめます。

通常起動時は安全です。

電源を入れてランチャー(メニュー画面)が表示されているだけの状態なら、時刻合わせ以外の通信は行われません。勝手にカメラの映像や部屋の音声を送り続けることはありません。

しかし、機能の使い方次第でリスクは高まります。

  • AVATARアプリ使用時: カメラ映像がリアルタイムでサーバーに送信されます。

  • AI会話(XiaoZhiモード)使用時: あなたの音声や会話内容が香港のサーバーに送信されます。

これらは機能の性質上、サーバーと通信しないと実現できないものです。しかし、「そのデータが中国や香港のサーバーに送られている」という事実が、製品の説明で十分に明示されていない点は、少し注意が必要かもしれません。

3. まとめ:安心して楽しむために

StackChanは非常に魅力的で、テクノロジーの楽しさを実感できる素晴らしいデバイスです。しかし、カメラやマイクを持つインターネット接続機器である以上、データの行き先を知っておくことは大切です。

  • AI会話やアバター機能を使うときは、カメラに映るものや会話の内容に少し気をつける。

  • 使わないときは電源を切るか、カメラを壁側に向ける。

こうした少しの工夫で、プライバシーを守りながら、StackChanとの生活を安全に楽しむことができます。

これからStackChanを購入される方や、すでに一緒に暮らしている方の参考になれば嬉しいです。テクノロジーと上手く付き合いながら、ワクワクする未来を楽しんでいきましょう!

いいなと思ったら応援しよう!

富永道也|AI活用実装・情報リテラシー教育 よろしければ応援お願いします! いただいたチップは活動費に使わせていただきます!