LoRa®とLoRaWAN®のArduinoガイド

LoRa®とLoRaWAN®の基本と、Arduinoハードウェア・ソフトウェアでの使い方を学びます。


AUTHOR: José Bagur、Taddy Chung、LAST REVISION: 2022/12/08 18:58


モノのインターネット(IoT)は、無線ネットワークを使ってインターネットに接続したモノの集合と言われ、接続したこれらのモノは、環境から情報を収集・交換することを目的としています。IoTは、物理の世界とデジタルの世界を接続します。接続するこどで、大量のデータを産み出し、リソースの最適化や既存システムの効率の改善などに使われます。

i
2025年までに、250億個以上のIoTデバイスがインターネットに接続されると言われています。

多くの既存のIoTデバイスは、Wi-Fi®やBluetooth®、ZigBee、Z-Wave®などの、短距離の無線ネットワークを使ってインターネットに接続されています。2Gや3G、4Gといったネットワークを使ったセルラー接続でも、IoTデバイスをインターネットに接続しています。それでも、これらの短距離から中距離の無線ネットワークがいつもIoTデバイスに適しているとは限りません。というのも、これらのネットワークは消費電力やバッテリー寿命が重要な問題でないアプリケーション向けに開発されているからです。IoTデバイスは、通常、低消費電力で、少ないデータ量を送受信します。

Low-Power Wide Area Networks

Low-Power Wide Area Networks(LPWAN)は、無線ネットワーク技術の集合で、低帯域幅と低消費電力(通常はバッテリー駆動)デバイスという、IoTデバイスの特定の要件に適しています。この種のネットワークは、低消費電力で、長距離・低ビットレートです。LPWANは、10バイトから1kBのデータパケットサイズで、上りの速度は最大200kbpsです。長距離接続は、ネットワーク技術により、2から1000kmまでと様々です。ほとんどのLPWAN技術は、スター型トポロジーを採用します。つまり、各デバイスは中央のアクセスポイントに直接接続します。

LPWANの重要なユースケースには、以下のようなアプリケーションが含まれます。

  • スマートシティ: スマートパーキング、インテリジェントストリートライト
  • サプライチェーンマネジメント: 資産追跡、状態監視
  • スマートグリッド: 電力・水道・ガスメータリング
  • スマート農業: 土壌状態監視、動物追跡、ジオフェンシング
i
LPWANの詳細を知りたければ、この記事を参照してください。

LPWAN技術は、免許された周波数帯または免許不要の周波数帯や、プロプライエタリ技術やオープン仕様を利用します。LoRa®とそのメディアアクセス制御(MAC)層プロトコル実装であるLoRaWAN®は、現在、IoTデバイスやサービスのサポートを最も牽引するLPWANの一つです。

帯域幅と短距離・セルラー・LPWANネットワーク。出展: The Things Network

帯域幅と短距離・セルラー・LPWANネットワーク。出展: The Things Network

LoRa®とLoRaWAN®

LoRa®とLoRaWAN®とは何か?

LoRa®は、チャープ・スペクトラム拡散(Chirp Spread Spectrum: CSS)技術に基づく、無線変調方式です。CSSでは、広帯域の線形周波数変調されたチャープパルスを使い、情報をエンコードします。LoRa®は、免許不要のサブギガヘルツの産業科学医療(ISM: Industrial, Scientific and Medical: ISM)バンドである、433 MHz帯と868 MHz帯、915 MHz帯を使います。ISMバンドは、産業科学医療用に、国際的に予約されています。

i
LoRa®変調技術は2010年にフランスのスタートアップであるCycleo社によって開発され、2012年にSemtech社に取得されました。

LoRa®に基づき、LoRaWAN®(LoRa for Wide Area Networks)仕様は、LoRa®物理層にMAC層を塚することで、インターネットで利用できるように拡張しています。LoRaWAN®仕様は、送受信タイミングなど、デバイスによるLoRaの使用法を定義したソフトウェア層です。LoRaWAN仕様はオープンソースで、2015年からLoRa Alliance®により維持管理されています。

i
LoRa Alliance®は、オープンな非営利団体で、セキュアなIoT LPWAN接続のためのオープンなグローバル標準としてLoRaWAN®を普及・推進するために、協力して経験を共有します。

LoRaWAN®ネットワークアーキテクチャ

