近距離無線

Thread

IPv6ベースの低消費メッシュ無線。

概要

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 RouterThreadと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

項目ThreadZigbeeZ-Wave
IPネイティブはい(IPv6)いいえ(独自プロトコル)いいえ
Matter対応ネイティブBridge必要未対応
ゲートウェイBorder Routerのみ(IPブリッジ)専用ゲートウェイ必要専用コントローラー必要
オープンソースOpenThread一部公開2022年以降
デバイス数250台推奨65,534台232台
速度250 kbps250 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が簡潔です。

関連用語

参考リンク