WioLTE で Harvest の位置情報データを “お手軽に” 試してみた

こんにちは、ソラコムの松井です。

昨日の SORACOM Technology Camp 2018 で発表された、Harvest の位置情報データ機能を試してみました。

- [SORACOM Harvest で位置情報データをサポートしました](https://blog.soracom.jp/blog/2018/04/26/harvest-map-support/)

GPS モジュールを使ったスケッチは後日公開される予定ですが、昨日試そうと思った時に GPS モジュールが手元になかったので、WioLTE の LTE モジュールが持つ基地局情報を使った簡易位置情報取得機能を使ってみました。

![お散歩キット](https://qiita-image-store.s3.amazonaws.com/0/30051/d5f0bced-47c8-db3d-c6de-b59a1790996b.jpeg)

# [WioLTE::GetLocation()](https://github.com/SeeedJP/WioLTEforArduino/wiki/Reference-ja#getlocation)
![](https://qiita-image-store.s3.amazonaws.com/0/30051/cd8352d3-2deb-0c62-26ca-25008a65fbb3.png)

簡単に使えそうです。

## サンプルコード
```c++:GetLocation.ino

#include <WioLTEforArduino.h>
#include <stdio.h>
WioLTE Wio;

void setup() {
  delay(200);

  SerialUSB.println("");
  SerialUSB.println("--- START ---------------------------------------------------");

  SerialUSB.println("### I/O Initialize.");
  Wio.Init();
  SerialUSB.println("### Power supply ON.");
  Wio.PowerSupplyLTE(true);
  delay(500);

  SerialUSB.println("### Turn on or reset.");
  if (!Wio.TurnOnOrReset()) {
    SerialUSB.println("### ERROR! ###");
    return;
  }

  SerialUSB.println("### Connecting to \"soracom.io\".");
  if (!Wio.Activate("soracom.io", "sora", "sora")) {
    SerialUSB.println("### ERROR! ###");
    return;
  }
  SerialUSB.println("### Setup completed.");
}

void loop() {
  double lat, lng;
  char data[256];
  Wio.GetLocation(&lng, &lat);
  sprintf(data, "https://www.google.co.jp/maps/@%f,%f,15z", lat, lng);
  SerialUSB.println(data);
  delay(60000);
}
```

これを実行すると、デバッグログに下記のように表示されます

```
--- START ---------------------------------------------------
### I/O Initialize.
### Power supply ON.
### Turn on or reset.
### Connecting to "soracom.io".
### Setup completed.
https://www.google.co.jp/maps/@35.621483,139.73056,15z
```

[このリンク](https://www.google.co.jp/maps/@35.621483,139.73056,15z)を開くとなんとなく合ってそうな感じですね。
![GoogleMap](https://qiita-image-store.s3.amazonaws.com/0/30051/798c7cd6-215e-d482-50f1-bce7fbfc1e35.png)

# Harvest に送ってみる
WioLTEforArduinoライブラリに含まれる [soracom-harvest サンプル](https://github.com/SeeedJP/WioLTEforArduino/blob/master/examples/soracom/soracom-harvest/soracom-harvest.ino)に手を加えて、座標を送ってみましょう。

変更箇所は下記のようになります。
※フルのコードは[こちら](https://gist.github.com/j3tm0t0/9f240735c9531596f28bcf6851ae09b6)にあります。

```
$ diff soracom-harvest/soracom-harvest.ino soracom-harvest-location/soracom-harvest-location.ino
44a45
>   double lat, lng;
45a47,50
>
>   Wio.GetLocation(&lng, &lat);
>   sprintf(data, "https://www.google.co.jp/maps/@%f,%f,15z", lat, lng);
>   SerialUSB.println(data);
63c68
<   sprintf(data,"{\"temp\":%.1f,\"humi\":%.1f}", temp, humi);
---
>   sprintf(data,"{\"temp\":%.1f,\"humi\":%.1f, \"lat\":%f, \"lng\":%f}", temp, humi, lat, lng);
65c70
<   sprintf(data, "{\"uptime\":%lu}", millis() / 1000);
---
>   sprintf(data, "{\"uptime\":%lu, \"lat\":%f, \"lng\":%f}", millis() / 1000, lat, lng);
```

さっそく Harvest で確認してみましょう。

![Harvest Location](https://qiita-image-store.s3.amazonaws.com/0/30051/b0416517-ba44-082a-13fe-bdf8245bcffc.png)

会場付近の位置情報がトラック出来ていました。

# まとめ
非常に簡単に位置情報を可視化できるようになり、ますます Harvest が便利になりましたので、ぜひゴールデンウィークにお試しください！
もし GPS モジュールがない場合には、LTE モジュールの機能を使って代用できますので、旅のお供に Wio LTE を持ち歩いてみても面白いかもしれません。

昨日のイベントでブログを書くまでが SORACOM Technology Camp です、とあったので、有言実行ということで早速記事を書いてみました。
皆さんもぜひ色々試してみて、情報発信してみましょう！