典型的なLoRaWAN®ネットワークアーキテクチャは以下の必須要素を含みます: エンドデバイス(通常はセンサー)、基地局もしくはゲートウェイ(Long Range Relay: LRR)、ネットワークサーバー(Long Rnage Controller: LRC)、ネットワークのプロビジョニングと管理のためのオペレーションサポートシステム(Operation Support System: OSS)。

典型的なLoRaWAN®ネットワークアーキテクチャの例。出展: The Things Network

典型的なLoRaWAN®ネットワークアーキテクチャの例。出展: The Things Network

上記の図で、ネットワークサーバとゲートウェイには、基本的な違いがあることに注意してください。ネットワークサーバは、LoRaWAN®ネットワークの仮想MAC層を制御します。一方、ゲートウェイは、LPWANの導入とプロビジョニングを容易にするために、ネットワークサーバに事前に統合されたデバイスです。LoRaWAN®ネットワークサーバとゲートウェイのアクセスは、公開することも非公開にすることもできます。

i
The Things Network(TTN)は、クラウドベースでオープンな、分散型のLoRaWAN®ネットワークサーバです。このネットワークは、デバイスやアプリケーションのテストと統合、LoRaWAN®に慣れるための素晴らしい手段です。TTNに接続するには、ゲートウェイの範囲内に存在する必要があります。あなたの地域で、ゲートウェイを利用できるかは、世界地図を参照してください。もしも利用できない場合は、インストールすることを考えてください。

LoRaWAN®ネットワークは、通常、スター型トポロジで配備されます。つまり、ゲートウェイはエンドデバイスとネットワークサーバ間のデータを管理します。ゲートウェイは、インターネット経由で中央のネットワークサーバに接続します。一方、エンドデバイスは、ゲートウェイとのデータの送受信にLoRa®を使います。エンドデバイスは、一つのゲートウェイにだけ接続する必要があるというわけではなく、範囲内の全てのゲートウェイに情報をブロードキャストします。LoRaWAN®ネットワーク内での通信は、もともと双方向ですが、エンドデバイスから中央ネットワークサーバへの上り通信のほうがより多くなると予想されます。

i
スター型ネットワークトポロジは、長距離通信、ネットワーク内のゲートウェイや基地局数、エンドデバイスの消費電力、バッテリー寿命において、最高の関係を提供します。

スター型ネットワークには、他のネットワークトポロジと比較して、以下のような利点があります。

  • 事前計画なしに、どこへでもいつでも、ゲートウェイをネットワークに追加できます。
  • アップリンク時、複数のゲートウェイが同一のデータを受信するので、メッセージ配信の信頼性が高くなります。

データレート

LoRaWAN®ネットワークでのエンドデバイスとゲートウェイ間の通信は、異なる周波数チャネルとデータレートにわたります(異なるデータレートを使った通信は互いに干渉しません)。

i
LoRaWAN®は125kHzの帯域幅で、300bpsから5kbpsまでのデータレートをサポートします。

各エンドデバイスのバッテリー寿命とネットワークを通じた全体の利用可能な容量を最大化するために、LoRaWAN®は、データレートと通信時間、消費電力の最適化のために、ADR(Adaptive Data Rate)機構を使います。ADRは、エンドデバイスの以下の通信パラメータを制御します。

  • 拡散率(Spreading Factor): データ転送速度。拡散率が低いと、データ転送レートは上がる。
  • 帯域幅: ネットワークで2地点間で送信できるデータ量。
  • 送信電力: エンドデバイスの送信機が出力に生成するエネルギー。

以下の表は、125kHzの帯域幅での、拡散率とデータレート、通信時間を比較したものです(範囲は参考値であり、伝送状態により異なります)。

拡散率 データレート 通信距離 通信時間
SF7 5470 bps 2 km 56 ms
SF8 3125 bps 4 km 100 ms
SF9 1760 bps 6 km 200 ms
SF10 980 bps 8 km 370 ms
SF11 440 bps 11 km 40 ms
SF12 290 bps 14 km 1400 ms

エンドデバイスは、以下の規制を満たしている限り、いつでも利用可能な任意のチャネルで、任意の利用可能なデータレートを使い、送信することができます。

  • エンドデバイスは、各送信時に、疑似乱数を用いてチャネルを変更すること。変更の結果生じる周波数の多様性が、干渉に対してより強固なシステムとなります。

また、固有の規制も満たす必要があります。例えば、

  • EU868バンドでは、使用するサブバンドと地域規制に関して、最大送信デューティサイクル(エンドデバイスでは1%)を遵守する必要があります。
  • US915バンドでは、使用するサブバンドと地域規制に関して、最大送信期間もしくは滞留時間(400ms)を遵守する必要があります。
