LoginSignup
5
7

More than 5 years have passed since last update.

LoRaWANでIoTプラットフォーム(The Things Network)にデータを上げる方法 その2

Last updated at Posted at 2017-09-05

これまでのお話

  1. LoRaでIoTプラットフォーム(ThingSpeak)にデータを上げる方法
  2. LoRaWANでIoTプラットフォーム(The Things Network)にデータを上げる方法
  3. LoRaにGPSを付けて、会社の周りを歩いてみた(Google Earthで位置情報をプロットする)
  4. 複数のLoRaノードをゲートウェイにアクセスさせるときに気を付けること
  5. LoRa機器の受信強度(RSSI)の取得方法
  6. LoRaと法律の関係について

イントロダクション

以前の投稿で、LoRaWANへの接続の方法をご紹介しましたが、このほどDragino社のゲートウェイLG01-P-JPのファームがアップデートがありまして、そちらを使うとより簡単にLoRaWANへ接続できるようになりました。

今回はファームのアップデートから、LoRaWANに接続するまでをまとめたいと思います。

使用する機器は、弊社(株式会社オープンウェーブ)のLoRa IoT スターターキット、接続するIoTプラットフォームにはThe Things Network(以降TTN)となります。

全体像

全体像lorawan.PNG
デバイス:LoRa Mini
ゲートウェイ:LG01-JP
デバイスの固定文字列「Hello, world!」を、LoRaWANプロトコルでTTNへ送信します。

使用ハードウェア

  • Dragino社のLoRa IoT スターターキット
    • Dragino LG01-JP:LoRaゲートウェイ
    • Dragino LoRa mini:LoRaノード

ファームのアップデートファイル

今回アップデートするファームウェアのバージョンはfirmware 4.2.3です。

ビルド済みArduinoプログラム

ゲートウェイのArduino部分のプログラムは、コンパイルされた実行ファイルを直接取り込みます。

使用ソフト

使用プログラム

  • LoRaWANExample/lora-arduino/lora-arduino.ino  →デバイス(LoRa mini)

手順

ファームウェアのアップデート

TeratermなどでLG01-P-JPにログインし、バージョンが4.2.3より前のバージョンであれば、ファームウェアのアップデートを行います。

UP00.PNG

ファームウェアファイルのインストール

LG01-P-JPにブラウザでアクセスし、「System」→「Backup/Flash Fireware」を開きます。

UP01.PNG

現在のファームウェアのバックアップをダウンロードします。
UP02.PNG

ダウンロードした「dragino-IoT--v4.2.3-squashfs-sysupgrade.bin」を下記の項目からアップロードします。
UP03.PNG

アップデートの実行をします。
UP04.PNG

実行中の画面です。
UP05.PNG

実行が完了すると、ログイン画面が表示されます。
UP06.PNG

TTNの設定

アプリケーションとデバイスの登録

TTNにアカウントを作成し、アプリケーションの登録と、そのアプリケーションにデバイスを登録します。
アプリケーションは作成後、ABPに変更します。(デフォルトはOTAA)
デバイスを作成した時に得られた、Network Session Key、App Session Key、Device Addressを控えます。
TTN.PNG
)

ゲートウェイの登録

次の点に注意し、TTNでゲートウェイを作成します。

  • 予めLG01-JPにTeraTerm等でログインし、MACアドレス※1を控えておきます
  • TTNでゲートウェイの登録を行います
    • 「I'm using the legacy packet forwarder」を選択した上で作成します
    • Gateway IDはLG01-JPのMACアドレスを上3桁、FF、FF、下三桁で登録します
      • 例:MACアドレス「AA BB CC 11 22 33」の場合「AA BB CC FF FF 11 22 33」となる
    • 他は適宜設定します※2

※1:MACアドレスについて、LG01-JPには複数あります。(WiFiと有線の口ですね)
WiFiと有線のどちらのMACアドレスを使うのか?という疑問が出てくるかと思いますが、実はどちらでも構いません。
※2:ゲートウェイの接続先ルータの設定について。
ゲートウェイのプログラミングでは、現在router.au.thethings.network(オーストラリア)のサーバへ接続しています。
そのため、下記の設定では、アジアのルータを設定してください。
TTN_GW設定.PNG

ゲートウェイのプログラミング

ゲートウェイでは、LoRaでデバイスからデータを受信し、TTNにデータをアップロードするArduinoのプログラムを書き込みます。

「Sensor」→「Flash MCU」を開きます。
UP07.PNG

ダウンロードした「single_pkt_fwd_v002.hex」をアップロードします。
UP08.PNG

「Flash Image」で書き込みが実行されます。
UP09.PNG

ゲートウェイの設定

バージョン4.2.3のファームウェアでは、ブラウザ上からLoRaWANの設定を行います。

「Sensor」→「LoRa/LoRaWAN」を開きます。
UP10.PNG

LoRaWANのゲートウェイの設定に合わせて、各項目を設定します。
UP11.PNG

下にスクロールすると、LoRaのチャネルの設定があります。
以降のLMiCのライブラリの設定に合わせて、LoRaの周波数を指定してください。
UP12.PNG

デバイスのプログラミング

デバイス側では、LMiCライブラリの修正とデバイス情報の設定が必要になります。

