ここでは、LoraWAN 開発クライアントボード(LoRa Mini Dev)の AWS IoT for lorawan への登録方法について説明します。これを始める前に、クライアントボードのデータを受け取る LoraWAN ゲートウェイが AWS IoT core に登録されていることを前提とします。もしゲートウェイを登録していなければ、以下の記事を参考にゲートウェイを AWS IoT core に登録してください。
使用した機材等
- DRAGINO 通信 / ワイヤレス開発ツール, LoRa, LoRa Mini Dev
- LoRa Mini Dev用クライアントプログラム
AWS IoT core for lorawan へのデバイス情報の入力
AWS IoT core 上に LoRa Mini Dev を「モノ」として登録します。登録は、「送信先の追加」「デバイスプロファイルの追加」「サービスプロファイルの追加」「ワイヤレスデバイスの追加」から構成されています。「デバイスプロファイルの追加」と「サービスプロファイルの追加」は、同じデバイスを使っている間は1度だけ追加するだけです。追加で複数台の LoRa Mini Dev を「モノ」として登録する場合は、最初に追加した「デバイスプロファイル」と「サービスプロファイル」を利用します。
送信先の追加
まず、LoRa Mini Devデバイスがデータを送信する送信先を作成します。AWS IoT core のコンソール左側のリストから[LPWANデバイス]->[送信先]を選択し、[送信先を追加]します。送信先の追加では、送信先名を入力し、「AWS IoT Core メッセージブローカーにパブリッシュ」を選択し、アクセス許可は「新しいサービスロールを作成」が選択されていることを確認して[選択先を追加]をクリックします。ここでは送信先名として「AWS_IoT_Core」と入力しました。
これで送信先の作成は完了です。
デバイスプロファイルの追加
デバイスプロファイルを追加するには、AWS IoT core のコンソール左側のリストから [LPWANデバイス]->[プロファイル]を選択し、デバイスプロファイルの追加をクリックします。
[デバイスプロファイルの追加]をクリックすると、以下の画面に遷移するので必要情報を入力していきます。
まず [デフォルトのプロファイルを選択してカスタマイズ] のリストから [AS923-1-A]を選択します。次に [デバイスのプロファイル名]に [AS923-1-A-OTAA] という名前が自動的に入力されるので、[ AS923-1-A-ABP] に変更します。 次に [Join をサポート] が ON (青色表示)になっているので、それを OFF にします。最後に、画面最下部の [デバイスプロファイルを追加] をクリックしデバイスプロファイルの追加を完了します。
サービスプロファイルの追加
サービスプロファイルを追加するには、 AWS IoT core のコンソール左側のリストから [LPWANデバイス]->[プロファイル]を選択し、[サービスプロファイルの追加]をクリックします。 そうすると以下の画面に遷移しますので、適当なサービスプロファイル名を入力して [サービスプロファイルの追加]をクリックし、サービスプロファイルの追加を完了します。
サービスプロファイル名は「lorawan_test」としました。
ワイヤレスデバイスの追加
最後にワイヤレスデバイスを追加します。 AWS IoT core のコンソール左側のリストから [LPWANデバイス]->[デバイス]を選択し、 [ワイヤレスデバイスの追加]をクリックします。LoRaWAN 仕様とワイヤレスデバイス設定の画面に遷移したら、[ワイヤレスデバイスの仕様]のリストから[ABP v1.0.x]を選択し、以下の画面を表示します。
ここで必須となる情報は “DevEUI”, “DevAddr”, “NwkSKey”, “AppSKey” の4つです。通常、LoRaWAN準拠の既製品(プログラミング無しで電源を入れればすぐに通信を開始するデバイス)を買うと、これらの情報が当該製品の製作元から提供されます。LoRa Mini Dev については、それらをユーザが自由に決めることが可能です(本来は LoRaWANアライアンスが決めた値の設定ルールがあるようですが…)。ここでは、上記4つのパラメータはランダム値を入力していきます。各パラメータの入力フォーム下に記載のコメントに従ってランダム値を生成してそれをパラメータとして利用します。例えば、DevEUIであれば、コメントに「ワイヤレスデバイスにある 16 桁の16進数のDevEUI値と記載されているので、16桁の16進数を生成して入力フォームに入力します。右列の「〇〇を確認」の下にある入力フォームには、生成したパラメータと同じものを入力します。ワイヤレスデバイス名も入力します。
ワイヤレスデバイス名の入力が終わったら、プロファイルの設定をします。上で作成したワイヤレスデバイスプロファイルとサービスプロファイルをリストから選択し、[次へ] を押して次の画面に移動します。
最後に[送信先名]として AWS を選択して [デバイスを追加]を押します。この後、位置情報の送信等を聞かれますが特に入力事項はありません。これでワイヤレスデバイスの追加を完了します。
LoRa Mini Dev へのプログラムの書き込み
LoRa Mini Dev へセンサを接続する
今回、LoRa Mini Dev(以下、 LoRa Mini)に接続するセンサとして、DHT11(温湿度センサ)を利用します。DHT11と LoRa Mini 間はシリアルで通信し、今回は、用意されているプログラムで指定されている A0 ピンを使用します。LoRa Miniの3V3ポートにDHT-11のVCC、GNDポートにGND、A0ポートにDATA(図では OUT)をそれぞれ接続します。
この LoRa Mini Dev を PCに USB で接続(図中、LoRa Mini Dev ボードの右側面中央部分についている USB micro の端子を使って PC に接続)すればハードウェアの設定は完了です。DHT11はAWS IoT Core との接続テスト用に使用していますが、後ほど「仮想センサ」に入れ替えて運用する予定です。
ArduinoIDE への DHT11 library のインストール
LoRa Mini Dev のへプログラムを書き込む前にコンパイルに必要なライブラリを ArduinoIDE へインストールします。ArduinoIDEの左にあるライブラリのアイコンをクリックし、ライブラリマネージャを表示した後、検索窓に「DHT11」と入力し、以下のライブラリを表示し、インストールします。
(写真はインストール後のスクリーンショット)
ArduinoIDEへの LoRaWAN LMIC library のインストール
次に LoRaWAN 通信に必要なライブラリをインストールします。まず以下のURLからライブラリの ZIP ファイルをダウンロードします。このライブラリは ArduinoIDE の Library Managerにある LoRaWAN LMIC ライブラリを日本リージョン向けにカスタマイズしたものです。
https://github.com/openwave-co-jp/arduino-lmic-master-for-LG01-JP
ArduinoIDEの上部タブから [Sketch]->[Include Library]->[Add .ZIP Library…] を選択して、先ほどダウンロードした zip ファイルをインストールします。
LoRa Mini Dev へ書き込むプログラムに認証情報を書き込む
最初に、LoRa Mini Dev用クライアントプログラムを上記サイトからダウンロードします。上記サイトの TTN_ABP_sample フォルダから TTN_ABP_sample.ino ファイルをダウンロードして、Arduino IDE にて当該ファイルを開きます。ちなみに、OTAA (Over-the-Air Activation)と ABP (Activation by Personalization) は認証方法が異なります。簡単に説明すると、ABPが認証に関する情報をすべて入力した状態でクライアントプログラムを実行しないといけないのに対して、OTAAは一部の認証情報取得シーケンスをプログラムが自動的に実行してくれる方式です。詳しくは以下のウェブページをご参照ください。今回は実行が簡単な ABP を利用します。
Arduino IDEでTTN_ABP_sample.inoを開いて、39行目以下、DEVADDR, NWKSKEY, APPSKEY の各変数に対して、[ワイヤレスデバイスの追加]で入力した “DevAddr”, “NwkSKey”, “AppSKey” を入力します(今回 “DevEUI”は利用しません)。16進数の入力は 0x から始まるので、図のような形式で入力していきます。
プログラムの書き込みと動作確認
プログラムの用意ができたら、LoRa Mini Dev にプログラムを書きこみます。書き込みボタンを押す前に[ツール]からターゲットボードを選択します。ここでは、”Arduino Uno” を選択しておいてください。また、シリアルポートには、LoRa Mini Dev がつながっている USB のポート(COM3など)がリストされるので、それを選択します。最後に書き込みボタン(図の上部にある右矢印ボタン)を押すと、プログラムが LoRa Mini Dev に書き込まれて、直後からデータ送信を開始します。
プログラムが無事書き込まれてセンサデータの送信が開始されると、シリアルモニタに以下のような表示が現れます。
また、LoRaWAN ゲートウェイを経由して、AWSにデータが送信されているかどうかを確かめるには、AWS IoT Core のコンソール画面に戻り、コンソール画面左列の[デバイス]をクリックし、先ほど登録したデバイスのデバイスIDをクリックして以下の画面に移動します。
デバイスから送信されたデータが正しくAWSに送られている場合は、「前回のアップリンク受信日時」の部分が更新され、デバイストラフィックの欄に図のような情報が表示されます。この情報が確認できれば LoRa Mini Dev の AWS IoT Coreへの登録は完了です。
送られてきているデータがどのようなものかを確認するには、MQTTテストクライアントから「topic/lorawan/test」をサブスクライブすると以下のようなログを確認することができます。
本来、PayloadData の部分に温度・湿度計から取得したデータが入っていますが、AWS の MQTTテストクライアントでは直接確認できないため、Lambda 関数等を通してデータをデコードする必要があります。
注意事項
一度送信を開始した LoRa Mini Dev の電源を切ったりしてつなぎなおすと、AWS に対してデータを送信できなくなります。これは、LoRa Mini Dev と AWS のセッションが切断されることによって、 “NwkSKey”, “AppSKey” が無効になるためです。 “NwkSKey”は「ネットワークセッションキー」の略です。OTAA形式を使うと、これらのセッションキーは自動取得されるので、電源を切って、再び電源を入れてもAWSへのデータ送信を続けることが可能です。ABP形式を使うと、ワイヤレスデバイスの登録からやり直しになる点に注意してください。今後、OTAAでの接続方法についても記載する予定です。
コメント