United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

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

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

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

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

 

1.準備

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

  • Raspberry Pi 3 Model B, 品番:  (182-8034)
  • ACアダプタ 5.1V dc, 品番:  (182-7131)
  • マイクロSDカード 32GB, 品番:  (136-0148)
  • LoRa GPS HAT-JP, 品番:  (187-5121)
  • LoRa and IoT Development board, 品番:  (188-3151)
  • DHT11 (温度湿度センサー), 品番:  (174-3237)
  • その他HDMIケーブルなどを適宜

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

azure_lorahat_9174425a5ca8a06960e14005d42e94b27ba8f2bf.jpg
ラズパイに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

2019-10-24-165429_ver2_02ddb7f5179d4072904270e58f6347f32b3b5b80.png

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

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

sudo ./dual_chan_pkt_fwd

2019-10-24-165305_ver2_5bc8f94b19d3dc5159df7f52e9a32d8e8f21677d.png

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

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

 

3.The Things Network (TTN) の設定

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

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

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

azure_0_009_31aab67e6485de109f77402c9d881cb09849b17a.png

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

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

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

azure_0_004_ver2_3e6f949d07e9d84f5eff7ec155fe541a913fa5e2.png

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

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

azure_0_005_ver2_c82cdf1422c0fdc1eb059b1c9688b0de2fb21682.png

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

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

azure_0_006_ver2_b18b0ef45f350b0bd2d8e56c85df5a274ae7b781.png

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

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

azure_0_007_ver21_7e7b6e75120ca7683fbb3727aecfad1da64786e4.png

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

azure_0_008_ver2_515c890a5f4ed3a4823b96a0585d632c8a9ec1b8.png

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

 

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

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

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

azure_0_012_581a76bd8365c420689f1c5f0fb2d125bf5f0726.jpg
センサデバイス

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

azure_0_011_ver3_2f84eb92c40d496755e230a4a43d0afe109aa750.png

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

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

azure_0_010_ver2_21c669519fa3a88d867f1534035ffaaca84fb6e3.png

これで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;
}

azure_0_003_ver21_70aeef3f66088686971a49ac7d845ccefdb49999.png

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

azure_0_001_ver2_0c9c657b42f1ed29415c04ba38e7b289ed7706b1.png

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

azure_0_002_ver2_54612ade4b163659c3222729c9ecbe9457d2e496.png

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

パート1はこちら

パート3はこちら

パート4はこちら

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