SORACOM Developers

Device

プロトタイプ向けマイコンモジュール M5Stack と 3G 拡張ボードをセットアップする

はじめに

このドキュメントではプロトタイプ向けマイコンモジュール M5Stack Basic (以下 M5Stack) と SORACOM で販売している M5Stack 用 3G 拡張ボード (以下 3G 拡張ボード) のセットアップ方法を紹介します。

当ガイドの前提は以下のとおりです。

基礎知識: M5Stack の準備

3G 拡張ボードを使用するために以下の準備を行います。

SORACOM IoT SIM の挿入

3G 拡張ボードへ SIM カードを挿入します。

  1. 六角レンチもしくは六角ドライバーを使用してケースからボードを取り外してください。

  2. 写真左下が SIM カードスロットです。SIM カードの数字が書いてある面を表、角がかけている側を右側にして奥まで挿入してください。

  3. SIM カードを挿入したら以下の写真のようにケースにネジ止めしてください。(2019年7月8日 写真を差し替えました。)

M5Stack との接続

M5Stack の本体とボトムモジュールを外し、間に 3G 拡張ボードを挟む形で取り付けてください。それぞれのモジュールはピンソケットで接続されていますので曲げてしまわないようまっすぐ取り外してください。

ステップ 1: M5Stack の開発環境を準備する

M5Stack と 3G 拡張ボードを用いた開発を行うために以下の準備を行います。

Arduino IDE のインストール

M5Stack の開発(ソースコード記述、コンパイル、バイナリファイル転送)には、Arduino IDE を利用します。Arduino のサイトからご利用の OS 向けの Arduino IDE をダウンロードし、表記に従ってインストールしてください。

USB シリアルドライバーのインストール

PC と接続するための USB シリアルドライバーをインストールします。

Windows の場合

  1. M5Stack の Web サイトから Windows 用の CP210X Driver をダウンロードします。
  2. ダウンロードした CP210x_VCP_Windows.zip を展開します。
  3. CP210xVCPInstaller_x64_v6.7.0.0 をダブルクリックしてインストールします。

  4. 付属の USB Type-C ケーブルを使用して PC と接続します。[デバイスマネージャ] を開き [ポート (COM と LPT)] で Silicon LabsCP210x USB to UART Bridge (COMnn) が表示されることを確認してください (nn は環境によって異なります)

macOS の場合

  1. M5Stack の Web サイトから macOS 用の CP210X Driver をダウンロードします。
  2. ダウンロードした CP210x_VCP_MacOS.zip を展開します。
  3. SiLabsUSBDriverDisk.dmg をダブルクリックしてマウントします。
  4. Finder でマウントされた Silicon Labs VCP Driver Install Disk が開かれますので Silicon Labs VCP Driver.pkg をダブルクリックしてインストールします。

  5. 付属の USB Type-C ケーブルを使用して PC と接続します。

  6. [システム環境設定] > [セキュリティとプライバシー] でドライバーのロードを承認します。詳細はアップル社の以下のドキュメントをご参照ください。

ESP32 ボード定義のインストール

M5Stack を Arduino IDE で扱うためボード定義をインストールします。

  1. Arduino IDE を起動します。
  2. メニューから [ファイル] > [環境設定] を選択します。
  3. [設定タブ] の [追加のボードマネージャの URL:] へ以下の URL を入力して [保存] をクリックします。 https://dl.espressif.com/dl/package_esp32_index.json
  4. Arduino IDE の [ツール] > [ボード] > [ボードマネージャ] を選択します。
  5. 一覧の中から esp32 by Espressif Systems を選択しインストールをクリックします

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

実際のプログラム(Arduino では スケッチと称します)で M5Stack と 3G 拡張ボードが使えるようにするライブラリを追加します。

  1. Arduino IDE を起動します。
  2. Arduino IDE の [スケッチ] > [ライブラリをインクルード] > [ライブラリを管理…] を選択します。
  3. 一覧の中から M5Stack by M5Stack を選択し [インストール]をクリックします。

  4. 同様に TinyGSM by Volodymyr Shymanskyy を選択し[インストール]をクリックします。

ステップ 2: M5Stack で開発してみる (HTTP アクセス)

  1. Arduino IDE を起動します。
  2. Arduino IDE の [ツール] > [ボード] から M5Stack-Core-ESP32 を選択します。
  3. Arduino IDE の [ツール] > [シリアルポート] から COMnn を選択します。nn は USB シリアルドライバーのインストール時にデバイスマネージャーで確認した数字を指定してください。
  4. 表示されているソースコードのテンプレートを削除し、以下のソースコードをペーストします。
  5. [丸印に → アイコン] - マイコンボードに書き込む - をクリックします。
  6. 書き込みが完了したらスケッチが実行されます。LCD に10秒毎に時刻が表示されることを確認してください。
#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);
}

ステップ 3: M5Stack で開発してみる (デバイス稼働時間を SORACOM Harvest へ送信)

  1. SORACOM Harvest の設定をします。SORACOM Harvest でデバイスのデータをクラウドで収集・取得・可視化する もご参照ください。
    1. SORACOM ユーザーコンソール を開きます。
    2. SIM グループを作成します。
    3. SIM グループの SORACOM Harvest の設定を ON にします。
    4. M5Stack に取り付けている SIM を SORACOM ユーザーコンソール上で特定し、その SIM を先ほど作成した SIM グループ に所属させます。
  2. Arduino IDE のスケッチを作成します。
    1. Arduino IDE を起動します。
    2. Arduino IDE の [ツール] > [ボード] から M5Stack-Core-ESP32 を選択します。
    3. Arduino IDE の [ツール] > [シリアルポート] から COMnn を選択します。nn は USB シリアルドライバーのインストール時にデバイスマネージャーで確認↓数字を指定してください。
    4. 表示されているソースコードのテンプレートを削除し、以下のソースコードをペースとします。
    5. [丸印に → アイコン] - マイコンボードに書き込む - をクリックします。
    6. 書き込みが完了したらスケッチが実行されます。10秒毎に Harvest に起動時刻を送信します。
#include <M5Stack.h>

#define TINY_GSM_MODEM_UBLOX
#include <TinyGsmClient.h>

TinyGsm modem(Serial2); /* Serial2 is Modem of 3G Module */
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("Uptime post to SORACOM Harvest"));

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

  /* build payload */
  char payload[1024];
  sprintf(payload, "{\"uptime\":%lu}", millis() / 1000);

  /* send request */
  ctx.println("POST / HTTP/1.1");
  ctx.println("Host: uni.soracom.io");
  ctx.println("Content-Type: application/json");
  char content_length_hdr[32];
  sprintf(content_length_hdr, "Content-Length: %lu", strlen(payload));
  ctx.println(content_length_hdr);
  ctx.println();
  ctx.println(payload);
  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 上で下図のように稼働時間が表示されるようになります

以降のステップ

センサーを取り付ける

M5Stack は Glove コネクターを使って様々なセンサーを簡単に取り付けることができます。

SORACOM の各種サービスを活用する

M5Stack は SORACOM が提供しているほとんどのサービスを利用することが可能です。

補足

Getting Started

SORACOM Air for セルラー

SORACOM Air for LoRaWAN

SORACOM Air for Sigfox

SORACOM Beam

SORACOM Canal/Direct/Door

SORACOM Endorse

SORACOM Funnel

SORACOM Funk

SORACOM Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

SORACOM Krypton

SORACOM Lagoon

SORACOM Napter

Gadgets

Device

サービス機能詳細

Developer Tools

pagetop