ケース入りマイコンモジュール "M5Stack" 用の「3G 拡張ボード」の販売を開始

2019/07/02

「IoT をいつでも、だれでも、簡単に」

ソラコムは IoT 向けプラットフォームとして、無線通信を中心にサービスをお使いいただいておりますが、通信を活用するためのデバイスも様々手掛けております。

そんな中、今回は M5Stack 用の 3G 拡張ボードの販売を開始しましたので、ご紹介します!

3G 拡張ボード 外観

M5Stack とは?

M5Stack” というマイコンモジュールをご存知でしょうか? 「マイコン」と聞くと 基板やチップむき出し こんなイメージを持っている方も多いと思いますが、この M5Stack はカラーディスプレイ、3 つのボタン、スピーカー、TF(microSD)カードスロットに加えて、150 mAh バッテリーと、ピンヘッダや Grove コネクタが搭載されて、しかもケースに入っています

M5Stack Basic 外観

M5Stack は ESP32 というマイコンが搭載されており、これ単体で Wi-Fi/Bluetooth を使った近距離の無線通信が可能で、Qiita を始めとして、様々な「やってみた」を実現できるモジュールです。

M5Stack 用 3G 拡張ボード

M5Stack はその名の通り、拡張ボードを「スタック」(積む)ことで機能をつけ足すことができます。 例えば GPS モジュール や、 バッテリー などですが、今回ご紹介する 3G 拡張ボード も同様に、 M5Stack へ「積む」ことでご利用いただけます。

3G 拡張ボード を取り付けた様子

※ M5Stack Basic に取り付けた様子。濃くなっている部分が 3G 拡張ボード。

内部には 3G モデムの他、nanoSIM スロットとアンテナが入っているため、これ一つで M5Stack に 3G 通信機能を付与することが可能です。

3G 拡張ボード 外観

実際の使い方

以下に実際の使い方をご紹介します。すでに M5Stack を使って開発されている方はすぐに使い始められますが、M5Stack が初めてという方は開発者サイトArduino IDE やドライバーのセットアップ手順を記載していますのでご参照ください。

実際に始めようとして気をつけないとな、と思ったのがこちらの 2 点です。

  1. SORACOM IoT SIM でご利用いただけるプランは plan01s (Low Data Volume 含む), plan-D のみです。

ソラコムで提供している他のプラン (KDDI 回線の plan-K、KDDI 回線のセルラー LPWA に対応した plan-KM1、大容量データアップロードが可能な待望の plan-DU)はすべて LTE のみとなっていますので、残念ながらこの 3G 拡張ボードで使用できません。

  1. 1.5mm の六角レンチもしくは六角ドライバーが必要です。

SIM カードを挿入のためにケースから基盤を取り外す際に使います。M5Stack Basic 部分の TF (microSD) カードのように外側にスリットがあると便利かなとも思いましたが、気軽に SIM カードを抜かれることもありませんので少し安心ですね(M5Stack まるごと持って行かれる危険は残りますが… )。

上記を頭に入れていただきまして、3G 通信を使用するまでの流れは以下のようになります。

  1. SORACOM アカウントを作成する
  2. 3G 拡張ボードに SORACOM IoT SIM を挿入する
  3. M5Stack に「積む」
  4. ボード定義とライブラリをインストール/更新する
  5. スケッチを書く
  6. 実行する

SORACOM アカウントを作成する

まだお持ちで無い場合は SORACOM アカウントを作成し、対応するプランの SIM カード(ナノサイズ)をゲットしてください。

3G 拡張ボードに SORACOM IoT SIM を挿入する

ここで上記の 1.5mm の六角レンチもしくは六角ドライバーを使って基板をケースから取り外します。写真のようにスロットを左下に置いて SIM カードの数字が書いてある面を表、角がかけている側を右側にして奥まで挿入してください。

SIM カードを挿す

上の写真は表裏が分かるよう飛び出した状態で撮っていますが、最後まで押し込むと基板からはみでることはありません。スロットにはスプリングが入っていますので、M5Stack の TF (microSD) カードスロットと同様一度奥に押し込むと取り出せます。アンテナもケースの中にパッケージされていますので取り回しがとても簡単でいいですね。

M5Stack に「積む」

M5Stack 本体とボトムモジュールの間に 3G 拡張ボードを挟む形で取り付けてください。ピンソケットを曲げてしまわないか緊張する瞬間ですがモジュール間のスキマがなくなるようぐっと押し込みます。

ボード定義とライブラリをインストール/更新する

M5Stack をお使いの方は設定済みと思いますが Arduino IDE 設定の追加のボードマネージャとして https://dl.espressif.com/dl/package_esp32_index.json を指定しボード定義をインストールしてください。同様に使用するライブラリもインストールします。

  • ボード定義 (Arduino IDE の [ツール] > [ボード] > [ボードマネージャ]): esp32 by Espressif Systems です。
  • ライブラリ (Arduino IDE の [スケッチ] > [ライブラリをインクルード] > [ライブラリを管理…])
    • M5Stack by M5Stack
    • TinyGSM by Volodymyr Shymanskyy (TinyGSM がソラコムで動作を確認した 3G 通信用ライブラリです。他にも使えるものがありましたら Twitter などでぜひ教えてください!)

スケッチを書いて実行する

ここまで終われば実際にスケッチから 3G 通信をお楽しみいただけます。以下のスケッチを M5Stack にアップロードするだけで HTTP 通信をお試しいただけます。

#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);
}

今回は最小のサンプルですが、開発者サイトには SORACOM Harvest へ HTTP で10秒毎に送信するスケッチを紹介していますのでぜひお試しください。700 mAh のリチウムイオンポリマーバッテリーを搭載する M5Stack 用電池モジュール を追加で積んで max が実測したところ約 4 時間稼動しました。この小さなパッケージで外部電源を用意せず4時間も稼動しますので、デモなどに最適と思います。

もちろんソラコムの提供する他のサービス SORACOM Beam / Funnel / Lagoon と組み合わせることもできます!

あとがき

Wi-Fi と Bluetooth Low Energy といった近距離無線通信を備える M5Stack に SORACOM IoT SIM のどこでもつながるコネクティビティが加わることで、より活用シーンを広げることができると考えています。

カラーディスプレイやボタン、アンテナがパッケージされている(基板むき出しではない) M5Stack は、Raspberry Pi + USB ドングルの組み合わせや Wio シリーズ とはまた違う魅力のあるプロトタイピングデバイスです。IoT を推進するためのスモールスタートからの検証と成長の繰り返しにとてもよいデバイスと思いますので、ぜひみなさまの活用シーンやユースケースを教えてください。

今回はソラコムエバンジェリストの max とサポートエンジニアの kaoru の合作でお届けしました。


ソラコム “Max” 松下 / “kaoru” 佐藤


Posted by max and kaoru at 2019/07/02