IoTサービスへのデータ送信(モバイル) (M5Stack)

サンプルソースコード

概要

IIJ IoTの基本動作である、データ送信を実装してみます。

当サンプルでは、httpプロトコルを使用して、定期的にIIJ IoTサービスにデータ送信を行います。
今回は、M5Stack のCPU温度の値を送信しています。

ソースコード
m5stack_iijiot_datasend.ino
#include <M5Stack.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

//--- TODO: モバイルルーターの SSIDとパスワードを指定してください
const char* ssid = "YOUR_SSID";
const char* pass = "YOUR_PASSWORD";
//---

const int delay_sec = 60;
const char* iij_iot_uri = "http://gw.iot.iij.jp/v1";

/*
  setup関数
*/
void setup() {
  //M5Stackを初期化
  M5.begin();
  M5.Power.begin();

  //Wi-Fi接続
  WiFi.begin(ssid,pass);
  M5.Lcd.printf("Waiting connect to WiFi: %s ", ssid);
  while(WiFi.status() != WL_CONNECTED) {
    //接続完了まで待つ
    delay(1000);
    M5.Lcd.print(".");
  }
  //接続完了したらIPアドレスとMacアドレスを表示する
  M5.Lcd.println("\nWiFi connected");
  M5.Lcd.print("IP address: ");
  M5.Lcd.println(WiFi.localIP());
  M5.Lcd.print("MAC address:");
  M5.Lcd.println(WiFi.macAddress());
  delay(500);
}

/*
  IIJ IoTサービスにデータ送信する
    引数
      const char* ns     : 送信する namespace値
      const char* name   : 送信する name値
      const double value : 送信する value値
    戻り値
      bool true:送信成功 false:送信失敗
*/
bool send_data(const char* ns, const char* name, const double value) {
  //JSONオブジェクトを作成
  StaticJsonDocument<JSON_OBJECT_SIZE(3)> body;
  if (ns != nullptr && strlen(ns) > 0) {
    body["namespace"] = ns;
  }
  body["name"] = name;
  body["value"] = value;

  //JSONを文字列に変換
  String body_string;
  serializeJson(body, body_string);

  //JSON文字列をIIJ IoTサービスにPOST
  HTTPClient http;
  http.begin(iij_iot_uri);
  http.addHeader("Content-type", "application/json");
  int status_code = http.POST(body_string);
  http.end();

  return status_code >= 200 && status_code < 300;
}

/*
  loop関数
*/
void loop() {
  //CPU温度を取得
  float temp = temperatureRead();
  //データ送信
  if (send_data("M5Stack", "temperature", temp)) {
    M5.Lcd.printf("data send OK: temp=%f \n", temp);
  } else {
    M5.Lcd.println("data send NG.");
  }
  //待つ
  delay(delay_sec * 1000);
}
実行結果

M5Stack側は、Wi-Fi接続後、60秒ごとにCPU温度をデータ送信し、結果をLCD画面に出力します。

IIJ IoTサービスのコントロールパネルにログインし、デバイスモニタリングの画面を確認すると、送信したデータのグラフが表示されていることが確認できます。

各種情報へのリンク

IIJ IoTサービスマニュアル

M5Stack

ArduinoJson