LTEモデム搭載済みIoTデバイス「Wio LTE」でセンサーデータの収集とグラフ化をしてみた

まいどおおきに、大阪の市田です。
先日発売された「買ったらすぐ使えるセンサーデバイス WioLTE」を試してみたのでご紹介します。

Wio LTEとは

Seeed社が開発しているマイコンモジュールで次のような特徴があります。

  • ARMベースのSTM32F4マイコン
  • Groveコネクター搭載
  • LTE通信モジュール搭載
  • Arduino IDE互換

これまでのRaspberry PiやArduinoといったIoT向けのマイコンでクラウドと通信したい場合は、Wi-Fiや3Gドングル、通信シールドを別途用意する必要がありました。

Wio LTEの場合は、通信モジュールが搭載済みのためSIMを用意するだけで利用することが出来ます。

また、Groveコネクタにより様々なGroveモジュールを利用することができるので、温湿度や加速度の取得、超音波測距などが簡単に取得することができるようになっています。

Seeed Studio Bazaar, Boost ideas, Extend the Reach

購入

Wio LTEの価格は9800円で、ソラコム社より購入が可能です。

Wio LTE - SORACOM

開封の儀

Wio LTEが届いたら早速パーツを確認しましょう。

wiolte-hako

内容物としては、本体のボードとアンテナ2本、USBケーブルの3点セットで届きます。

wiolte-dashita

ボードに「LTE」と書かれている部分にアンテナを接続します。

wiolte02

PCとUSBケーブルで接続すれば物理的な準備は完了です。

wiolte03

開発環境のセットアップ

それでは開発環境の準備を行います。基本的には下記の公式ページに則って行えば問題ありません。

Setup ja - SeeedJP/WioLTEforArduino Wiki

開発はArduino IDEで行うのでPCにインストールされていない場合は、下記からインストールしておきましょう。

Arduino - Software

Wio Tracker LTEボードの追加

Arduino IDEを起動して、「Wio Tracker LTEボード」を追加します。 追加手順は下記のページに記載されています。

AddWioLTEBoard ja - SeeedJP/WioLTEforArduino Wiki

尚、公式ページのドキュメントはWindows PCでの操作の説明になっていますが、私の環境はMacなので若干異なる部分があリますので、予めご注意下さい。

Arduino IDEを起動して「preferences」から環境設定を開きます。

05-arduino-config

ここの「追加のボードマネージャのURL」欄に「https://raw.githubusercontent.com/Seeed-Studio/Seeed_Platform/master/package_seeeduino_boards_index.json」を入力して下さい。

06-add-url

次にIDEのメニューから「ツール」->「ボード:"Arduino/Genuino Uno"」->「ボードマネージャ」をクリックして、ボードマネージャを開きます。

07-tool-board-manager

ここで「Seeed STM32F4」で検索して「STM32F4」に該当するものをインストールします。

08-boardmanager

Wio LTEライブラリの追加

Wio LTEライブラリがGithubで公開されているので、zipファイルでダウンロードします。

Releases - SeeedJP/WioLTEforArduino

ダウンロードできたら下記のようにIDEのメニューから「.ZIP形式のライブラリをインストール」で、保存したzipファイルを指定すればOKです。

03-install-library

これで開発環境の準備は完了です。

プログラムの書き込み方法

従来のArduinoと同じようにIDEから書き込みますが、WioLTE側で書き込み可能な状態にセットしておく必要があるので注意が必要です。

Wio LTEのモード切り替え

Wio LTEには「DFUモード」「通常モード」の2種類のモードがあります。

DFUモード

  • Device Firmware Upgradeの意味で、プログラムをArduino IDEから書き込むことが可能です。
  • DFUモードへの切り替え方法は2通りあります。
    • BOOTボタンを押しながらUSBケーブルを接続
    • (USBケーブルが接続されている場合)BOOTボタンを押しながらRSTボタンを押す

BOOTボタンとRSTボタンは本体の両面にそれぞれ配置されています。

wiolte04

wiolte05

通常モード

通常モードではプログラムの書き込みは出来ません。書き込もうとするとArduino側でエラーが表示されます。
また、書き込んだプログラムの実行は通常モードで行われます。

通常モードへの切り替え方法も2通りあります。

  • ボタンを押さずにUSBケーブルを接続
  • (USBケーブルが接続されている場合)RSTボタンを押す

サンプルスケッチで確認

WioLTEが正常に動作するかサンプルで確認します。センサーデバイスを用いた検証は後ほどご紹介します。

それでは、Arduino IDEのメニューから「LedSetRGB」というサンプルスケッチを選択します。これはWioLTEのLDEが色を変えてキラキラと輝くスケッチです。

09-sample-sketch

また、ボードを「Wio Tracker LTE」に指定しておきましょう。

10-select-board

「LedSetRGB」を選択すると下記のような画面が開くので、「右向き矢印」のアイコンをクリックしてArduinoに書き込みます。

書き込む時はWioLTEをDFUモードにしておくことを忘れないようにしましょう。

11-write

正常に書き込みが出来たら下記のような表示になります。

11-2-write-ok

RSTボタンを押して通常モードに切り替えてみましょう。下記のようにLEDがキラキラと点灯すればOKです。実際には赤、黃、緑、青と色が変りながら輝きます。

wiolte-rgb

dylib関連のエラーが出た時

公式ページにも書かれていますが、下記の様なエラーが出た場合はlibusbをインストールしてみて下さい。

"dyld: Library now loaded: /opt/local/lib/libusb-1.0.0.dylib"

私の環境でも最初はエラーになりましたが、libusbをインストールすることでプログラムを書き込むことが出来ました。

センサーからデータを取得してクラウドで可視化する

WioLTEの面白さは、LTEモジュールとGroveコネクターを搭載しているという点です。
手元にGroveモジュールとSIMさえあれば、すぐにIoT環境を作ることができてしまいます。

今回は、下記のような構成でGroveの超音波距離センサーを使って、距離データをSORACOM Harvestで可視化したいと思います。

wioLTE-diagram

Grove超音波測距センサーの接続

実際に接続するコネクタは、公式ページで「D38」と記載があるのでWioLTEで「D38」と書かれている箇所にコネクタを挿しましょう。

Home ja - SeeedJP/WioLTEforArduino Wiki

wiolte-d38

実際に繋げたらこんな状態になります。

wiolte-grove

専用ライブラリのインストール

Grove超音波測距センサーを利用するにはライブラリが必要です。手順は以下のとおりです。

  • 下記のページからzipファイルをダウンロードして展開
  • 展開したディレクトリに「-master」という名前が付いていたら「-master」だけ削除
  • PCのArduinoのライブラリディレクトリに、上記のディレクトリをコピー

スケッチの作成

後は、Arduino IDEでプログラムを書けばOKです。プログラムはスケッチ例にある「soracom-harvest」「grove-ultrasonic-ranger」を参考にすれば簡単に書くことが出来ます。

実際のコードは下記のとおりです。

#include <WioLTEforArduino.h>
#include <Ultrasonic.h>      // https://github.com/Seeed-Studio/Grove_Ultrasonic_Ranger
#include <stdio.h>

#define ULTRASONIC_PIN  (WIOLTE_D38)
#define INTERVAL  (1000)

Ultrasonic UltrasonicRanger(ULTRASONIC_PIN);

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(5000);

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

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

void loop() {
  char mydata[100];

  long distance;
  distance = UltrasonicRanger.MeasureInCentimeters();

  SerialUSB.println("### Open.");
  int connectId = Wio.SocketOpen("harvest.soracom.io", 8514, WIOLTE_UDP);
  if (connectId < 0) {
    SerialUSB.println("### ERROR! ###");
    goto err;
  }

  SerialUSB.println("### Send.");
  sprintf(mydata, "{\"distance\":%ld}", distance);
  SerialUSB.print("Send:");
  SerialUSB.print(mydata);
  SerialUSB.println("");
  if (!Wio.SocketSend(connectId, mydata)) {
    SerialUSB.println("### ERROR! ###");
    goto err;
  }

  SerialUSB.println("### Receive.");
  int length;
  do {
    length = Wio.SocketReceive(connectId, mydata, sizeof (mydata));
    if (length < 0) {
      SerialUSB.println("### ERROR! ###");
      goto err;
    }
  } while (length == 0);
  SerialUSB.print("Receive:");
  SerialUSB.print(mydata);
  SerialUSB.println("");

  SerialUSB.println("### Close.");
  if (!Wio.SocketClose(connectId)) {
    SerialUSB.println("### ERROR! ###");
    goto err;
  }

err:
  delay(INTERVAL);
}

サンプルスケッチの場合と同じ要領でプログラムを書き込んで終了です。

データを確認する

センサーの前に箱や手などをかざして近づけたり、離したりしてみましょう。
Arduinoのコンソール上で様子を確認することができます。Send:{"distance:11"}となっている箇所の数字が距離(cm)を表しています。

19-console

この状態でソラコムの管理画面を見てみると、下記のようにデータを確認することができました。

18-soracom-console-ultra-sonic

尚、Harvestの設定は簡単にできるので、下記ページをご参考に使ってみて下さい。

SORACOM Harvest でデバイスのデータをクラウドで収集・取得・可視化する | Getting Started | SORACOM Developers

最後に

Raspberry Pi等他のマイコンでも同じことはできますが、WioLTEを使うと、難しい専門知識なしにIoTを試すことができました。

また、今回は簡単にソラコムHarvestを使いましたが、ソラコムにデータを送ることができれば、AWSにデータを送る事も難しくありません。次はAWSと連携させてデータ活用するようなユースケースを試してみたいと思います。

以上です。