LMiCライブラリの修正

LMiCとは、IBMが作成した暗号化を含めたLoRaのMACプロトコル→LoRaMACのライブラリです。(LoraMac in Cの略)

2017/3現在のLMiCライブラリ(v1.5ベース)は、EUとUS基準の無線周波数の設定が用意されています。そのまま日本では使えないので、とりあえず簡単に日本で使っても良い設定に変更します。

Arduino IDEを通常通りインストールすると、インクルードしたライブラリは\Documents\Arduino\librariesに配置されます。
\Documents\Arduino\libraries\arduino-lmic-master\src\lmic\lorabase.hを開き、EUの設定を書き換えます。

lorabase.h修正前
// Default frequency plan for EU 868MHz ISM band
// Bands:
//  g1 :   1%  14dBm
//  g2 : 0.1%  14dBm
//  g3 :  10%  27dBm
//                 freq             band     datarates
enum { EU868_F1 = 868100000,      // g1   SF7-12
       EU868_F2 = 868300000,      // g1   SF7-12 FSK SF7/250
       EU868_F3 = 868500000,      // g1   SF7-12
       EU868_F4 = 868850000,      // g2   SF7-12
       EU868_F5 = 869050000,      // g2   SF7-12
       EU868_F6 = 869525000,      // g3   SF7-12
       EU868_J4 = 864100000,      // g2   SF7-12  used during join
       EU868_J5 = 864300000,      // g2   SF7-12   ditto
       EU868_J6 = 864500000,      // g2   SF7-12   ditto
};
enum { EU868_FREQ_MIN = 863000000,
       EU868_FREQ_MAX = 870000000 };
lorabase.h修正後
// Default frequency plan for EU 868MHz ISM band
// Bands:
//  g1 :   1%  14dBm
//  g2 : 0.1%  14dBm
//  g3 :  10%  27dBm
//                 freq             band     datarates
enum { EU868_F1 = 923200000,      // g1   SF7-12
       EU868_F2 = 923200000,      // g1   SF7-12 FSK SF7/250
       EU868_F3 = 923200000,      // g1   SF7-12
       EU868_F4 = 923200000,      // g2   SF7-12
       EU868_F5 = 923200000,      // g2   SF7-12
       EU868_F6 = 923200000,      // g3   SF7-12
       EU868_J4 = 923200000,      // g2   SF7-12  used during join
       EU868_J5 = 923200000,      // g2   SF7-12   ditto
       EU868_J6 = 923200000,      // g2   SF7-12   ditto
};
enum { EU868_FREQ_MIN = 920600000,
       EU868_FREQ_MAX = 928000000 };

デバイスのプログラミング

「使用プログラム」のlora-arduino.inoを、Arduino IDEで開きます。
アプリケーションとデバイスの登録」で控えたNetwork Session Key、App Session Key、Device Addressで下記を書き換えます。

lora-arduino.ino
//ttn
static const PROGMEM u1_t NWKSKEY[16] = { 0x19, 0x7C, 0x79, 0x8E, 0x6D, 0xDE, 0xEB, 0xA6, 0x92, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0FF, 0xFF };
// LoRaWAN AppSKey, application session key
// This is the default Semtech key, which is used by the prototype TTN
// network initially.
//ttn
static const u1_t PROGMEM APPSKEY[16] = { 0x07, 0x8C, 0xB1, 0x4F, 0x1E, 0xAD, 0x39, 0x4A, 0x99, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0FF, 0xFF };
// LoRaWAN end-device address (DevAddr)
// See http://thethingsnetwork.org/wiki/AddressSpace
//ttn
static const u4_t DEVADDR = 0x2600FFFF;

このソース内でmydataという変数が、送信するデータです。
→LoRa miniに書き込み
LoRamini.PNG

接続確認

TTNにログインし、コンソールでデバイスの画面を開きます。
wan01.PNG

データを受信すると、リストに表示されます。
UP14.PNG

行を展開すると、受信したデータの詳細を見ることができます。
wan03.PNG

Payloadの「48656C6C6F2C20776F726C6421」が、デバイスのmydataになります。
この数字をASCII文字で表現すると、「Hello, world!」になります。

最後に

今回のファームアップデートでは、LoRaWANゲートウェイの使い勝手が格段に良くなったと思います。
弊社からDragino社への情報提供もあってか、ファームウェアとArduinoプログラムの構成は、以前の投稿のプログラムと似ている部分があります。(我々がpythonで作った部分をファームウェアのCプログラムに置き換えたような構造です)

Dragino社の製品はファームウェアもソースがオープンなので、内容を見てみるのも面白いかと思います。

注意

プログラミングにはArduino IDEを使用しますが、事前にArduino IDEに次の設定が必要です。

この記事で使用するソースは、使用するハードに依存している部分が大きいため、他のハードとの組み合わせでどうなるかは分かりません。

また、今回使用したプログラムは、LoRaWANの仕様を完全に満たしているわけではありません。(最も簡単なLoRaWANによるデータのアップロードをしているだけです。パケットのカウントや、SN比の算出など、ゲートウェイやデバイスの状態を表す値の取得の実装もダミーで実装しています。)

株式会社オープンウェーブ

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7