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.準備
まず、本チュートリアルのための環境設定などの準備をおこなう。
以下は、筆者が今回使用したものの一覧だ。
- 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に搭載しておく。
ラズパイに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デバイスの設定方法を紹介する。まずはじめに、次のことを行なっておく。
- Arduino IDEのダウンロード/起動
- Openwave社が公開しているサンプルプログラムをダウンロードする。ダウンロードしたZIPファイルは任意の場所に解凍しておく。
- GitHub - openwave-co-jp/Dragino_LoRaMini_TTN_lorawan
https://github.com/openwave-co-jp/Dragino_LoRaMini_TTN_lorawan
- GitHub - openwave-co-jp/Dragino_LoRaMini_TTN_lorawan
- 以下のライブラリをダウンロードし、Arduino IDEのライブラリが存在するフォルダに追加する
- Adafruit Unified Sensor https://github.com/adafruit/Adafruit_Sensor
- DHT sensor https://github.com/adafruit/DHT-sensor-library
- Low-Power https://github.com/rocketscream/Low-Power
①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はこちら
- 参考(スライド作成者から許可を得ています)
AzureとTTN連携ハンズオン資料 https://www.slideshare.net/AoiSakata/azurettn
コメント