LoRaWAN®ネットワーク層。出展: The Things Network

LoRaWAN®ネットワーク層。出展: The Things Network

地域別パラーメータ

LoRaWAN®地域別パラメータ仕様は、LoRaWAN®ネットワーク層仕様に付随するものです。LoRaWAN®ネットワーク層仕様は、準拠したエンドデバイス(センサーやアクチュエーター、トラッカーなど)と、準拠したネットワークコア間の無線仕様を定義するものです。LoRaWAN®地域別パラメータは、免許不要で利用できる無線周波数帯でのスペクトル利用に対して世界中で強制されている様々な規制に、LoRaWAN®ネットワーク層仕様が適合するための仕様を定義します。

LoRaWAN®地域別パラメータ仕様は、様々な無線周波数変調技術を用いた、LoRaWAN®リンク層無線の適合運用のために必要な、物理層の設定も文書化しています。

i
LoRaWAN®地域別パラメータ仕様の背後にある考え方は、可能な限り広く規制地域チャネルをカバーする、最小数の地域別のチャネル計画をを作成することです。これにより、実装者に対する複雑さが減少し、認証に要する費用(エンドデバイスの認証は、ネットワーク層や地域別パラメータ、チャネル計画改訂が必要です)も削減することができます。

LoRaWAN®地域別パラメータ仕様は全てを規定するわけではありません。共通の支配項を規定して地域をカバーしているだけです。例えば、アジア向けのLoRaWAN®地域別パラメータは、チャネルの共通項を規定しているだけで、アジア各国で様々な規定のばらつきがあります。さらに、例えばTTNといった各ネットワークサーバは、送信チャネルなどの追加パラメータを自由に選択することができます。

詳細情報が必要であれば、ここのRP002-1.0.2 LoRaWAN®地域別パラメータのドキュメントを参照してください。LoRaWAN®地域別パラメータとArduinoに関する詳細なチュートリアルは、ここにあります。

クラス

LoRaWAN®仕様には、デバイスとアプリケーション間の通信プロファイルには、クラスA、クラスB、クラスCの3種類あります。各クラスは異なるアプリケーション要件に対応し、それぞれの目的に最適化された要件があります。3つのクラスの主要な違いは、遅延と消費電力です。エンドデバイスは必要な時にいつでもデータを送信できますが、クラスには、いつ受信できるかが規定されています。

i
全てのLoRaWANデバイスはクラスAを実装する必要があります。クラスBとクラスCはクラスAプロファイルの拡張です。

クラスA: “Aloha”

クラスAデバイスは、双方向通信プロファイルを実装します。このクラスでは、エンドデバイスが送信した後、RX1、RX2と通常呼ばれる、2回の受信ウインドウが続きます。サーバが、RX1かRX2ウインドウの間に応答しなければ、次の受信機会は、次の送信後です。クラスAのデバイスは、バッテリー駆動で多くの時間スリープ状態のことが多いので、消費電力は最小限で、データ送信間は長く、受信の遅延は大きくなります。

クラスAのデフォルト設定プロファイル。出展: The Things Network

クラスAのデフォルト設定プロファイル。出展: The Things Network

クラスB: “Beaconing"クラス

クラスBデバイスは、クラスAデバイスの拡張で、計画的な受信ウインドウを追加したものです。このため、固定した時間間隔で受信ウインドウを開き定期的に受信するデバイスを模擬します。このクラスは消費電力を最小限に抑えつつ、低遅延の受信が必要な時に実装されるべきです。

クラスBのデフォルト設定プロファイル。出展: The Things Network

クラスBのデフォルト設定プロファイル。出展: The Things Network

クラスC: Contiunous Reception

クラスC通信プロファイルは、充分な電力が利用可能なアプリケーションで利用されます。このため、受信ウインドウを最小化する必要はありません。これは、多くのアクチュエータ(スマートプラグ、街灯、電力メーターなど)に当てはまります。クラスCデバイスは、メッセージを送信しない限り、常にメッセージを待ちます。この振舞いにより、サーバとデバイス間の遅延は最低となります。

クラスCのデフォルト設定プロファイル。出展: The Things Network

クラスCのデフォルト設定プロファイル。出展: The Things Network

認証とセキュリティ

