LoginSignup
7
3

More than 3 years have passed since last update.

M5StackGRAYのジャイロセンサの値を3G拡張ボードを使ってSORACOM Harvestに送ってみた

Last updated at Posted at 2020-10-20

動作確認環境

Windows 10

前提条件

  • Visual Studio CodeにPlatform IOをインストール済み
    ※本記事はArduino IDEではなく、Platform IOで開発する場合を想定しています。
  • SORACOMのアカウント保有済み

いるもの

手順

M5Stack

M5StackGRAYを開いて、
その間に3G拡張ボードを挟みます。

スクリーンショット 2020-10-20 23.48.09.png

完成形
IMG_8328.jpeg

ソラコム

  • SORACOM ユーザーコンソール を開きます。
  • SIM グループを作成します。
  • SIM グループの SORACOM Harvest の設定を ON にします。 Image from Gyazo
  • M5Stack に取り付けている SIM を先ほど作成した SIM グループ に所属させます。

VSCode

PlatformIOにて、新しいprojectを作成
Image from Gyazo

ライブラリ(M5Stack)を追加
Image from Gyazo

ライブラリ(TinyGSM)を追加
Image from Gyazo

ソラコムのサイトにあるコードをもとに、ジャイロセンサー値を取得するように修正します。

M5Stackのジャイロセンサー値取得は、こちらのサイトを参考にしました。
【M5Stack】第4回 M5Stack Fire内蔵のIMU(MPU6886)を使って姿勢角算出

main.cpp
// <M5Stack.h>をincludeする前に、IMUモジュールを#defineしておく
#define M5STACK_MPU6886 
#include <M5Stack.h>

//3G通信に必要
#define TINY_GSM_MODEM_UBLOX
#include <TinyGsmClient.h>

float gyroX, gyroY, gyroZ;

TinyGsm modem(Serial2); /* Serial2 is Modem of 3G Module */
TinyGsmClient ctx(modem);

void setup() {
  Serial.begin(115200);

  M5.begin();
  M5.Power.begin(); 

  M5.IMU.Init();

  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 */

  M5.IMU.getGyroData(&gyroX,&gyroY,&gyroZ);
  M5.Lcd.setCursor(0, 10);
  M5.Lcd.printf("gyro=(%5.1f, %5.1f, %5.1f)", gyroX, gyroY, gyroZ);

  char payload[1024];


  M5.Lcd.setCursor(0, 15);
  /* 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ユーザコンソールの Menu > SIM管理
1、該当のSIMをチェック
2、操作 > 3、データを取得
Image from Gyazo

ちゃんとデータが届いており、グラフで可視化されました。
(ジャイロセンサの値をグラフ化することに意味はないですが)
Image from Gyazo


7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3