DesignSpark Electrical Logolinkedin
Menu 検索
フォーラムで質問

LoRaWANとMS Azureの連携 – Part2:ネットワークを構築する

本シリーズでは、LoRaWANネットワークの技術と、有用な2つのサービスThe Things Network(以下TTN)とMicrosoft Azureを連携させる方法を、チュートリアルを通して紹介していく。チュートリアルでは、LoRaデバイスに接続した温湿度センサーで取得したデータを、LoRaゲートウェイからTTNへと送信し、TTNと連携させたMicrosoft Azureを利用してデータの可視化を行なう。
下の図は、今回のチュートリアルで構築するシステムの概要図だ。TTNのHTTP Integration機能を利用して、Azure IoT Hubと連携している。

本シリーズは4つのパートで構成されている。
パート1では、各技術・サービスの内容を説明し、連携方法の概要を紹介した。本記事の前に、こちらを読むことをおすすめする。

パート2では、RaspberryPi, TTN, センサデバイスのセットアップ方法を説明していく。
このセットアップは、前回解説したサービス連携方法の、方法①と方法②どちらにおいても必要となる作業だ。

 

1.準備

まず、本チュートリアルのための環境設定などの準備をおこなう。
以下は、筆者が今回使用したものの一覧だ。

OSは "Raspbian GNU/Linux 10(buster)" だ。
以上が用意できたら、LoRa GPS HATをRaspberry Piに搭載しておく。


ラズパイにHATを搭載した様子

また次の二つは、本チュートリアルを進めるうえで前提となる準備作業だ。

  • ラズパイのセットアップ
  • IPアドレスの固定化

これらについては、検索すれば充実した記事が多く見つかるので、本記事では解説しない。

準備ができたら、さっそくゲートウェイの設定にとりかかろう。

 

2.ラズパイの設定

LoRaゲートウェイ経由でTTNへデータを上げるための前準備として、ラズベリーパイをLoRaWANゲートウェイとして使用できるようにセッティングしていく。

①ラズパイのアップデート
まずはパッケージ更新をおこない、新しいバージョンにアップグレードする。
ターミナルで次のコマンドを実行する。

sudo apt-get update
sudo apt-get dist-upgrade

②「Raspberry Pi の設定」 > インターフェイス で、 "SSH", "VNC", "SPI"の3つを有効にする。設定後ラズパイを再起動する。

③ラズパイからGitHubを開き、ゲートウェイのファームウェアのソースコードを下記サイトよりダウンロードする。

dual_chan_pkt_fwd https://github.com/bokse001/dual_chan_pkt_fwd

④ダウンロードしたzipファイルを解凍し、dual_chan_pkt_fwdというフォルダをラズベリーパイのホームディレクトリ (/home/pi) に移動する。

⑤dual_chan_pkt_fwdファイル内の"dual_chan_pkt_fwd.cpp"を書き換える。書き換える箇所は、以下の3点だ。

まず周波数を変更する。

uint32_t freq = 923400000;
uint32_t freq _2 = 923200000;

つぎに、上記の直下に下記のコードを追加する。

#define REG_PA_CFG 0x09
int PWR_JPN_1276 = 0x3f;
int PWR_JPN_1272 = 0xe;

つづけて、下記のコードの直前に

if (sf == SF10 || sf == SF11 || sf == SF12) {
  WriteRegister(REG_SYMB_TIMEOUT_LSB, 0x05, CE);
} else {
  WriteRegister(REG_SYMB_TIMEOUT_LSB, 0x08, CE);
}

下記のコードを追加する。

// Set Tx Power for Japan
if (sx1272) {
  WriteRegister(REG_PA_CFG, PWR_JPN_1272, CE);
} else {
// sx1276
  WriteRegister(REG_PA_CFG, PWR_JPN_1276, CE);
}

その後、ファイルを保存する。

⑥dual_chan_pkt_fwdファイル内の"global_conf.json"を、以下のように書き換える。

{
  "SX127x_conf":
  {
    "freq": 923400000,
    "freq_2": 923200000,
    "spread_factor": 10,
    "pin_nss": 6,
    "pin_dio0": 7,
    "pin_nss_2": 6,
    "pin_dio0_2": 7,
    "pin_rst": 3,
    "pin_led1":4,
    "pin_NetworkLED": 22,
    "pin_InternetLED": 23,
    "pin_ActivityLED_0": 21,
    "pin_ActivityLED_1": 29
  },
  "gateway_conf":
  {
    "ref_latitude": 0.0,
    "ref_longitude": 0.0,
    "ref_altitude": 10,

    "name": "YourName",
    "email": "a@b.c",
    "desc": "Dual channel pkt forwarder",

    "interface": "wlan0",

    "servers":
    [
      {
        "address": "router.jp.thethings.network",
        "port": 1700,
        "enabled": true
      },
      {
        "address": "router.as1.thethings.network",
        "port": 1700,
        "enabled": false
      }
    ]
  }
}

ただし、"YourName"は自身の名前に、"a@b.c"は自身のメールアドレスに置き換える。また"interface"について、有線LANでインターネットに接続している場合は"eth0"、Wi-Fiで接続している場合は"wlan0"と適宜変更する。

