SORACOMのM5Stack 3Gを試してみました

ソラコムのM5Stack 3Gモジュールを試してみました。Arduino環境で携帯回線を使ったインターネット接続を簡単に行うことができます。
2019.08.05

先月開催されたSORACOM Discoveryというイベントで、「M5Stack用 3G 拡張ボード」というプロトタイピング用のモジュールが発表になりました。こちらを試してみたのでレポートします。

https://www.discovery2019.soracom.jp/

M5Stack 3G

以前ご紹介しましたが、M5Stackとは、5cm角サイズの筐体に、液晶画面とWiFiを搭載したプロトタイピング用モジュールのことです。M5Stackは、LCDやバッテリ、拡張コネクタやGloveコネクタを標準装備しており、IoT関係の実験やプロトタイピングを簡単に行うことができます。Arduino環境で開発ができますので、必要なコードは最小限で済みます。小型で扱いやすいので大変人気があります。

これに3G通信機能を追加できるのが、M5Stack 3Gモジュールです。SORACOMさんの通信サービスを使って、WiFiが無い環境でも簡単にデバイスをインターネット接続することができるようになるわけです。

準備

M5Stack 3Gを使って開発をするための準備をします。手順はこちらに書かれている通りです。 https://dev.soracom.io/jp/start/m5stack/

すでにM5Stackを使ったことがあれば、Arduino環境はインストール済みかもしれません。アップデート等が必要であれば適宜行っておきます。

ライブラリの追加

既存のArduino環境に加えて、M5Stack 3Gモジュールを使用するために、下記が追加で必要でした。

3Gモジュールを使用するためのライブラリを追加します。メニューの「ライブラリを管理…」を開き、M5Stackを検索します。 さらに3Gモジュールを使用するためのライブラリを追加するために、同様に、TinyGSMを検索します。 見つかった、「TinyGSM by Volodymyr Shymanskyy」をインストールします。

SIM

SIMはもちろんSORACOM Airを使用します。ソラコムのユーザーコンソールにアカウントを作成のうえ、SIMを登録し有効にしておきます。

モジュールの準備

M5Stack 3Gモジュールは簡単な組み立てが必要です。フレームに基板をネジ止めする必要があります。工具として1.5mmの六角レンチが必要です。 フレームにボードを取り付ける前に、SIMをボードに差し込んでおく必要があります。

M5Stack 3Gは、M5Stackのオプションモジュールです。バッテリーとなっている裏蓋と、M5Stack本体の間に、M5Stack 3Gモジュールを挟んで、それぞれのピンとソケットが合うように取り付けます。

サンプルコード

サンプルアプリケーションとして、こちらに記載されているHTTPアクセスを試してみます。

Arduino IDEで新規作成し、Webに掲載されているコードを貼り付けます。

#include <M5Stack.h>

#define TINY_GSM_MODEM_UBLOX
#include <TinyGsmClient.h>

TinyGsm modem(Serial2); /* 3G board modem */
TinyGsmClient ctx(modem);

void setup() {
  Serial.begin(115200);
  M5.begin();
  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.println(F("M5Stack + 3G Module"));

  M5.Lcd.print(F("modem.restart()"));
  Serial2.begin(115200, SERIAL_8N1, 16, 17);
  modem.restart();
  M5.Lcd.println(F("done"));

  M5.Lcd.print(F("getModemInfo:"));
  String modemInfo = modem.getModemInfo();
  M5.Lcd.println(modemInfo);

  M5.Lcd.print(F("waitForNetwork()"));
  while (!modem.waitForNetwork()) M5.Lcd.print(".");
  M5.Lcd.println(F("Ok"));

  M5.Lcd.print(F("gprsConnect(soracom.io)"));
  modem.gprsConnect("soracom.io", "sora", "sora");
  M5.Lcd.println(F("done"));

  M5.Lcd.print(F("isNetworkConnected()"));
  while (!modem.isNetworkConnected()) M5.Lcd.print(".");
  M5.Lcd.println(F("Ok"));

  M5.Lcd.print(F("My IP addr: "));
  IPAddress ipaddr = modem.localIP();
  M5.Lcd.print(ipaddr);
  delay(2000);
}

void loop() {
  M5.update();

  M5.Lcd.clear(BLACK);
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.println(F("World Clock from worldtimeapi.org"));

  /* HTTP GET example */
  if (!ctx.connect("worldtimeapi.org", 80)) {
    Serial.println(F("Connect failed."));
    return;
  }
  Serial.println(F("connected."));

  /* send request */
  ctx.println("GET /api/timezone/Asia/Tokyo.txt HTTP/1.0");
  ctx.println("Host: worldtimeapi.org");
  ctx.println();
  Serial.println("sent.");

  /* receive response */
  while (ctx.connected()) {
    String line = ctx.readStringUntil('\n');
    Serial.println(line);
    if (line == "\r") {
      Serial.println("headers received.");
      break;
    }
  }
  char buf[1 * 1024] = {0};
  ctx.readBytes(buf, sizeof(buf)); /* body */
  ctx.stop();
  M5.Lcd.println(buf);

  delay(1000 * 10);
}

ポイントは下記のあたりでしょうか。

  • TINY_GSM_MODEM_UBLOX というdefineをすること
  • モデムとの通信に使用するSerial2を適切に設定すること
  • gprsConnectで与えるAPN, Username, Passwordをそれぞれ、soracom.io, sora, sora と設定すること

あとはTinyGsmClientを使用してHTTP通信ができます。

動かしてみる

実際に動かしてみた様子です。

最初にモデムの初期化を行います。うまく行っていれば、モデムのモデル番号等の取得が確認できます。(ちなみになんらかの理由でモデムにアクセスできない場合は、ここが表示されません)

そして携帯回線との接続が行われ、IPアドレスが取得できて準備完了です。ここまでおよそ30秒程度を要します。

そのあと、worldtimeapi.orgにアクセスし、各種時間情報が取得に成功しているようです。

消費電流

気になる消費電流ですが、ちょっと比べてみました。M5Stack単体で動作するときはおよそ80mAほどを消費します。一方このM5Stack 3Gモジュールを追加したときには、元の本体の分と合わせて、100 ~ 220mA程度の消費が観察されました。結構変動しますが、150mA程度のことが多いようです。使用状態によっても変わると思いますが、携帯回線に接続していることを思えば、比較的省電力なのではないかと思います。

上手な利用方法としては、定期的に起動し、通信を行い、スリープすることを繰り返すことになるかと思います。IP取得までそれなりの時間がかかりますので、それを留意して動作パターンを決める必要があると思われます。

まとめ

ソラコムさんで販売開始した、M5Stack用 3G 拡張ボードを試してみました。M5Stack 3Gにより、WiFiが無い環境でもインターネットへの接続が気軽に行えるようになります。しかもソラコムのインフラやサービスを使えますので、暗号化や証明書の扱いなど、非力な組み込みCPUには荷が重い処理をオフロードすることも可能となります。いろいろと面白い使い方ができそうです。

参考