SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

SORACOMでIoTをもっと楽しく、手軽に

「M5Stack」と3G拡張ボードでお手軽IoT「雨雲レーダーの表示デバイス」を作ろう

SORACOMでIoTをもっと楽しく、手軽に 第2回


  • X ポスト
  • このエントリーをはてなブックマークに追加

M5Stack用3G拡張ボード

 M5Stackは単体でもWi-FiやBluetooth Low Energy(BLE)を搭載しているので接続性に優れたデバイスですが、セルラー通信機能が加わることで屋外でのクラウドやネット上のリソース活用がとても容易になり、利用シーンが大きく広がります。

 この拡張ボードには、3Gモデム、nanoSIMスロット、アンテナが入っているため、SIMを準備すればM5Stackの3G通信が可能となります。

M5Stack用3G拡張ボード 外観
M5Stack用3G拡張ボード 外観

 M5Stack用3G拡張ボードはソラコムのユーザーコンソールからご購入いただくことができます(購入には無料のSORACOMアカウントが必要です)。

M5Stack用3G拡張ボードで利用可能なSORACOM IoT SIM

 M5Stack用3G拡張ボードで利用可能なSORACOM IoT SIMは以下の通りです。

  • SORACOM IoT SIM(「plan01s」および「plan01s - Low Data Volume」のどちらでもお使いいただけます)
  • SORACOM 特定地域向け IoT SIM / plan-D
    • SIMのサイズは「nanoSIM」サイズです。plan01sおよびplan01s - Low Data Volumeは、nanoSIMを含めた3つのSIMサイズに対応できるSIMカードです。

 M5Stack用3G拡張ボードと同様に、SORACOM IoT SIMもソラコムのユーザーコンソールからご購入いただくことができます(購入には無料のSORACOMアカウントが必要です)。

 ソラコムではM5Stack Basic本体とM5Stack用3G拡張ボードがセットになった「M5Stack Basic 3G 拡張ボード セット」もご用意しています。

SORACOMアカウントの作成方法

 SORACOMアカウントを作るためには以下の3つが必要です(すでにアカウントをお持ちの方は、本手順は不要です)。

  • モダンなWebブラウザ(Google Chrome推奨)
  • 受信可能なメールアドレス1つ
  • 有効なクレジットカード1つ

 メールアドレスはアカウント作成時に本人確認のために使用します。またクレジットカードはM5Stack用3G拡張ボードやSORACOM IoT SIMの購入やSORACOM各種サービス利用料金の請求先となるため、これらを用意してください。

 詳しいサインアップの方法はSORACOM アカウントの作成の手順に沿い、約15分で作成することができます。「支払情報の設定」まで行ったら、アカウント作成は完了です。

SIMの取り付けとM5Stackへの取り付け

 M5Stack用3G拡張ボードにSIMを取り付けます。取り付けには1.5mmの六角レンチもしくは六角ドライバーが必要なので、別途ご準備ください。

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

SIMの取り付けの様子
SIMの取り付けの様子

 次に、M5Stackの上部とボトムモジュールの間にM5Stack用3G拡張ボードを挟む形で取り付けてください。ピンソケットを曲げてしまわないか緊張する瞬間ですが、モジュール間のスキマがなくなるようぐっと押し込みます(灰色部分がM5Stack用3G拡張ボードです。わかりやすいように標準のケースとは異なる色を使用しています)。

M5Stackに拡張ボードを取り付けた様子
M5Stackに拡張ボードを取り付けた様子

 以上でハードウェア側の準備は完了となります。

ライブラリのセットアップ

 M5Stack用3G拡張ボードを利用するためのライブラリをセットアップします。今回は「TinyGSM」というオープンソースライブラリを利用します。

 Arduino IDEのメニューから[ツール]>[ライブラリを管理]で表示されるダイアログ上でTinyGSM by Volodymyr Shymanskyyをインストールします(tinygsmで検索すると見つけやすいです)。

テスト~ワールドクロックの表示

 準備が整ったところで、ワールドクロックを表示してみます。今回は「World Time API」というサービスを利用し、API経由でクロック情報を得てみます。

 M5StackとPCをUSB Type-Cで接続した後、以下の手順を行います。基本的な手順は先ほどのHelloWorldの時と同じです。

  1. Arduino IDEのメニューから[ツール]>[ボード: ...]で、M5Stack-Core-ESP32を選択します。
  2. Arduino IDEのメニューから[ツール]>[シリアルポート: ...]で、M5Stackが接続されているポートを選択します。
  3. Arduino IDEのメニューから[ファイル]>[新規ファイル]を選択し、新たなスケッチを書けるようにします。
  4. 新たなスケッチの内容をGist / m5stack_3gextboard_worldclock.inoの内容にします。
  5. Arduino IDEで「書き込み」を行います。

 書き込みが正常に完了すれば自動的に再起動して書き込まれたスケッチが実行され、以下のように液晶ディスプレイへWorld Time APIから入手した情報が表示されます(通信の確立まで40~60秒程度かかります)。

World Clockを実行している様子
World Clockを実行している様子

Gistで配布しているソースコード

 Gistで配布しているソースコードを、こちらにも掲載します。

/*
 * Copyright (c) 2019 Kohei "Max" MATSUSHITA
 * Released under the MIT license
 * https://opensource.org/licenses/mit-license.php
*/
#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 == "\n") {
      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);
}

次のページ
雨雲レーダーの表示に取り掛かる

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
SORACOMでIoTをもっと楽しく、手軽に連載記事一覧

もっと読む

この記事の著者

松下 享平(株式会社ソラコム)(マツシタ コウヘイ)

 株式会社ソラコムの事業開発マネージャーとして主にデバイスの企画を担当しながら、エバンジェリストとして、SORACOMサービスを企業・開発者により理解、活用いただくための講演活動を担当。90年代半ばの地方ISPの立ち上げをキャリアスタートとし、主にインターネットを取り扱ったシステムインテグレーターを...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11689 2019/09/10 11:51

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング