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

LoRa IoTスターターキットをThe Things Networkで試す パート3:TTNでデータを見てみよう

昨年末、Dragino製LoRa IoTスターターキットの販売がアールエスコンポーネンツで開始された。今回、このスターターキットを、LoRaWANのデファクトスタンダードであるThe Things Networkを利用して試していく。パート3では実際にLoRaデバイスをプログラミングし、温度と湿度のデータをTTN上で確認してみよう。

パート1では「LoRa IoTスターターキット」の紹介を行った。スターターキットや、キットで何ができるかといった紹介を行っているので、まだ読んでいない人はこちらも合わせて読んでほしい。

パート1はこちら

またパート2ではスターターキットのLoRaゲートウェイの使い方からTTNへの登録方法を紹介した。これでLoRaデバイスの情報をクラウドへアップロードする準備は整っているはずだ。

パート2はこちら

今回のパート3では、センサを接続したLoRaデバイスで実際に温度と湿度の情報を取得して、TTN上で確認してみよう。では全体のイメージから確認していこう。

Fig22_526858a9a03a1fb8929e64e47f5cc7b727f5c1c9.png

今回は、パート2で設置したゲートウェイを経由して実際に湿度と温度のセンサデータがTTN上に届ているか確認する。株式会社OpenwaveさんがDraginoのデバイスとゲートウェイをTTNへつなぐマニュアルを公開している。

https://www.thethingsnetwork.org/community/yokohama/post/ttn

本記事はこのマニュアルを補足していく形になっているので、もし何かわからないことなどがあれば一度マニュアルにも目を通していただきたい。

では早速やっていこう。必要となる全体の手順は次の7ステップだ。パート2で4.まで紹介したので、今回は5.からになる。デバイスのプログラミングから、実際のデータの確認まで行おう。

  1. TTNアカウントの作成と言語の設定
  2. LoRaゲートウェイをインターネットに接続
  3. TTNへゲートウェイを登録
  4. LoRaゲートウェイをLoRaWANサーバーと接続
  5. TTNへデバイスを登録
  6. デバイスのプログラミング
  7. データの確認

※TTNにおいて言語設定を日本語にするためにはパート2の記事を参考にしてほしい。

5. TTNへデバイスを登録

実際のLoRaデバイスを利用するためには、LoRaWANサーバー上の仮想のデバイスと実際のデバイスを結びつけなければいけない。これは一般的にアクティベーションと呼ばれている。まずはTTN上にデバイスを登録する手順について紹介する。それではTTNへログインし、Consoleを開こう。

https://www.thethingsnetwork.org/

前回は「GATEWAYS(ゲートウェイ)」からゲートウェイの登録を行った。今回、LoRaデバイスの登録の前に、「APPLICATIONS(アプリケーション)」からアプリケーションを作成しよう。

Fig1.0-TTNGatewayRegist__62c6b170e2d88338fb75e3003e17542bd2d26956.png

「+add application(アプリケーションを追加)」から、アプリケーションを追加する。以下のような画面になるはずだ。

Fig2.0-AddApplication__d98894275e6a5c5e5a5aeb24a8dd46d9ec3355d8.png

以下に従って設定していこう。

  • Application ID(アプリケーションID)
    • 半角英数字とアンダーバー(_)でアプリケーションのIDを設定する。
    • 例:lora_ds_app_01
  • Description(記述)
    • 適切なアプリケーションの説明を設定する。ご自身にとってわかりやすい記述をしていただければよい。
  • Application EUI(アプリケーションEUI)
    • 自動で発行されるため設定不要
  • Handler registration(ハンドラー登録)
    • 「ttn-handler-asia-se」を選択

設定後「Add application(アプリケーション追加)」をクリック。

次にデバイスを登録する。アプリケーションのDevicesを開き、そこから「+ register device(デバイス登録)」でデバイスを登録する。

Fig3.0-AddDevice__773c8aa33057fff1a1bffcceaa4321b3f3e69eb7.png

以下のデバイス登録画面にて、必要な情報を入力していく。

Fig4.0-RegisterDevice__bf75823c681b9633286cee01cd7e1c151a82a04b.png

  • Device ID(デバイスID)
    • 半角英数字とアンダーバー(_)でデバイスのIDを設定する
    • 例:ds_lora_dev_01
  • Device EUI(デバイスEUI)
    • 入力欄左にある矢印アイコンをクリックすると自動で生成される。
  • App Key
    • 設定不要(自動生成)
  • App EUI
    • 設定不要(自動生成)

作成したアプリケーションにデバイスを登録すると、以下のように登録されたことが確認できるはずだ。

Fig5.0-AppAndDev__de9741afcef252c27b5e29bf797dcd2eed1e18e8.png

次に、DEVICES(デバイス)から作成したデバイスを選択し、Settings(設定)からアクティベーション方法を選択する。OTAAとABPが選択できるが、今回はシンプルなABPを選ぶ

