##動作確認環境
Windows 10
##前提条件
- Visual Studio CodeにPlatform IOをインストール済み
※本記事はArduino IDEではなく、Platform IOで開発する場合を想定しています。 - SORACOMのアカウント保有済み
##いるもの
- M5Stack GRAY
- M5Stack用3G拡張ボード
- ソラコムのSIMカード (ナノサイズ)
※プランは plan01s , plan-D
##手順
###M5Stack
M5StackGRAYを開いて、
その間に3G拡張ボードを挟みます。
###ソラコム
- SORACOM ユーザーコンソール を開きます。
- SIM グループを作成します。
- SIM グループの SORACOM Harvest の設定を ON にします。
- M5Stack に取り付けている SIM を先ほど作成した SIM グループ に所属させます。
###VSCode
PlatformIOにて、新しいprojectを作成
ソラコムのサイトにあるコードをもとに、ジャイロセンサー値を取得するように修正します。
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、データを取得
ちゃんとデータが届いており、グラフで可視化されました。
(ジャイロセンサの値をグラフ化することに意味はないですが)