WioLTEでモバイルデータ通信(LTE)を使ったIoT開発入門

WiFiを使ったIoTは、ESP8266やESP32を使った例が一般的になってきましたが、モバイルデータ通信（以後LTE）を使ったIoTはまだそれほど多く例がありません。
一因として、`LTEが使えるIoT開発ボードは高価なので手を出しづらい`ということがあるのではないでしょうか。

## WioLTE
そんな人にオススメの開発ボードが`WioLTE`です。
https://soracom.jp/products/module/wio_lte/

<img src="https://qiita-image-store.s3.amazonaws.com/0/38442/e0fb8e5e-e1a4-8b5e-2d81-1f96a5ed934c.png" width="600">

>Wio LTE JP Version は、Seeed社が開発しているマイコンモジュールです。Grove コネクターと STM32F4 マイコン、LTE モジュールが搭載されています。Arduino IDE で素早くプロトタイピングすることができます。

紹介したいことは公式のこの一文がすべて説明してくれているので、つまりそういうことです。
Groveセンサーが使えたり、Arduinoライクにプログラミングできたりといろいろ嬉しいポイントはあるのですが、それ以上になんと言ってもこの価格。

>¥9,800 （税別・送料別）

<b>安くない？？？？？</b>

少し前のLTE対応開発ボードって2,3万円したような記憶があるんですよね。（もし僕が知らなかっただけで前から安いやつあったで！！ということならぜひ教えてください:bow:）
それに比べたら、WioLTEは税別で1万円を切る安心価格。大変嬉しい。

## WioLTEの開発環境セットアップ
`ArduinoIDE`を使って開発を行います。

### ボードの追加
ボードマネージャで`Seeed Wio LTE Cat.1`を追加します。
https://seeedjp.github.io/Wiki/Wio_LTE_for_Arduino/AddWioLTEBoard-ja.html

<img src="https://qiita-image-store.s3.amazonaws.com/0/38442/2121adc1-e9df-2d50-8a4a-d2a447da4d9e.png" width="600">
<img src="https://qiita-image-store.s3.amazonaws.com/0/38442/5f08cb81-e048-552c-c600-520e690f3c7b.png" width="600">

### ライブラリの追加
ライブラリマネージャで`Wio LTE for Arduino`を追加します。
https://seeedjp.github.io/Wiki/Wio_LTE_for_Arduino/AddWioLTELibrary-ja.html
<img src="https://qiita-image-store.s3.amazonaws.com/0/38442/714bd23d-4425-c714-3cf4-44eba5ff75bf.png" width="600">

## Groveセンサーを使ってみる
ライブラリの追加によってスケッチ例が追加されているので、`grove-temparature-and-humidity-sensor`を選択してみます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/38442/3b3b4d7a-d6b0-e237-4704-4dd6904fa9a5.png" width="600">

使うセンサーはこちら。
http://wiki.seeedstudio.com/Grove-TemperatureAndHumidity_Sensor/
<img src="https://qiita-image-store.s3.amazonaws.com/0/38442/c2d01223-c7d3-b75b-aa1a-4e678726a130.png" width="600">

```c++
#include <WioLTEforArduino.h>

#define SENSOR_PIN    (WIOLTE_D38)

void setup()
{
  TemperatureAndHumidityBegin(SENSOR_PIN);
}

void loop()
{
  float temp;
  float humi;

  if (!TemperatureAndHumidityRead(&temp, &humi)) {
    SerialUSB.println("ERROR!");
    goto err;
  }

  SerialUSB.print("Current humidity = ");
  SerialUSB.print(humi);
  SerialUSB.print("%  ");
  SerialUSB.print("temperature = ");
  SerialUSB.print(temp);
  SerialUSB.println("C");

err:
  delay(2000);
}

// 以降、温湿度の計算ロジックが続くので割愛
```

Groveセンサーを接続してスケッチを実行すると、温湿度がシリアルモニタに表示されます。

## LTEを使ってみる
先程のスケッチ例の中に`GetRSSI`というサンプルがあるので、このスケッチを使ってLTE回線に接続します。（WioLTEにはあらかじめアクティベート済みのSIMカードを挿しておきます）

```c++
#include <WioLTEforArduino.h>
#include <limits.h>

#define INTERVAL  (5000)

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;
  }
  delay(3000);

  SerialUSB.println("### Setup completed.");
}

void loop() {
  SerialUSB.println("### Get RSSI.");
  int rssi = Wio.GetReceivedSignalStrength();
  if (rssi == INT_MIN) {
    SerialUSB.println("### ERROR! ###");
    goto err;
  }
  SerialUSB.print("RSSI:");
  SerialUSB.print(rssi);
  SerialUSB.println("");
  
err:
  delay(INTERVAL);
}
```

スケッチを実行すると、LTE回線のRSSI（受信信号強度）がシリアルモニタに表示されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/38442/1edad05d-a8da-7d22-7ba2-15ad3bcddf09.png" width="600">

LTE接続ができたら、あとは`loop()`でセンサーから情報取得→データアップロードをするだけです。
既存のサンプルスケッチの組み合わせで`モバイルデータ通信(LTE)を使ったIoT`を簡単に実現することができます。

## まとめ
- WioLTEは初めてのモバイルデータ通信(LTE)を使ったIoTにオススメの開発ボード
- ArduinoIDEに各種ライブラリをインストールするだけですぐ開発を始められます
- Groveは神

## 公式リンク
https://dev.soracom.io/jp/start/lte_hw_wio-lte/