Matter 05 · Wi-Fi・Ethernet・BLE — どれを選び、どう使うか

Chapter 05

Wi-Fi・Ethernet・BLE — どれを選び、どう使うか

この章がなぜ必要なのか——ネットワークの選択は、あとから変えられない.

Thread か Wi-Fi かは、SoC の選定・電源設計・BOM コスト・ 「ユーザーにハブを買わせるか」という商品企画にまで波及する。 基板を起こしてからでは戻れない判断である。

そして BLE。Matter で BLE はコミッショニング専用という特殊な使われ方をする。 ここを誤解すると「BLE で常時通信できるはず」という前提で設計してしまう。

この章で使う既出の用語(定義は各リンク先). Matter(01 章 3 節)、コミッショニング(01 章 3 節)、セキュリティ(01 章 2 節)、ネットワーク(01 章 3 節)、IPv6(02 章 1 節)、データモデル(02 章 1 節)、トランスポート(02 章 1 節)、リンク(02 章 1 節)、mDNS(03 章 4 節)、マルチキャスト(03 章 3 節)、Router(04 章 2 節)

1. Matter がサポートするリンク層

リンク運用通信コミッショニング主な用途
Wi-Fi○○(同一ネットワークにいれば)常時給電・高スループット機器
Ethernet○○ハブ・ブリッジ・据置機器
Thread○○(既に参加済みなら)電池機器・多数配置
BLE×○(主役)初期セットアップの経路

BLE は運用通信に使えない. Matter の仕様上、BLE はコミッショニング時のトランスポートとしてのみ定義されている。 「Matter 機器と BLE で日常的に喋る」ということはない。 設定が終われば BLE は切断され、以降は Wi-Fi か Thread を使う。

2. Wi-Fi

要件

項目内容
IPv6 必須ルータが IPv6 を有効にしている必要がある(03 章)
mDNSマルチキャストが通ること
帯域2.4 GHz が一般的。5 GHz 対応機器もある
規格802.11 b/g/n が多い。Wi-Fi 6 (ax) 対応 SoC も増加

消費電力の現実

状態目安
送受信中100〜300 mA
アイドル(接続維持)数 mA〜数十 mA
DTIM ビーコン受信周期的に起きる必要がある
ディープスリープ数 µA(ただし切断される)

Wi-Fi で電池駆動は原則として無理である. 接続を維持するだけで DTIM ごとに起きる必要があり、平均消費電流は どうしても mA オーダーになる。単三電池 2 本(約 2000 mAh)で 数百時間——つまり数週間が限界に近い。

「Wi-Fi + 電池」を成立させるには、普段は完全に切断し、 イベント時だけ接続する設計にするしかない(接続に数秒かかり、 その間の消費も大きい)。ドアベルやカメラの一部がこの方式を採る。

常時応答が必要な電池機器なら Thread 一択である。

Wi-Fi での落とし穴

落とし穴内容
IPv6 が無効なルータ機器が動かない。ユーザー側の設定に依存する
クライアント分離ゲスト Wi-Fi では端末間通信が禁止されている
2.4/5 GHz の分離スマホが 5 GHz、機器が 2.4 GHz で別サブネットだと mDNS が届かない
メッシュ Wi-Fi中継機を跨ぐとマルチキャストが落ちることがある
省電力モードでのマルチキャスト取りこぼし機器が mDNS クエリを見逃す
DTIM 設定大きいと応答が遅れる

「うちのルータでは動かない」というサポート問い合わせは必ず来る. 上記のどれかであることがほとんどである。 トラブルシューティング手順をドキュメント化しておくことが実務上きわめて重要になる。

3. Ethernet

最も素直に動く。Border Router、ハブ、ブリッジ、据置型の機器に向く。

利点欠点
安定・高速配線が必要
マルチキャストの問題が起きにくい設置場所が制約される
電源が確保されている前提が置ける一般家庭では敷設されていないことが多い

開発初期は Ethernet で作るのが賢い. ネットワークの不確定要素を排除して、Matter のロジックだけに集中できる。 Linux 上の all-clusters-app を Ethernet で動かし、 データモデルとインタラクションを固めてから、無線に移す——という順序が効率的である。

4. BLE — コミッショニングの入口

なぜ BLE が必要なのか

新品の機器は、まだ Wi-Fi のパスワードも Thread の Dataset も知らない。 ネットワークに入れないので、IP で通信できない。

そこで、まだネットワークに入っていない機器と話す経路が要る。それが BLE である。

