Soracom

Users

スタートガイド

デバイス稼働時間を SORACOM Harvest へ送信する

  1. SORACOM Harvest の設定をします。Getting Started: Harvest Data でデバイスのデータをクラウドで収集・取得・可視化する もご参照ください。
    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 に起動時刻を送信します。

Arduino ESP32 のボードパッケージ Ver 1.05/Ver 1.06 をインストールした場合、スケッチ実行時に LCD に何も表示されない事象が確認されております。(2021 年 5 月時点)。その場合は以下のいずれかをお試しください。

  • Arduino ESP32 のボードパッケージ Ver 1.04 をインストールする。
  • setup() 関数の先頭行の Serial.begin(115200); をコメントアウトする。
#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 上で下図のように稼働時間が表示されるようになります