Fig6.1-ABPDeviceSetting__53a6a34df2861428b5bae3f000bb01e25d1535bb.png

これでTTNへのデバイスの登録は完了だ。次にデバイスを実際にプログラミングしていく。

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

まず初めにLoRaデバイス(LoRa Mini)と温度湿度センサ(DTH11)をつなげる。以下の画像を参考にしてほしい。

Fig7.0-Device__64908f172dfe07bc99d6ba14025e02164db0649d.jpg

なお、DTH11とLoRa Miniのピンの対応は以下となっている。

  • DTH11: VCC → LoRa Mini: 3V3
  • DHT11: DATA → LoRa Mini: A0 (今回のサンプルプログラム)
  • DHT11: GND → LoRa Mini: GND

デバイスにプログラムを書き込むには、先の写真のようにMicro USBケーブルをデバイスに挿入し、PCと接続する必要がある。PCではArduino IDEから実際のプログラムを書き込む。

Arduino IDEは以下からダウンロードし、インストールしよう。詳しいIDEの使い方については、今回は省略するので、必要に応じてインターネット上にある豊富な資料に目を通してほしい。

Arduino IDEのインストーラーをダウンロード

Arduino IDEをインストール後、PC上のArduinoのライブラリへ、LoRaWAN通信を行うためのLMiCライブラリを追加する。

Openwave社が公開する以下のGithubリポジトリを、「Clone or download」からZIP形式でダウンロードしよう。

https://github.com/openwave-co-jp/arduino-lmic-master-for-LG01-JP

Fig7.0-Github__951cecaad2ad4e007ae22ac7ffea9f377349180d.png

ダウンロード後、展開したフォルダの中身をそのままArduino IDE上のライブラリへとコピーする。Arduino IDEのライブラリが存在するディレクトリは環境によって異なるので、ご自身の環境に合ったディレクトリの場所へ配置してほしい。以下の例はWindowsの環境である。(Windowsの場合、ドキュメント>Arduino>librariesにあるはずだ)

Fig8.0-ArduinoLibrary__0675cd7e5baa4adc49bf23a7ea010b2df1834335.png

それではPCとLoRaデバイス(LoRa Mini)を接続しよう。うまく接続すると、WindowsではCOMポートX(Xは任意の数字)として認識されるはずだ。もしうまく認識されない場合は、以下のOpenwave社のFAQの最後の項目の手順を参考にしてほしい(筆者の環境ではこれが必要だった)。

 LoRa関連製品FAQ

デバイスへ書き込むサンプルプログラムをOpenwave社が公開している。以下からダウンロード可能だ。

ABPを利用したLoRaデバイスのサンプルプログラム

ダウンロードしたZIPファイルを任意の場所にて解凍を行い、フォルダの中にある「TTN_ABP_sample.ino」をArduin IDEで開く。また、以下のイメージのように、IDE上のタブから、ツール>シリアルポート>COMXを選択する。このCOMは接続時に通常は出現するが、出現しない場合は先のFAQを参考にしよう。

Fig9.1-ArduinoIDE__b8ac7b9a4729aff98cac7c731ad5e90c9f3779bb.png

ここで一度TTNのAPPLICATION(アプリケーション)>Devices(デバイス)へ戻り、先ほど追加したデバイスのOverview(デバイスを一覧)を開く。ここに記載されている情報と、実際にArduino IDEでプログラミングするデバイスを紐づける。設定に必要なパラメータはデバイスアドレス、ネットワークセッションキー、アプリケーション(App)セッションキーの3種類だ。

設定は以下のイメージを参考にしてほしい。

Fig9.2-TTNandIDE__9352693b9db792b3047b6571e8c126ec9d5e44c5.png

デバイスアドレスは、記載欄の右にあるコピーボタンでコピーし、2つのセッションキーは一度バイト区切り表示にしてからコピーしてArduino IDEのプログラムへと貼り付けよう。

きちんと設定を紐づけたら、デバイスへ書き込みを行う。左上にある「➡」のボタンで対象のCOMXのデバイスへ書き込みを開始する。必要に応じて画面下のデバッグ表示を参考にしてほしい。

書き込むと自動的に動作を開始する。IDEのタブから、ツール>シリアルモニタを開こう。以下のイメージのように「EV_TXCOMPLETE」が表示されていたら正しく動作していると分かる。

Fig9.3-SerialConsole__3bc47a8c4e354ba4602b3e8f1d1e685b63fb2c17.png

これでデバイスに接続したセンサの値をTTNへと送信することができるようになった。次は実際にデータが届いているかをTTNで確認してみよう。

7.    データの確認

最後に、本当にLoRaデバイスから温度と湿度の値が送られてきているか確認してみよう。