1. 機器が BLE でアドバタイズ(「私はコミッショニング待ちです」)
2. スマホが BLE で接続
3. BLE 上で PASE セッションを確立([13 章](13_コミッショニング.md#pase-spake2+-によるセッション確立))
4. BLE 経由で Wi-Fi 認証情報 or Thread Dataset を渡す
5. 機器がネットワークに参加
6. 以降は IP(Wi-Fi / Thread)で通信。BLE は切断

BTP(Bluetooth Transport Protocol)

BLE は MTU が小さい(デフォルト 23 bytes、拡張しても 244 bytes 程度)ので、 Matter のメッセージをそのまま載せられない。

BTP が、Matter メッセージを BLE の GATT 上でフラグメント/再構成する。

要素内容
サービス UUIDMatter 用に割り当てられた 16 bit UUID
Characteristic C1クライアント → サーバ(Write)
Characteristic C2サーバ → クライアント(Indicate)
Characteristic C3追加データ(任意)
ハンドシェイクウィンドウサイズと MTU の折衝
フラグメントセグメント化と再構成、フロー制御

BLE アドバタイズの中身

コミッショニング待ちの機器は、以下を含むアドバタイズを出す。

項目内容
Discriminator12 bit。どの機器かを絞り込む
Vendor ID / Product ID機器の種類(任意)
Commissioning Modeコミッショニング可能な状態か

スマホは QR コードから読み取った Discriminator と突き合わせて、目的の機器を特定する。

Discriminator は「同時に複数台をセットアップする」ための識別子である. 家電量販店の店頭や、同じ機種を何台も設置する現場では、 周囲に同じ製品が複数コミッショニング待ちになっている。 Discriminator(12 bit = 4096 通り)で絞り込むことで、目的の 1 台を選べる。

完全にユニークではないので、製造時にランダムに割り当てるのが望ましい。 全個体で同じ Discriminator にすると、隣の機器を設定してしまう事故が起きる。

5. ネットワークの選び方

判断フロー

電池駆動か?
 ├─ はい → 常時の即応性が必要か?
 │          ├─ はい → Thread(SED、ポーリング間隔を短めに)
 │          └─ いいえ → Thread(SED、ポーリング間隔を長く)※電池寿命最優先
 └─ いいえ(常時給電)
      ├─ 大きなデータを流す(映像・音声)か? → Wi-Fi
      ├─ 有線を引ける据置機器か? → Ethernet
      ├─ ユーザーにハブを要求できるか?
      │     ├─ できる → Thread(多数配置なら特に有利)
      │     └─ できない → Wi-Fi
      └─ 既存 Wi-Fi 製品の Matter 対応 → Wi-Fi(ハード変更なしの可能性)

比較表

観点Wi-FiThreadEthernet
電池駆動ほぼ不可○不可
スループット高い250 kbps高い
到達範囲ルータ次第メッシュで拡張ケーブル次第
ハブ(Border Router)不要必要不要
SoC コストやや高やや低—
設置の手軽さ○○×
ネットワークトラブル起きやすいBorder Router 依存少ない

多くのメーカーが両方を出している. 同じ製品ラインで Wi-Fi 版と Thread 版を用意し、 ユーザーの環境に合わせて選ばせる。SDK は共通なので、 プラットフォーム抽象化さえきちんとしておけば、アプリ層は使い回せる。

6. 同時対応(マルチトランスポート)

1 台の機器が Wi-Fi と Thread の両方を持つ構成もありうる。

メリットデメリット
ユーザー環境を選ばないBOM コストが上がる
Border Router が無くても動く2 つのラジオの共存設計が必要
—認証も両方必要になる可能性

仕様上、Matter の運用トランスポートは基本的に 1 つを選ぶ. 「Wi-Fi と Thread を同時に運用する」構成は複雑さの割に得るものが少ない。 実際には、両対応 SoC を載せて、コミッショニング時にどちらかを選ぶ設計が現実的である。

7. 開発時の構成例

最速で動かす(Ethernet / Linux)

# Linux 上でサンプルを直接実行。ネットワークの不確定要素がゼロ
./out/linux-x64-all-clusters/chip-all-clusters-app
# 別端末から
./out/linux-x64-chip-tool/chip-tool pairing onnetwork 1 20202021
./out/linux-x64-chip-tool/chip-tool onoff toggle 1 1

Wi-Fi 機器の開発(ESP32 の例)

# esp-matter 環境で
idf.py set-target esp32
idf.py build flash monitor
# BLE 経由でコミッショニング(Wi-Fi 認証情報を渡す)
chip-tool pairing ble-wifi 1 <SSID> <PASSWORD> 20202021 3840

Thread 機器の開発

# Border Router の Dataset を取得
ot-ctl dataset active -x
# BLE 経由でコミッショニング(Thread Dataset を渡す)
chip-tool pairing ble-thread 1 hex:<dataset> 20202021 3840

20202021 と 3840 は SDK のサンプルのデフォルト値である (テスト用の passcode と discriminator)。 製品では必ず個体ごとに変えること(13 章・22 章)。 全製品が同じ passcode だと、誰でもコミッショニングできてしまう。

8. 落とし穴

落とし穴対処
BLE を運用通信に使おうとする仕様上できない。設計を見直す
Wi-Fi + 電池を想定する消費電力を実測して現実性を確認する
Discriminator が全個体同じ製造時にランダム割り当て
BLE アドバタイズを止め忘れるコミッショニング完了後は停止する(電力・セキュリティ両面)
5 GHz 前提の設計多くの Matter SoC は 2.4 GHz のみ
ルータの IPv6 が無効ユーザー向けドキュメントで案内が必要
BLE と Wi-Fi/Thread の共存同じ 2.4 GHz。コエグジスタンス設定を確認する

BLE アドバタイズの停止は忘れられがちである. コミッショニングが完了したら、BLE は不要になる。 出し続けると電力を消費し、また 「コミッショニング待ちに見える」状態が残ってセキュリティ上も望ましくない。 ただし再コミッショニング用に、条件付きで再開できる必要はある(14 章)。

9. まとめ