⑦ターミナルを開いて、dual_chan_pkt_fwdディレクトリ内へ移動し、プログラムをコンパイルする。

make

⑧作成したプログラムをインストールする。

make install

実行すると、上図のようにdual_chan_pkt_fwdサービスが開始される。

⑨作成したプログラムを実行する。

sudo ./dual_chan_pkt_fwd

実行すると上図のような画面になる。ラズパイがゲートウェイとして機能し、パケットフォワーダが動作していることがわかる。

画像内の赤枠内はMACアドレスで、TTNの設定の際に使用するので控えておく
以上でゲートウェイ側の設定は完了だ。

 

3.The Things Network (TTN) の設定

ゲートウェイの設定が終わったら、つぎはTTN側の設定だ。

①TTNのアカウント登録を行なう。

The Things Network  https://www.thethingsnetwork.org/

②コンソールの設定を行なう。「コンソール画面」 > 「アカウント名」 > 「Setting」から、次のように設定する。

  • ハンドラー
    • ttn-handler-asia-se
  • 言語
    • 日本語

この設定で保存したら、一度ログアウトして再度ログインする。

③ゲートウェイの登録を行なう。

  • ゲートウェイID
    • Raspberry PiのMACアドレス。前節でdual_chan_pkt_fwdを実行したときに表示されたアドレスを入力する。
  • I'm using the legacy packet forwarder …
    • チェックを入れる
  • 記述
    • 何のためのゲートウェイなのか判別できるよう、使用者にとって分かりやすい説明を記述する。
  • 周波数計画
    • Asia 920-923MHz
  • Router
    • ttn-router-jp
  • 場所
    • 地図上で選択する
  • アンテナ代替え
    • 設置状況による

④アプリケーションの追加を行なう。

  • アプリケーションID
    • 任意
  • 記述
    • 任意
  • アプリケーションEUI
    • Asia 920-923MHz
  • ハンドラー登録
    • ttn-handler-asia-se

⑤デバイスの登録を行なう。

  • デバイスID
    • 任意
  • デバイスEUI
    • クロス矢印ボタンを押して自動生成
  • App Key
    • 自動生成される。触らない。

デバイス登録後、設定からアクティベーション方法をABPに変更する。

以上で、TTN側の設定は完了だ。

 

4.センサデバイスの設定

本節ではLoRaデバイスの設定方法を紹介する。まずはじめに、次のことを行なっておく。

①LoRaデバイス(LoRa Mini)と温度湿度センサ(DTH11)をつないだ後、PCと接続する。下の画像を参考にしてほしい。


センサデバイス

②「デバイスの一覧」から、"デバイスアドレス", "ネットワークセッションキー", "Appセッションキー"をコピーする。"ネットワークセッションキー"と"Appセッションキー"は、バイト区切り表示に変換してからコピーする。

③本節のはじめにダウンロードした、Openwave社のサンプルプログラムを編集する。Arduino IDEで”TTN_ABP_sample.ino”を開き、「シリアルポート」からデバイスを接続しているポートを選択する。プログラムの編集箇所は以下の通りである。

  • デバイスアドレス
    • TTN上でコピーしたデバイスアドレスを貼り付ける。頭に"0x"と記入
  • ネットワークセッションキー
    • TTN上でコピーしたネットワークセッションキーを貼り付ける
  • アプリケーションセッションキー
    • TTN上でコピーしたアプリケーションセッションキーを貼り付ける
  • Set data rate and transmit power
    • LMIC_setDrTxpow(AS923_DR_SF10,13);

これでTTNに登録したデバイス情報と、実際のセンサデバイスが紐づけられた。
この工程②で何か不明な点があれば、以下のFAQも参考にしてもらいたい。

LoRa関連製品FAQ | 株式会社オープンウェーブ http://www.openwave.co.jp/lora%E9%96%A2%E9%80%A3%E8%A3%BD%E5%93%81faq/

③アプリケーション内の 「Payload Format」 に、下記のコードを記述する。これにより、受信したメッセージ内のペイロードを、温湿度の数値に変換できる。

function Decoder(bytes, port) {
  // Decode an uplink message from a buffer
  // (array) of bytes to an object of fields.
  var decoded = {
   "Humidity": bytes[0],
   "Temperature": bytes[1]
  };

  return decoded;
}

④最後に、センサデバイスから取得した温湿度データをTTN上で表示できるか、確認しよう。これまでの設定が正しく完了していれば、アプリケーション内の 「データ」 には下図のように表示されているはずだ。

データのひとつをクリックして詳細を表示し、ペイロードの設定が反映されているかも確認しよう。

以上で、センサーノードで取得した温湿度のデータを、TTN上にアップロードすることができた。
次回パート3では、いよいよAzure IoT HubとTTNを連携させ、温湿度データをリアルタイムで可視化できるようにする。

パート1はこちら

パート3はこちら

パート4はこちら

T.Ono さんはまだ自己紹介を入力されていません...

12 Dec 2019, 6:24