TTNでは流れてきたデータを確認することができる機能が提供されている。まずはステップ6を終えた時点で、デバイスを電源に接続した状態でTTNのコンソールを開き、メッセージが届いているか確認したいゲートウェイを開こう。すると、上のメニューに「Traffic(トラフィック)」という項目があるので、こちらを開いてみよう。

Fig9.4-GWTraffic__c9cf7be698d2486b8e3bd2d8b5506201c0c97a79.png

このように、何かしらのデータが届いていることが分かる。なお、ここの「頻度」は周波数の誤りだ。しかし、ここでデータが届いていても、正しくデバイスの情報を設定していなければデータを確認することはできない。

次に「APPLICATIONS(アプリケーション)」から作成したアプリケーションを開き、上にある「Data(データ)」を開こう。以下のイメージのようにデータが届いており、「Payload」の値が見えていたら成功だ。2バイトのデータ(以下の例では24 1A)が届いているはずだ。

Fig9.5-DeviceData__d9a3dbac28374bc6535321a1451e87cc6d3a55c6.png

この2バイトのデータは、デバイスのプログラムの以下の部分と対応している。

void do_send(osjob_t* j){

    uint32_t h = dht.readHumidity();
    uint32_t t = dht.readTemperature();

    mydata[0] = h;
    mydata[1] = t;

これから、1バイト目は湿度、2バイト目は温度ということが分かる。これをわかりやすくしてくれる機能がTTNにある。

TTNのアプリケーションに戻り、上のメニューにある「Payload Formats」を開いてみよう。ここで受信するメッセージのPayload(データが入っている部分)の解釈方法を記述できる。

ここではdecoderに以下のように記述してみる。

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;
}

実際にどのように解釈できるか、コードを書いた部分の下に実際のペイロードを入力して動作をテストしてみよう。

Fig9.6-PayloadFormats__62328dce218f1dfab4ca647140e6c8347c7bed57.png

これで解釈できていることが分かる。画面下の「ペイロード機能を保存」をクリックして設定を保存しよう。

これ以降受信するデータは、このフォーマットに従って解釈される。もう一度デバイスのデータを開き、見てみよう。

Fig9.7-CheckData__8e51f59a9962748cb4589c6107883bd5f89b4b19.png

これで受信するデータを確認することができるようになった。

最後に

今回は3つのパートに分けてLoRa IoTキットについて紹介を行った。少々手順が長くなったが、デバイスのプログラミング以外は一度設定を済ませてしまうと今後は気にしなくてもよいので、そこまで大変な作業ではなかったはずだ。

一度TTNでデータの受信を実現すると、インテグレーションという機能を利用してさらにほかのサービスと連携することができるようになる。インテグレーションはアプリケーション単位で行うことができ、標準で用意されている連携先としては以下のサービスが選ぶことができる。

Fig9.8-OtherServices__5fc95459602ffc6fe6fc7e63551d258b87e654b8.png

DesignSpark IoTクラウドはAllThingsTalkと互換性がある。連携先としてAllThingsTalkを選択すると以下のように簡単に可視化、センサの関係性などを確認できる。これについてはまた後日別の記事として書くことも想定している。

AllthingsTalk_Graph1_951157481f964f12ab334cfc24a3cb6bb9cdd16e.png

また、HTTP Integrationを利用すると、HTTPのAPIサービスと連携できるため、基本的にどんなサービスとも連携することが可能だ。その例として、Microsoft AzureのFunction Appをweb hookで呼び、アラートメールをコールすることもできた。LoRaデバイスから送信されたメッセージをTTNで受け取り、受け取ったデータはAzureへと常に渡され、そこで28度以上を検知するとメールサービスを利用して指定したアドレスへとアラートを送信する仕組みだ。

Fig43_748619656265990e9d3c1bd0c1d7257fda223a12.png

これでスターターキットの紹介は一通り終わりだ。LoRaWANを利用した簡単なアプリケーションの作り方を大体理解していただけただろうか。

またこのパート3では、Activationの方式にABP(Activation By Personalization)を利用したが、実際に大規模なLoRaWANを利用したIoTサービスを提供する際には、自動的にデバイスのアドレスを割り当てることができるOTAA(Over-The-Air Activation)の方がより便利であり、セキュアでもある。OTAAの利用についてはまた別の記事としての作成を予定しているのでしばらくお待ちいただきたい。

パート1はこちら

パート2はこちら

AllThingsTalkでデータを可視化する方法はこちら

Hi, Everyone. I was master of University of Electro-communication, and bachelor of University of Hiroshima city. Now, I often work at Deloitte Tohmatsu Cyber. Also, I always check and translate some articles here. My major is about LoRa/LoRaWAN, IoT, CAN(Controller Area Network), these Security, etc. Please contact me, don't hesitate. My region: information science, radio, network, iot, iiot, security, lora, lorawan, 802.11ah, etc.
DesignSpark Electrical Logolinkedin