先週リニューアルした SORACOM LoRa Space(SLS) はもうご覧いただいていますでしょうか。
SLS の接続ポイントの情報は、LoRa 共有ゲートウェイ設置場所周囲のどの位置から LoRaWAN による通信に成功したかを表しており、ユーザーのみなさまに収集いただいたデータから作成しています。
さて、接続ポイントの登録には GPS モジュールが必要となりますが、今回は、GPS モジュールと LCD キーパッドシールドを組み合わせて、位置情報の取得状況や通信状況を液晶ディスプレーに表示して、モバイルバッテリーで持ち運び時に便利な「LoRa お散歩セット」を作ってみましょう。
今回利用したモジュールは以下の2つです。GPS モジュールは今回は GettingStarted で紹介しているものとは別の製品を使っています。
- GPS 受信キット AE-GYSFDMAXB
- サインスマート LCD キーパッドシールド SKU-20-011-901 (2021年現在、当該商品は取り扱いを終了しています)
GPS 受信キットは「みちびき」対応で、全天が見渡せる環境において、ホットスタートから1秒、コールドスタートから 42 秒で測位可能です。電源が入ると赤色 LED が点灯、位置情報を取得できるようになると同じ LED が点滅します。
上記店舗の購入画面より、配線を含む日本語説明書のほか、ライブラリーやサンプルプログラムを閲覧可能です。購入時価格は 2,200 円でした。
LCD キーパッドシールドには、バックライト付きの 16 行 × 2 列の LCD と、5 つのタクトスイッチがついています。LoRa シールド同様、ハンダ不要で Arduino にはめ込める作りになっており、LoRa シールドと合わせると三階建てになります。
リンク先の日本語説明書にて、組み立て後に使用できるピンの情報が記載されています。購入時価格は 1,060 円でした。
これらと LoRa Arduino 開発シールドを組み上げてモバイルバッテリーを繋ぐと、以下のようになります。
それでは、LCD に GPS 情報を表示する Arduino スケッチを書いていくわけですが、せっかくタクトスイッチつきなので、スイッチを押すごとに、表示する情報を切り替えられるようにしましょう。
表示モード一覧
SELECT | 直近で取得した位置情報データを表示 |
LEFT | 送信した位置情報を表示 |
UP / DOWN | 過去送信した位置情報を表示 |
RIGHT | GPS モジュールから取得した NMEA データを表示 |
RST | スケッチを再起動(シールドデフォルトの動作) |
今回のスケッチでは、Arduino library for LoRaWAN Device 同梱のサンプルスケッチで使用した SoftwareSerial、TinyGPS に加え、LCD 出力のため LiquidCrystal ライブラリーを使用しています。また、Standard C++ for Arduino も使っていますので、リンク先より zip ファイルをダウンロードし、「ライブラリーとしてインストール」してください。なお、Arduino IDE から Standard C++ ライブラリーをインクルードすると幾つかのヘッダーが追加されますが、このスケッチで使用しているのはソースに記載の2つのみです。
このソースでは GPS モジュールの TX から延ばしたワイヤ(Arduino の RX)は D16 ピン(A2)、GPS モジュールの RX から延ばしたワイヤ(Arduino の TX)は D17 ピン(A3)に接続しています。ピンを変更する場合は #GPS_TX_PIN および #GPS_RX_PIN を変更してください(D11, D12 は LoRa シールドが使用していることにご注意ください)。
ソースコード内の #ifdef
により幾つかの機能や設定を切り替える仕組みを用意しています。
例えば、LoRaWAN の圏外でスケッチの動きを確認する場合は、#define USE_LORAWAN をコメントアウトしてください。
今回使用した LCD キーパッドシールドとは異なる LCD、キーを使用する場合は、define USE_LCD と #define USE_KEY およびその周辺を更新するか、コメントアウトしてください。
LCD とは別に、シリアルにも幾つかのデバッグ出力を行なっていますが、#define PRINT_NMEA および #define PRINT_GOT_GPS のコメントアウトを切り替えることで、出力内容を変更可能です。
前者は、GPS モジュールから取得した NMEA0183 形式のデータを直接出力、後者はそれを解釈した位置情報および時刻情報を出力しています。
SLS_GPS_LCD_LoRa.ino
setup()
内では、各デバイスの初期化を行います。LoRa ゲートウェイへの接続もここで行いますが、接続の成否は LCD にも表示します。
SELECT を押すと、直近で取得した位置情報データを表示します。緯度経度情報は整数で、日時は分と秒のみを表示していますので、例えば下記の場合は、北緯35.6度、東経139.6度、時刻は 4 分 8 秒ということになります。
#define PRINT_GOT_GPS
を有効にしていると、シリアルモニタでも同様の情報を確認できます。
LEFT を押すと、最後にゲートウェイに送信した位置情報を表示します。SELECT を押した場合に表示される情報との違いについてですが、loop()
関数内を見ての通り、位置情報データは、前回送信後一定時間経過していない場合や、移動距離が少ない場合は送信されません。SELECT で表示されるデータは最新の位置情報データですが、LEFT は、実際に送信対象となったデータのみの履歴を表示します。更に、UP および DOWN を押すと、過去送信した位置情報を表示していきます(デフォルトでは過去10件まで)。
ただし、送信対象のデータであっても LoRa ゲートウェイまでの通信に失敗している場合もありますので、SLS での履歴情報と比較することで、送信に失敗したケースの位置情報を確認することができます。
RIGHT を押すと、GPS モジュールから取得した NMEA データを表示します。#define PRINT_NMEA
を有効にしている時にシリアルモニタに表示される情報と同様ですが、
LCD では、表示できない文字を含む多量のデータが出力されますのでご注意ください。
ここに何も表示されない場合は、位置情報の測位に失敗している可能性や、コールドスタートで測位までに時間がかかっているなどの可能性、モジュールからの配線が正常ではない可能性があります。
これで、モバイルバッテリーがもつ限り、SLS への接続ポイントの登録が簡単にできるようになりました。暖かい日の多い季節になってまいりましたので、ぜひ「LoRa お散歩セット」を持って接続ポイントの登録をお試しください。また、LoRa デバイスと組み合わせて使えるスケッチなどを作られた方は、ブログ等でご紹介ください!
ソラコム 岩崎