認証とセキュリティは、LoRaWAN®ネットワークでも重要です。全てのLoRaWAN®ネットワークには、AES128暗号化方式に基づく、基本となる認証とセキュリティのフレームワークがあります。認証と暗号化を単一のキーに依存する他のLPWANと比較して、LoRaWAN®フレームワークは、それらが分離されています。認証と完全性制御にはネットワークセッションキー(NwkSKey)を使い、データ暗号化にはアプリケーションセッションキー(AppSKey)を使います。

i
NwkSKeyとAppSKeyは、エンドデバイス、エンドデバイスメーカー、あるいは、それらを割り当てたアプリケーションの所有者に固有のAES-128ルートキーです。

LoRaWAN®は2つの認証とアクティベーション手段をサポートします。OTAAA(Over-The-Air-Activation)とABP(Activation by Personalization)です。

  • OTAA(Over-The-Air-Activation): この手法では、エンドデバイスは特定のネットワーク向けに初期化されません。特定のLoRaWAN®ネットワークにJOINリクエストを送信すると、デバイスアドレスと認証トークンを受信し、セッションキーが導出されます。NwkSKeyとAppSKeyはこの過程で、製造元がエンドデバイスに事前設定したルートAppKeyから導出されます。
OTAAアクティベーションプロセス。出展: The Things Network

OTAAアクティベーションプロセス。出展: The Things Network

  • ABP(Activation by Personalization): この手法では、エンドデバイスは特定のLoRaWAN®ネットワークで動作するよう個別化されています。エンドデバイスは、NwkSKeyとAppSKey、32ビットのデバイスネットワークアドレスで、事前設定されています。
ABPアクティベーションプロセス。出展: The Things Network

ABPアクティベーションプロセス。出展: The Things Network

i
推奨される認証とアクティベート手法は、高レベルのセキュリティを提供するOTAAです。APB方式は特定の状況下でのみ利用されるべきです。

Arduino®とLoRa®

Arduino®は、いくつかのボードやアドオン、ライブラリでLoRa®接続を提供しています。

LoRa®接続可能なArduino®ボード

MKR WAN 13001310ボードは、実用的で廉価なソリューションを、LoRa®接続と低消費電力が必要なアプリケーションに提供します。MKR WAN 1300と1310ボードは、Microchip®社のSAMD21マイクロコントローラーを基にしています。これらのボードは、LoRa®接続のために、Murata®社のCMCMWX1ZZABZモジュールと、セキュリティ用のATECC508暗号化・認証デバイス、オンボードストレージとして2MBのSPIフラッシュメモリを搭載しています。

Arduino® MKR WAN 1310ボード

Arduino® MKR WAN 1310ボード

PROハードウェアもLoRa®接続できます。Arduino® Portenta H7ボードは、Portenta Vision Shield LoRa®を使えば、LoRa®接続ができます。このアドオンボードは、LoRa®接続用に、Murata®社のCMCMWX1ZZABZモジュールを搭載しています。同じモジュールが、MKR 1310と1310ボードにも搭載されています。

Arduino® Portenta Vision Shield LoRa®

Arduino® Portenta Vision Shield LoRa®

屋外環境でのリモート監視・制御ソリューションに最適化されたArduino® Edge Controlは、MKR WAN 1300か1310ボードを追加することで、無線接続機能を拡張することができます。Edge Controlはどこにでも設置でき、遠隔地でインテリジェントな制御が必要となるスマート農業や他のアプリケーションに最適です。

Arduino® Edge Control

Arduino® Edge Control

LoRa®接続用Arduino®ライブラリ

Murata®社のCMCMWX1ZZABZ LoRa®モジュールでは、いくつかのArduinoライブラリが利用できます。それらの中で、Arduinoによって開発されたMKRWANライブラリと、Sandeep Mistry氏によって開発されたArduino LoRaライブラリを推奨します。MKRWANとArduino LoRaライブラリは、LoRa®とLoRaWAN networks®で通信するためのAPIを提供します。

どちらのライブラリも、オンライン・オフラインのArduino IDEで利用できます。オンラインIDEを使う場合は、何もする必要がありません。双方のライブラリは既にインストールされ、すぐに利用することができます。オフラインIDEを使う場合は、ライブラリを手動でインストールする必要があります。ライブラリのインストールは簡単です。「ツール」→「ライブラリを管理」と進み、ArduinoによるMKRWANライブラリやSandeep Mistry氏によるLoRaを検索します。最新版のライブラリをインストールしてください。

i
現在、MKRWANライブラリには、2つのバージョンがあります。MKRWAN_v2ライブラリはまだベータです。

