概要
M5シリーズのgrove端子に接続することで、はんだ付なしに簡単に環境パラメター(温度・湿度・気圧)を計測できる環境センサユニット(ENV II)を用いて、部屋の環境パラメターを計測し、そのデータをIoTクラウドプラットフォームであるThingSpeakにアップし、外出先から部屋の環境をモニターするシステムを作りました。
使用したモジュール
-
M5Atom lite
https://www.marutsu.co.jp/pc/i/1634275/
-
M5Stack用環境センサユニット ver.2(ENV II)
https://www.marutsu.co.jp/pc/i/1634663/
-
接続
モジュールの接続はM5Atomliteのgrove端子とENV IIユニットのgrove端子を付属のgroveコネクタケーブルで接続するだけです。
開発環境
開発環境は、連携するThingSpeakのライブラリのあるArduino IDEで行いました。ThingSpeakもWebサイトは英語ですが、ヘルプページの日本語が充実しているので問題いなく連携できました。
ライブラリの追加
ThingSpeakの設定
- 上記ThingSpeakのページを開いて新しいアカウントを作成。Sign Upをクリック。ユーザID・メールアドレス・タイムゾーン・パスワードを設定しCreate Accountボタンをクリック。
- チャンネルの作成。チャンネルにはデータ・場所・状態を登録できる(8個まで)。今回は3個(温度・湿度・気圧)のセンサデータを書き込むためのチャンネルを作成。
- メニューバーの Channels > MyChannels をクリック。
- New Channel ボタンをクリック。
- 以下の情報を入力。
- Name;(チャンネルの名前)
- Field1; temp(フィード1の名前)
- Field2: hum(フィード2の名前)
- Field3; pres(フィード3の名前)
- Make Public(一般公開しても良いならチェック)
- Save Channel ボタンで保存
- 書き込み用のAPIキーの取得とチャンネルID
スケッチにはチャンネルIDとAPIキーが必要なので、
- メニューバーの Channels > MyChannels をクリックして、先ほど作成したチャンネルを開く。
- Channel ID と書かれた7桁の数字がチャンネルID。
- API Keys をクリックして Write API Key と書かれた英数字の文字列が書き込み用のAPIキー。
スケッチ
- ENV IIからセンサ値を読む部分は、@ksasaoさんの作成したスケッチを参考にさせていただきました。
https://gist.github.com/ksasao/cf601184691e59297fd464af910966b4
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分おきにではあるがリアルタイムで外出先から部屋の状態をモニターできるのは便利です。朝晴れていれば、換気のために自室の窓を開けて外出することもありますが、気温が下がるタイミングで家の者に窓を閉めるようにお願いメールしたりしています。
作成してから、まだ台風が来ていないので気圧の急激な変化を観測できてないのが残念です。
-
アンドロイドアプリのThingViewなどをつかえば、スマホで簡単にモニタできます。
-
ThingSpeakには、tweet機能もあるようなので、これから夏に向けて室温上昇を検知してお知らせする機能も追加してみたい。
投稿者の人気記事
-
SJK
さんが
2021/02/28
に
編集
をしました。
(メッセージ: 初版)
-
SJK
さんが
2021/02/28
に
編集
をしました。
-
SJK
さんが
2022/01/26
に
編集
をしました。
ログインしてコメントを投稿する