概要
Thread(スレッド)は、IEEE 802.15.4を物理層に使用し、IPv6をネイティブにサポートするメッシュ無線ネットワークプロトコルです。2014年にNest Labs(現Google)・Samsung・ARM・Freescale・Silicon Labs・Big Ass Fans・Yale Securityの7社がThread Groupを設立して推進しています。2024年時点でThread Groupには300社以上が参加しています。
Threadの最大の特徴は、ルーターや専用ゲートウェイを必要とせずに、デバイス間がIPv6で直接通信できることです。Zigbeeが独自プロトコルスタックでIPとの親和性が低いのに対し、ThreadはIPネットワークのエクステンションとして設計されています。Matterスマートホーム規格の主要トランスポートとして採用されており、Apple HomePod mini・Apple TV・Google Nest Hub等がThreadボーダールーター(Border Router)として機能します。
歴史・背景
2014年にNest Labs(スマートサーモスタットメーカー、Google傘下)がThreadの開発を主導。既存のZigbeeは専用ゲートウェイが必要で、IPv6との統合が困難という課題があったため、IPネイティブな代替規格として開発されました。
主な変遷:
- 2014年: Thread Group設立、Thread 1.0 仕様公開
- 2017年: Apple がThreadをHomeKit対応デバイスで採用
- 2018年: OpenThread(Googleのオープンソース実装)が Apache 2.0 ライセンスで公開
- 2019年: Apple・Google・Amazon・Samsung・Zigbee AllianceがProject CONNECTED(Matter前身)を発足
- 2020年: Thread 1.2 リリース(商業建物向け機能追加)
- 2021年: Apple HomePod mini にThread Border Routerが組み込まれる
- 2022年: Matter 1.0リリース(Threadが主要トランスポートに)
- 2023年: Thread 1.3リリース(大規模ネットワーク向け改善)
技術仕様
基本パラメータ
| パラメータ | 値 |
|---|---|
| 物理層 | IEEE 802.15.4-2006 |
| 周波数帯 | 2.4 GHz |
| データレート | 250 kbps |
| ネットワーク層 | IPv6 + 6LoWPAN |
| ルーティングプロトコル | RPL(RFC 6550)ベース独自実装 |
| アドレス | IPv6 ULA(fc00::/7)を使用 |
| セキュリティ | DTLS(データ暗号化)+ IEEE 802.15.4 AES-128 |
| メッシュ構成 | はい(自律メッシュ) |
| 最大デバイス数 | 推奨250台(理論上はより多く) |
| 消費電力 | 非常に低い(エンドデバイス: µA〜mAオーダー) |
プロトコルスタック
アプリケーション層
├── Matter(スマートホームアプリ)
├── CoAP(Constrained Application Protocol)
├── UDP / TCP(IPv6上)
├── IPv6 / 6LoWPAN(IEEE 802.15.4フレーム圧縮)
├── IEEE 802.15.4 MAC
└── IEEE 802.15.4 PHY(2.4 GHz)
デバイス種別(ロール)
| ロール | 機能 | 電源 | 例 |
|---|---|---|---|
| Leader(リーダー) | ネットワーク管理、PAN ID管理。1ネットワーク1台 | 常時電源 | ハブ・ルーター |
| Router(ルーター) | データ中継、IPv6ルーティング | 常時電源 | スマートプラグ・電球 |
| REED(Router Eligible End Device) | 必要に応じてRouterに昇格可能 | 常時電源 | 高性能センサー |
| End Device(MTD) | 親Routerのみと通信。中継なし | 電池可 | 温湿度センサー |
| Sleepy End Device(SED) | 定期的にスリープしてRouter経由でデータ受信 | 電池 | 電池駆動センサー |
| SSED(Synchronized SED) | Parentと同期してスリープ | 電池 | Thread 1.2+ |
| Border Router | ThreadとIP(Wi-Fi/Ethernet)を接続するゲートウェイ | 常時電源 | Apple HomePod mini |
6LoWPAN(IPv6 over Low-Power Wireless Personal Area Networks)
IEEE 802.15.4のフレームサイズは127バイトと小さく、IPv6ヘッダー(40バイト)をそのまま送れません。6LoWPAN(RFC 4944/RFC 6282)により大幅な圧縮を実現します:
通常のIPv6 UDPパケット:
IPv6ヘッダー: 40バイト
UDPヘッダー: 8バイト
ペイロード: Nバイト
計: 48+N バイト
6LoWPANで圧縮後:
圧縮IPv6ヘッダー: 2〜5バイト(アドレスがリンクローカルなら省略多く)
圧縮UDPヘッダー: 4バイト
ペイロード: Nバイト
計: 6+N バイト(〜88%削減)
フラグメンテーション:
MTU(127B)を超えるIPv6パケットは6LoWPANがフラグメント・リアセンブル
Meshルーティング(RPLベース)
ThreadのルーティングはRPL(RFC 6550)ベースの独自実装で、DAG(Directed Acyclic Graph)トポロジーで最適経路を選択します:
ネットワーク形成:
1. Leaderが自律的に選出(パーティション対応)
2. Routerが全体のDoDAG(Destination-Oriented DAG)を構築
3. End DeviceがSleepy/Non-sleepyを選択してRouterに接続
経路選択指標(Routing Metric):
- Link Quality(RSSI, LQI)
- ETX(Expected Transmissions: 平均再送回数)
- Hop Count
動作原理
ボーダールーター(Border Router)
ThreadネットワークとIPネットワーク(Wi-Fi/Ethernet)を接続します:
インターネット / LAN(Wi-Fi/Ethernet)
↕ IPv6 ルーティング
Thread Border Router
(Apple HomePod mini, Google Nest Hub, Apple TV等)
↕ Threadメッシュ
Thread Router1 ←→ Router2 ←→ Router3
↓ ↓
End Device1 End Device2, 3...
Border Routerが提供する機能:
- BBR(Backbone Border Router): Thread Backbone Link(有線LAN/Wi-Fi)とのブリッジ
- NAT64: IPv4インターネットへのアクセス変換(ThreadはIPv6のみ)
- DHCPv6 / SLAAC: Thread内のIPv6アドレス配布
- DNS64 / mDNS: ドメイン名解決
Thread Commissioner(コミッショナー)
新デバイスをThreadネットワークに参加させる認証エンティティです:
新デバイスのネットワーク参加(Joining):
1. Joiner(新デバイス)がCommissioner発見(Discovery Request)
2. Commissioner(スマートフォンアプリ等)がJoiner確認
3. JPAKE(Joint Password Authenticated Key Exchange)でPSKdをセキュア共有
4. TLSハンドシェイクでネットワーク参加
5. Active Operational Dataset(暗号鍵・PAN ID等)をJoinerへ安全に配布
Matter統合時はMatterのCommissioning手順(BLEペアリング→Thread参加)に統合されます。
用途・ユースケース
Matter対応スマートホーム
Threadの最大市場はMatter規格デバイスです:
- 照明: Eve Energy・Nanoleaf・Philips Hue(Thread対応版)
- センサー: Eve Door & Window、Eve Motion、Eve Weather(温湿度)
- スマートロック: Yale・Schlage等Matter対応ロック
- スマートプラグ: Thread Border Router経由でMatterコントロール
構成例:
iPhone/HomePod mini(Thread Border Router)
↕ Thread
スマート電球 × 10(Router役)
↕
温湿度センサー × 5(Sleepy End Device)
ドアセンサー × 4(Sleepy End Device)
建物・商業施設
- BMS(Building Management System): 照明・空調・セキュリティの統合管理
- エネルギー管理: 各ゾーンの電力消費モニタリング
- アクセス管理: 入退室制御システム
実装・開発のポイント
OpenThread を使った開発
OpenThread(Google)はThread の完全なオープンソース実装です。Zephyr・ESP-IDF・nRF SDK等に統合されています:
nRF52840でThreadデバイスを実装する例(Zephyr + OpenThread)
#include <zephyr/kernel.h>
#include <zephyr/net/openthread.h>
#include <openthread/thread.h>
#include <openthread/coap.h>
#define LOG_TAG "ThreadSensor"
// CoAPリソース(温度計測値を公開)
static void temperature_coap_handler(void *aContext,
otMessage *aMessage,
const otMessageInfo *aMessageInfo)
{
otCoapCode response_code = OT_COAP_CODE_CONTENT;
otMessage *response;
otInstance *instance = (otInstance *)aContext;
// 温度センサー読み取り
float temp = read_temperature_sensor();
char payload[32];
snprintf(payload, sizeof(payload), "{\"temp\":%.2f}", temp);
// CoAP応答作成
response = otCoapNewMessage(instance, NULL);
otCoapMessageInitResponse(response, aMessage,
OT_COAP_TYPE_ACKNOWLEDGMENT,
response_code);
otCoapMessageAppendContentFormatOption(response,
OT_COAP_OPTION_CONTENT_FORMAT_JSON);
otMessageAppend(response, payload, strlen(payload));
otCoapSendResponse(instance, response, aMessageInfo);
}
static otCoapResource g_temperature_resource = {
.mUriPath = "temperature",
.mHandler = temperature_coap_handler,
.mContext = NULL,
.mNext = NULL,
};
void setup_thread_coap(otInstance *instance) {
g_temperature_resource.mContext = instance;
otCoapStart(instance, OT_DEFAULT_COAP_PORT);
otCoapAddResource(instance, &g_temperature_resource);
otThreadSetEnabled(instance, true);
}
ESP32-H2 + OpenThreadの例(ESP-IDF)
#include "esp_openthread.h"
#include "esp_openthread_netif_glue.h"
#include "openthread/dataset_ftd.h"
void app_main(void) {
// OpenThread設定
esp_openthread_platform_config_t config = {
.radio_config = ESP_OPENTHREAD_DEFAULT_RADIO_CONFIG(),
.host_config = ESP_OPENTHREAD_DEFAULT_HOST_CONFIG(),
.port_config = ESP_OPENTHREAD_DEFAULT_PORT_CONFIG(),
};
esp_openthread_init(&config);
// Active Dataset設定(ネットワーク参加設定)
otOperationalDatasetTlvs dataset_tlvs;
// QRコードから取得したThread Network Credentialを使う
// または Border Routerからのコミッショニングで自動設定
esp_openthread_auto_start(&dataset_tlvs);
// メインスレッドでOpenThreadを実行
esp_openthread_launch_mainloop();
}
Matter + Thread 統合設備の設計例
新デバイスのセットアップ手順(Matter over Thread):
1. デバイスをQRコード/NFCタグでコミッション開始
2. スマートフォンがBLE経由でデバイスと接続
3. Wi-FiパスワードではなくThread Network Credentialを転送
4. デバイスがThreadネットワークに参加
5. BorderRouterを経由してMatterコントローラーと通信開始
6. Siriに「部屋の照明をつけて」で操作可能
他技術との比較
Thread vs Zigbee vs Z-Wave
| 項目 | Thread | Zigbee | Z-Wave |
|---|---|---|---|
| IPネイティブ | はい(IPv6) | いいえ(独自プロトコル) | いいえ |
| Matter対応 | ネイティブ | Bridge必要 | 未対応 |
| ゲートウェイ | Border Routerのみ(IPブリッジ) | 専用ゲートウェイ必要 | 専用コントローラー必要 |
| オープンソース | OpenThread | 一部公開 | 2022年以降 |
| デバイス数 | 250台推奨 | 65,534台 | 232台 |
| 速度 | 250 kbps | 250 kbps | 最大100 kbps |
Threadは「IPネットワークの自然な拡張」として設計されており、専用ゲートウェイなしでWi-FiルーターにIPv6でアクセスできます。これはZigbeeやZ-Waveに対する大きな優位点であり、Matterの主要トランスポートとして採用された理由の一つです。
Thread vs BLE vs Wi-Fi(IoT用途)
消費電力面ではThreadのSleepy End DeviceはBLEのSleepy ModeやWi-Fiの定期接続より有利な場合があります。ただしBLEはスマートフォンとの直接接続が可能であり、ThreadはBorder Routerが必須です。大規模なメッシュネットワーク構成ではThreadが最も適しており、単一デバイスのスマートフォン連携ならBLEが簡潔です。