例: ネットワークサーバにデータを送受信する

Arduino®ハードウェアとソフトウェアを使い、LoRa®とLoRaWAN®ネットワークと通信するのは簡単です。例を見てみましょう。この例は、MKR WAN 1310ボードとMKRWANライブラリを使い、LoRaWAN®ネットワーク(今回はTTN)にデータを送信します。この例の回路を以下に示します。

この例での回路

この例での回路

TTNにメッセージを送受信する前に、ボードをネットワークに登録する必要があります。このためには、ボードのDevice EUIを知る必要があります。MKRWANライブラリの、FirstConfigurationというスケッチ例を実行すれば、ボードのDevice EUIを取得することができます。Device EUIがわかると、TTNにアカウントを作成して、アプリケーションの追加、アプリケーションの追加、ボードの登録を行うことができます。TTNのこのチュートリアルで過程を説明しています。

TTNにデバイスを登録すると、以下のコードでデータの送受信ができます。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
/*
  Send and receive data from a LoRaWAN network
  This sketch demonstrates how to send and receive data with the MKR WAN 1300/1310 board.
  This example code is in the public domain.
*/

#include <MKRWAN.h>
#include "arduino_secrets.h"

LoRaModem modem;

void setup() {
  // Serial port initialization
  Serial.begin(115200);
  while (!Serial);
  
  // LoRa module initialization
  // Initialize the modem with your regional band (eg. US915, AS923,...)
  if (!modem.begin(EU868)) {
    Serial.println("- Failed to start module");
    while (1) {}
  };

  // With the module initialized, we can get its version and device EUI
  // Your network server provider requires device EUI information to connect to their network
  Serial.print("- Your module version is: ");
  Serial.println(modem.version());
  Serial.print("- Your device EUI is: ");
  Serial.println(modem.deviceEUI());

  // Join procedure to the network server
  // OTAA method need appEUI and appKey, this information is provided by the network server
  int connected = modem.joinOTAA(appEui, appKey);
  if (!connected) {
    Serial.println("- Something went wrong; are you indoor? Move near a window and retry...");
    while (1) {}
  }

  // Set poll interval to 60 secs.
  modem.minPollInterval(60);

  // NOTE: independent of this setting, the modem will not allow sending more than one message every 2 minutes
  // This is enforced by firmware and can not be changed.
}

void loop() {
  Serial.println();
  Serial.println("- Enter a message to send to network");
  Serial.println("(make sure that end-of-line 'NL' is enabled)");

  // Get message from Serial Monitor
  while (!Serial.available());
  String msg = Serial.readStringUntil('\n');

  // Show the sent message to the network in HEX format
  Serial.println();
  Serial.print("- Sending: " + msg + " - ");
  for (unsigned int i = 0; i < msg.length(); i++) {
    Serial.print(msg[i] >> 4, HEX);
    Serial.print(msg[i] & 0xF, HEX);
    Serial.print(" ");
  }
  Serial.println();

  // Check if the message was sent correctly or if there was an error
  int err;
  modem.beginPacket();
  modem.print(msg);
  err = modem.endPacket(true);
  if (err > 0) {
    Serial.println("- Message sent correctly!");
  } else {
    Serial.println("- Error sending message :(");
    Serial.println("(- You may send a limited amount of messages per minute, depending on the signal strength");
    Serial.println("- It may vary from one message every couple of seconds to one  message every minute)");
  }

  // Wait and check if there's a message sent from the network
  delay(1000);
  if (!modem.available()) {
    Serial.println("- No downlink message received at this time");
    return;
  }

  // If there's a message available, store it
  char rcv[64];
  int i = 0;
  while (modem.available()) {
    rcv[i++] = (char)modem.read();
  }

  // Decode and show the received message from the network
  Serial.print("- Received: ");
  for (unsigned int j = 0; j < i; j++) {
    Serial.print(rcv[j] >> 4, HEX);
    Serial.print(rcv[j] & 0xF, HEX);
    Serial.print(" ");
  }
  Serial.println();
}

MKR WANボードとTTN間や、2つのMKR WANボード間でのデータ送信に関するに関する詳細なチュートリアルを参照してください。チュートリアルはここにあります。

参考文献

LoRa®とLoRaWAN®は、とても広範囲ですが、学習するには楽しいトピックです。この技術をさらに学びたければ、以下のリンクを参照してください。

オリジナルのページ

https://docs.arduino.cc/learn/communication/lorawan-101

最終更新日

March 2, 2023

inserted by FC2 system