概要
LoRaWAN(Long Range Wide Area Network)は、LoRa変調方式を物理層として使用するMACプロトコル・ネットワークアーキテクチャの規格です。LoRa Allianceによって仕様が策定・管理されており、世界中でIoT向けLPWAネットワークとして広く採用されています。
LoRaWANは単なる通信規格にとどまらず、ネットワークサーバーの機能・セキュリティ(AES-128暗号化)・OTA(Over The Air)アクティベーション・アダプティブデータレートなど、IoTネットワーク運用に必要な機能を包括的に定義しています。スター型のネットワークトポロジーを採用し、デバイス→ゲートウェイ→ネットワークサーバー→アプリケーションサーバーという4層構造でデータを伝送します。
歴史・背景
2015年1月、Semtech・Actility・Cisco・IBM等を中心にLoRa Allianceが設立され、同年6月にLoRaWAN 1.0仕様が公開されました。当時のIoT向け無線規格は独自規格が乱立していたため、業界標準としてLoRaWANが急速に普及しました。
2017年にはLoRaWAN 1.1が公開され、ローミング機能・セキュリティ強化が加えられました。2020年にはLoRaWAN 1.0.4が、2022年にはLoRaWAN 1.0.4とLoRaWAN 1.1の機能を統合した形でのメンテナンスが続いています。
日本では2016年頃からLoRaWANの商用サービスが始まり、現在はソフトバンク(LPWA)・KDDI等が商用サービスを提供。プライベートLoRaWANネットワーク構築事例も急増しています。
技術仕様
ネットワークアーキテクチャ
LoRaWANはスター型トポロジーを採用します:
エンドデバイス群
│ │ │ (LoRa無線)
▼ ▼ ▼
ゲートウェイ(複数配置)
│ (IPネットワーク)
▼
ネットワークサーバー(NS)
│
▼
アプリケーションサーバー(AS)
複数のゲートウェイが同一デバイスのパケットを受信し、ネットワークサーバーが重複排除・経路選択を行います(マクロダイバーシティ)。
デバイスクラス
LoRaWANエンドデバイスは3つのクラスに分類されます:
| クラス | 受信タイミング | 下り遅延 | 消費電力 | 用途例 |
|---|---|---|---|---|
| Class A | 上り送信後のみ2回受信窓 | 遅い(次回送信まで待つ) | 最低 | センサー全般 |
| Class B | 定期スロット受信(ビーコン同期) | 中程度 | 中 | スマートメーター |
| Class C | 常時受信(送信中以外) | 最小 | 高 | アクチュエーター・電源供給機器 |
Class Aが最もよく使われます。上りパケット送信後に1秒後(RX1)と2秒後(RX2)の2つの受信窓が開き、ネットワークサーバーはこのタイミングでのみ下りパケットを送れます。
セキュリティ
LoRaWANはAES-128ベースの二層暗号化を採用:
NwkSKey(ネットワークセッションキー):
→ MACコマンドの暗号化
→ フレーム整合性確認(MIC: Message Integrity Code)
AppSKey(アプリケーションセッションキー):
→ ペイロードデータの暗号化
→ エンドデバイス〜アプリサーバー間のE2E暗号化
これらのキーはデバイスのJOIN時に生成されます。
デバイスアクティベーション
2種類のアクティベーション方法:
OTAA(Over The Air Activation)(推奨):
1. デバイスがJoin Request送信(DevEUI, JoinEUI, AppKey使用)
2. ネットワークサーバーがJoin Acceptを返信
3. セッションキー(NwkSKey, AppSKey)を動的生成
4. 通信開始
ABP(Activation By Personalization):
DevAddr, NwkSKey, AppSKeyを事前に固定書き込み
→ JOIN手順なしで即座に通信開始可能
→ セキュリティ上の理由からOTAA推奨
周波数プラン(日本)
日本(AS923チャンネルプラン)の標準設定:
- 上り: 923.2MHz, 923.4MHz, 922.2MHz, 922.4MHz, 922.6MHz, 922.8MHz, 923.0MHz, 922.0MHz(8チャンネル)
- 下り(RX2): 923.2MHz, SF10
- SF: 7〜12(ADRで自動調整)
動作原理
パケット構造
LoRaWAN PHYPayload(物理フレーム)の構造:
┌──────────────────────────────────────┐
│ MHDR (1byte) │ MACPayload │ MIC (4bytes) │
└──────────────────────────────────────┘
MACPayload:
┌─────────────────────────────────┐
│ FHDR │ FPort (1byte) │ FRMPayload │
└─────────────────────────────────┘
FHDR:
┌──────────────────────────────────────────────────┐
│ DevAddr(4) │ FCtrl(1) │ FCnt(2) │ FOpts(0〜15) │
└──────────────────────────────────────────────────┘
ADR(Adaptive Data Rate)
ネットワークサーバーはデバイスの受信履歴(SNR)を分析し、最適なSFとTx出力を自動調整します:
SNRが高い(近距離・良好な電波環境):
→ SFを下げる(SF12→SF7等)
→ Tx出力を下げる
→ 高速通信・チャンネル容量増大
SNRが低い(遠距離・障害物多い):
→ SFを上げる(SF7→SF12等)
→ Tx出力を上げる
→ 到達性を優先
フレームカウンタ(FCnt)
リプレイ攻撃防止のため、送受信ともにフレームカウンタを管理します。カウンタが期待値より小さいパケットはネットワークサーバーが破棄します。
用途・ユースケース
公共サービス・インフラ
- 上下水道の遠隔検針・漏水検知
- ガス・電力スマートメーター
- 路上の空き駐車スペース管理
スマートビルディング
- ビル内の温湿度・CO2・照度管理
- 火災・煙感知センサーネットワーク
- 入退室・人流カウンティング
農業・環境
- 畑の土壌水分・気象データ収集
- 河川・ため池の水位監視
- 山林の温度・煙センサーによる火災早期検知
物流・資産管理
- パレット・フォークリフトの位置追跡
- 冷凍コンテナの温度監視
実装・開発のポイント
LoRaWANモジュール選定
開発を容易にするATコマンド対応モジュールが多数あります:
| モジュール | メーカー | 備考 |
|---|---|---|
| RN2903 / RN2483 | Microchip | ATコマンド対応 |
| CMWX1ZZABZ | Murata | STM32+SX1276統合 |
| RAK3172 | RAKwireless | SX1262ベース |
| E5シリーズ | SeeedStudio | Wio-E5, STM32WLベース |
STM32WLを使ったLoRaWAN実装例
/* STM32Cube-WL + LoRaWAN MWによる基本実装 */
#include "sys_app.h"
#include "lora_app.h"
#include "stm32_seq.h"
/* アプリペイロード(センサーデータ)*/
static uint8_t AppDataBuffer[LORAWAN_APP_DATA_BUFFER_MAX_SIZE];
static void SendTxData(void) {
LmHandlerAppData_t AppData = {
.Buffer = AppDataBuffer,
.BufferSize = 0,
.Port = LORAWAN_USER_APP_PORT
};
// 温度・湿度をペイロードにパック(各16bit固定小数)
int16_t temp = (int16_t)(get_temperature() * 100);
uint16_t hum = (uint16_t)(get_humidity() * 10);
AppDataBuffer[0] = (temp >> 8) & 0xFF;
AppDataBuffer[1] = temp & 0xFF;
AppDataBuffer[2] = (hum >> 8) & 0xFF;
AppDataBuffer[3] = hum & 0xFF;
AppData.BufferSize = 4;
// LoRaWAN送信(確認応答なし: LORAMAC_HANDLER_UNCONFIRMED_MSG)
LmHandlerSend(&AppData, LORAMAC_HANDLER_UNCONFIRMED_MSG, false);
}
ペイロード最適化
LoRaWANは帯域が非常に限られるため、ペイロードを最小化することが重要です:
悪い例(JSON送信):
{"temp":25.3,"hum":60.5,"bat":3.7}
→ 34バイト
良い例(バイナリ符号化):
temp: 2530 → 0x09E2 (2bytes, 100倍)
hum : 605 → 0x025D (2bytes, 10倍)
bat : 370 → 0x0172 (2bytes, 100倍)
→ 合計6バイト(約5.7倍圧縮)
The Things Network(TTN)を使った試作
オープンなLoRaWANコミュニティネットワーク「The Things Network」を使うと、無料でLoRaWAN環境を試すことができます:
- TTNアカウント作成(https://www.thethingsnetwork.org/)
- アプリケーション作成・デバイス登録(DevEUI, AppKey取得)
- LoRaWANモジュールにDevEUI/AppKeyを書き込み
- OTAA JOIN
- TTNコンソールでデータ確認
他技術との比較
LoRaWANとセルラーIoT(LTE-M/NB-IoT)の比較
| 比較項目 | LoRaWAN | LTE-M | NB-IoT |
|---|---|---|---|
| 通信速度 | 〜50kbps | 最大1Mbps | 最大250kbps |
| 月額費用 | 低(SIM不要) | 中(SIM必要) | 中(SIM必要) |
| プライベートNW | 可 | 不可 | 不可 |
| 移動体対応 | 限定的 | 良好 | 不可 |
| OTA更新 | 困難(低速) | 容易 | 条件次第 |
| カバレッジ | ゲートウェイ設置必要 | 既存インフラ活用 | 既存インフラ活用 |
LTE-Mは移動体対応・高速通信が必要な用途、NB-IoTは固定設置・超低消費電力用途、LoRaWANはコスト重視・プライベートネットワーク構築というすみ分けが一般的です。
ネットワークサーバーの選択肢
| サーバー | 種別 | 特徴 |
|---|---|---|
| The Things Stack | OSS/クラウド | 最も普及。無料プランあり |
| ChirpStack | OSS | オンプレ構築に最適 |
| AWS IoT Core for LoRaWAN | クラウド | AWSエコシステムと統合 |
| Azure IoT Hub(LoRaWAN) | クラウド | Azureエコシステムと統合 |