M5Stack「StackChan」の通信先をソースコードから徹底調査してみた
M5StackのオープンソースAIデスクトップロボット「StackChan(スタックチャン)」。
かわいい見た目とカスタマイズ性の高さから、すでに手に入れた方や、これから購入を検討している方も多いのではないでしょうか。
私も最近、このStackChanの魅力に惹かれている一人です。
小さなデバイスでありながら、音声で会話できたり、AIとつながったりするところに、大きな可能性を感じています。
一方で、カメラやマイクを搭載し、インターネット経由でAIとやり取りするデバイスを自宅に置いたり、連れて歩くとなると、ふと気になることもあります。
「自分が話した音声は、どこへ送られているのか」
「カメラの映像は、どのように扱われているのか」
「AIとの会話データは、どこかのサーバーに保存されているのか」
映画『ターミネーター』に登場するスカイネットほど極端な話ではないにしても、私たちの行動や会話に関する情報が、自分でも十分に意識しないうちに蓄積・分析されているとしたら、少し怖さがあります。
たとえ私が住んでいる田舎町であっても、インターネットにつながるデバイスを使う以上、便利さと引き換えに、どのような情報を預けているのかを意識することは欠かせません。
だからこそ、StackChanのような魅力的なAIデバイスを安心して楽しむためにも、通信先やデータの扱いを知ることは、とても大切だと思います。
そこで今回は、GitHubで公開されているStackChanの公式ソースコード(m5stack/StackChan)を読み解き、
「どのようなデータが」
「どのタイミングで」
「どこへ送られているのか」
を、技術的な視点から調査しました。
あわせて、「ソースコードのどこに書かれているのか」も確認しながら、できるだけわかりやすく解説していきます。
結論から言うと、何も操作していない通常起動時に、常に音声や映像が送信され続けているわけではありません。
しかし、AI会話やアバター連携など、特定の機能を利用する場合には、音声や画像、会話データが外部サーバーへ送信される可能性があります。
この記事では、その仕組みを中学生にも理解できるくらい、できるだけやさしく整理していきます。
1. StackChanの通信先は大きく4つ
StackChanのシステムは、「ファームウェア(本体)」「モバイルアプリ」「サーバー」の3つで構成されています。これらが通信する相手は、主に以下の4つに分類されます。
StackChan専用バックエンドサーバー(中国・深セン)
XiaoZhi AI サーバー(香港)
M5Stack EzData サーバー(香港)
標準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を購入される方や、すでに一緒に暮らしている方の参考になれば嬉しいです。テクノロジーと上手く付き合いながら、ワクワクする未来を楽しんでいきましょう!
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップは活動費に使わせていただきます!