概要
ソラコム社の提供するGPSマルチユニットは購入後、簡単な作業と設定でGPSトラッキングが可能となります。
ただ、デバイス(1万円強)とSIM(1000円くらい)を購入し、月額料金(300円くらい)を払うとなった場合、少々ハードルが上がってしまいます。
でもiPhoneユーザーであればデバイスとSIM購入せず、条件次第ではランニングコストゼロでお手持ちのiPhoneでGPSトラッカーを作ることができそうなので、その方法をご紹介できればと思います。
準備
SORACOM Arcの利用設定
SORACOM Arcというサービスを利用するとSIMを購入することなく、お手持ちのデバイスでSORACOMプラットフォームへの接続と通信が可能となります。
SORACOM Arcを利用するには、WireGuardというアプリをインストールし、SORACOMコンソールでの設定が必要となりますが、難しいことは置いておいて、以下の手順で利用できます。
この作業でSORACOMプラットフォームへの接続環境が準備完了です。
※ちなみにSORACOM Arcは1アカウント1回線は無料で、2回線めから有料となります。
Node-PAD
Node-REDという神開発ツールがあり、(無償ではないですが)Node-PADいうアプリをインストールすることでiPhoneで自作アプリを作れるようになります。
ただ、iPhoneの小さい画面でノードを置き、繋ぎ、文字を打ち込むのは結構な修行なので、挑まれる方はその点あらかじめご覚悟ください。
実装
ここから実装方法です。
結論から言うと、以下のようなフローで実装できます。
①locationノード(ios deviceグループ)…位置情報の取得
②changeノード(機能グループ)…①で取得した位置情報を変数に格納
③injectノード(共通グループ)…定周期でイベントを発生させる
④functionノード(機能グループ)…送信データの作成
⑤http requestノード(ネットワークグループ)…データの送信
その他はデバッグ用で必須ではないため、説明は省きます。
設定については以下となります。
①locationノード(ios deviceグループ)…位置情報の取得
こちらは置くだけです。
位置情報を定周期(?)で取得します。
②changeノード(機能グループ)…①で取得した位置情報を変数に格納
①で取得した緯度と経度がmsg.payload.locationのlatとlonに入っているので、それぞれflow変数lat、lonにセットします。
③injectノード(共通グループ)…定周期でイベントを発生させる
ここがポイントです。
初回起動(図の3秒)は適当に設定して、繰り返しの時間間隔で送信の間隔(インターバル)を設置します。
図では15秒としていますが、位置情報として取得したい時間間隔を設定してください。
ソラコムのGPSマルチユニットでは最短1分間隔でしか設定できませんでしたが、最短1秒での設定が可能です。
※短くしすぎると通信量が増え、場合によっては通信料が追加で発生しますのでご注意ください。
④functionノード(機能グループ)…送信データの作成
ノーコードを目指しましたが、ここは少しプログラムっぽく・・
②でセットしたflow変数を送信用のJSONデータにまとめます。
var data = {};
data["lat"]=flow.get("lat");
data["lon"]=flow.get("lon");
msg.payload = data;
return msg;
⑤http requestノード(ネットワークグループ)…データの送信
あとはPOSTで「http://uni.soracom.io」に送信するだけ
作業としては以上です。
デプロイしてください。
WireGuardに接続した状態で、このフローを動かし、前述のレシピを参考にSORACOM Harvest Dataの設定をすると、以下のように地図上にマッピングが可能となります。
SORACOM Harvest DataにアップロードされたデータはSORACOM Lagoonでいい感じに可視化できます(設定は割愛させていただきます)。
※SORACOM Lagoonも無償のFreeプランがあります。
データ収集時の注意
私の知る限り、Node-PADが常にアクティブでなければフローが動かないようです(違っていればツッコミお願いします)。
なので、設定>画面表示と明るさ>自動ロックで「なし」に設定する必要があります。
さらに他のアプリも使わず、画面に触らないように気を付けなければいけませんので、ご注意ください。
Androidでの実装
今回はiPhoneでの実装を紹介していますが、AndroidでもRedMobileというツールを使うことで実装は可能です。
以下を参考にしていただければと思います。