現時点での情報です。最新情報はM5StickC非公式日本語リファレンスを確認してください。
概要
ENV HAT(気温、湿度、気圧)の情報を1分ごとにThingSpeakにアップしました。また基礎編をベースにしていますので、基礎部分の解説は省いています。
ThingSpeakとは?
非常に高機能なデータ解析サービスです。英語のため、ちょっと敷居が高いですが、REST APIの他にMQTT APIでもデータ登録が可能です。
有料オプションもありますので、高頻度データや長期データ保存なども可能です。また、かなり古いバージョンですが、自分でサーバーを構築するスタンドアロンでの利用も可能です。Rails+MySQLで動きますので、Oracle Cloud Free Tierなどの無料で使えるサーバー上に構築することもできると思います。
事前準備
ThingSpeakにてChannelを事前に作成する必要があります。作るときに8個までのFieldが追加できるので、気温、湿度、気圧の3つのFieldを作成します。
Channel IDとMy ProfileにあるUser API Keyを、preferencesにあらかじめ保存しておいてください。
スケッチ
/* note: need add library Adafruit_BMP280 from library manage Github: https://github.com/adafruit/Adafruit_BMP280_Library note: need add library ThingSpeak from library manage Github: https://github.com/mathworks/thingspeak-arduino */ #include <M5StickC.h> #include <Preferences.h> #include <WiFi.h> #include "DHT12.h" #include <Adafruit_BMP280.h> #include "ThingSpeak.h" Preferences preferences; char wifi_ssid[33]; char wifi_key[65]; DHT12 dht12; Adafruit_BMP280 bme280; unsigned long nextUpdate = 0; int thingSpeak_chID; char thingSpeak_apiKey[40]; WiFiClient client; void setup() { // M5StickC初期化 M5.begin(); M5.Lcd.setRotation(3); M5.Lcd.fillScreen(BLACK); M5.Lcd.setCursor(0, 0, 2); M5.Lcd.println("ENV TEST"); // Wi-Fiアクセスポイント情報取得 preferences.begin("Wi-Fi", true); preferences.getString("ssid", wifi_ssid, sizeof(wifi_ssid)); preferences.getString("key", wifi_key, sizeof(wifi_key)); preferences.end(); // Wi-Fi接続 Serial.printf("接続中 - %s ", wifi_ssid); WiFi.begin(wifi_ssid, wifi_key); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" 接続完了"); // I2C初期化 Wire.begin(0, 26); // BME280初期化 if (!bme280.begin(0x76)) { Serial.println("BME280センサーが見つかりません"); while (1); } // ThingSpeak情報取得 preferences.begin("ThingSpeak", true); thingSpeak_chID = preferences.getInt("chID", 0); preferences.getString("apiKey", thingSpeak_apiKey, sizeof(thingSpeak_apiKey)); preferences.end(); // ThingSpeak初期化 ThingSpeak.begin(client); } void loop() { // 気温 float tmp = dht12.readTemperature(); M5.Lcd.setCursor(0, 20, 2); M5.Lcd.printf("Temp: %2.1f C", tmp); // 湿度 float hum = dht12.readHumidity(); M5.Lcd.setCursor(0, 40, 2); M5.Lcd.printf("Humi: %2.0f %%", hum); // 気圧 float pressure = bme280.readPressure() / 100.0F; M5.Lcd.setCursor(0, 60, 2); M5.Lcd.printf("pressure: %6.1f hPa", pressure); // 1分に1度データ送信 if ( nextUpdate < millis() ) { // シリアル出力 Serial.printf("Temp: %2.1f C\n", tmp); Serial.printf("Humi: %2.0f %%\n", hum); Serial.printf("pressure: %6.1f hPa\n", pressure); // ThingSpeak送信 ThingSpeak.setField(1, tmp); ThingSpeak.setField(2, hum); ThingSpeak.setField(3, pressure); ThingSpeak.writeFields(thingSpeak_chID, thingSpeak_apiKey); // 時間更新(60秒後) nextUpdate = millis() + 60000; } // 1秒待機 delay(1000); }
ThingSpeakオフィシャルのThingSpeakライブラリを利用していますので、事前に追加してください。
ThingSpeakは、あらかじめ登録するフィールドをThingSpeakで設定しておき、送信するデータをsetField()で追加したあとにwriteFields()で送信します。
まとめ
ThingSpeakもかんたんに利用することができます。有料オプションは学生やアカデミックライセンスの他、個人利用などもありますので、比較的利用しやすいサービスだと思います。
コメント