SJKのアイコン画像
SJK 2021年02月28日作成 (2022年01月26日更新)
製作品 製作品 閲覧数 1039
SJK 2021年02月28日作成 (2022年01月26日更新) 製作品 製作品 閲覧数 1039

自宅の環境パラメターを外出先でモニタリング

自宅の環境パラメターを外出先でモニタリング

概要

M5シリーズのgrove端子に接続することで、はんだ付なしに簡単に環境パラメター(温度・湿度・気圧)を計測できる環境センサユニット(ENV II)を用いて、部屋の環境パラメターを計測し、そのデータをIoTクラウドプラットフォームであるThingSpeakにアップし、外出先から部屋の環境をモニターするシステムを作りました。

使用したモジュール

開発環境

開発環境は、連携するThingSpeakのライブラリのあるArduino IDEで行いました。ThingSpeakもWebサイトは英語ですが、ヘルプページの日本語が充実しているので問題いなく連携できました。

ライブラリの追加

  • Adafruit の BMP280ライブラリ
    キャプションを入力できます
    インストールボタンを押すと他に必要なライブラリも一緒にインストールするか聞いてくるので、 "Install all"。
    キャプションを入力できます

  • ThingSpeakライブラリ
    キャプションを入力できます

ThingSpeakの設定

https://thingspeak.com/

  • 上記ThingSpeakのページを開いて新しいアカウントを作成。Sign Upをクリック。ユーザID・メールアドレス・タイムゾーン・パスワードを設定しCreate Accountボタンをクリック。
  • チャンネルの作成。チャンネルにはデータ・場所・状態を登録できる(8個まで)。今回は3個(温度・湿度・気圧)のセンサデータを書き込むためのチャンネルを作成。
  1. メニューバーの Channels > MyChannels をクリック。
  2. New Channel ボタンをクリック。
  3. 以下の情報を入力。
  4. Name;(チャンネルの名前)
  5. Field1; temp(フィード1の名前)
  6. Field2: hum(フィード2の名前)
  7. Field3; pres(フィード3の名前)
  8. Make Public(一般公開しても良いならチェック)
  9. Save Channel ボタンで保存
  • 書き込み用のAPIキーの取得とチャンネルID
    スケッチにはチャンネルIDとAPIキーが必要なので、
  1. メニューバーの Channels > MyChannels をクリックして、先ほど作成したチャンネルを開く。
  2. Channel ID と書かれた7桁の数字がチャンネルID。
  3. API Keys をクリックして Write API Key と書かれた英数字の文字列が書き込み用のAPIキー。

スケッチ

ENVIIのセンサ値を読みThingSpeakにアップするスケッチ

#include <ThingSpeak.h> #include <M5Atom.h> #include "WiFi.h" #include <Wire.h> #include "Adafruit_Sensor.h" #include <Adafruit_BMP280.h> #include "SHT3X.h" SHT3X sht30; Adafruit_BMP280 bme; float tmp = 0.0; float hum = 0.0; float pressure = 0.0; // Wifi設定(Wifi環境に合わせて変更) const char ssid[] = "your SSID"; const char pass[] = "your password"; // ThingSpeak設定(チャンネルIDと書き込み用APIキーを設定) const unsigned long myChannelNumber = 7degitNum; const char * myWriteAPIKey = "your APIkey"; // ThingSpeak接続用 WiFiClient client; void setup() { M5.begin(true, false, true); Wire.begin(26, 32); //ENV IIのgroveコネクタ接続pin設定 // ステーションモードに設定 WiFi.mode(WIFI_STA); // 接続開始 WiFi.disconnect(true, true); WiFi.begin(ssid, pass); Serial.println(); Serial.print("Wifi connect..."); delay(60 * 1000); //waiting wifi connection for 1 min while (!bme.begin(0x76)) { Serial.println("Could not find a valid BMP280 sensor, check wiring!"); } pressure = bme.readPressure(); if (sht30.get() == 0) { tmp = sht30.cTemp; hum = sht30.humidity; } Serial.printf("Temp: %2.2f*C Hum: %0.2f%% Pres: %0.2fPa\r\n", tmp, hum, pressure); // センサーデータアップロード開始 ThingSpeak.begin(client); // フィードに値を設定 ThingSpeak.setField(1, tmp); ThingSpeak.setField(2, hum); ThingSpeak.setField(3, pressure); // ThingSpeakに送信 Serial.println(); Serial.print("Write fields..."); ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); Serial.println("done"); // 2 min のタイマー設定(usec) esp_sleep_enable_timer_wakeup(2 * 60 * 1000 * 1000); // ディープスリープ esp_deep_sleep_start(); } void loop() { }

実際に使ってみて

3分おきにではあるがリアルタイムで外出先から部屋の状態をモニターできるのは便利です。朝晴れていれば、換気のために自室の窓を開けて外出することもありますが、気温が下がるタイミングで家の者に窓を閉めるようにお願いメールしたりしています。
作成してから、まだ台風が来ていないので気圧の急激な変化を観測できてないのが残念です。
ThingSpeakのChannel view

  • アンドロイドアプリのThingViewなどをつかえば、スマホで簡単にモニタできます。
    ThingView_icon

  • ThingSpeakには、tweet機能もあるようなので、これから夏に向けて室温上昇を検知してお知らせする機能も追加してみたい。

ログインしてコメントを投稿する