SJK が 2021年02月28日13時58分50秒 に編集
初版
タイトルの変更
自宅の環境パラメターを外出先でモニタリング
タグの変更
M5Atom
SHT30
BMP280
ThingSpeak
Arduino_IDE
秋葉原2021
メイン画像の変更
本文の変更
# 概要 M5シリーズのgrove端子に接続することで、はんだ付なしに簡単に環境パラメター(温度・湿度・気圧)を計測できる環境センサユニット(ENV II)を用いて、部屋の環境パラメターを計測し、そのデータをIoTクラウドプラットフォームであるThingSpeakにアップし、外出先から部屋の環境をモニターするシステムを作りました。 # 使用したモジュール - M5Atom lite https://www.marutsu.co.jp/pc/i/1634275/ ![キャプションを入力できます](https://camo.elchika.com/f3b12739046e7fc47ecbddbb1f64b87edfb22d7d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f66313830623661322d306137362d343462632d393565612d393965616233316233313561/) - M5Stack用環境センサユニット ver.2(ENV II) https://www.marutsu.co.jp/pc/i/1634663/ ![キャプションを入力できます](https://camo.elchika.com/ad3ee7b7b34a7ae05ff722402d5f0683e2e8bd34/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f63616331373132642d613133382d343561622d383837362d366535373537623563343364/) - 接続 モジュールの接続はM5Atomliteのgrove端子とENV IIユニットのgrove端子を付属のgroveコネクタケーブルで接続するだけです。 # 開発環境 開発環境は、連携するThingSpeakのライブラリのあるArduino IDEで行いました。ThingSpeakもWebサイトは英語ですが、ヘルプページの日本語が充実しているので問題いなく連携できました。 # ライブラリの追加 - Adafruit の BMP280ライブラリ ![キャプションを入力できます](https://camo.elchika.com/ff09b8e9491ccfe7536d4f878157f98b7a76962e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f65383561386566622d623234622d346161662d626262642d333365653930383635343431/) インストールボタンを押すと他に必要なライブラリも一緒にインストールするか聞いてくるので、 "Install all"。 ![キャプションを入力できます](https://camo.elchika.com/595d43cfbb1e7581cf3cb1513e6fe9f5f7831550/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f63333232613963362d383261632d346636652d393138622d643936393934356436306434/) - ThingSpeakライブラリ ![キャプションを入力できます](https://camo.elchika.com/d3bfc15c696a55d6aade5f6d4f6612c4b2d112a0/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f63393937316532382d383932352d346261362d383265322d366431653236613932396638/) # ThingSpeakの設定 https://thingspeak.com/ - 上記ThingSpeakのページを開いて新しいアカウントを作成。Sign Upをクリック。ユーザID・メールアドレス・タイムゾーン・パスワードを設定しCreate Accountボタンをクリック。 - チャンネルの作成。チャンネルにはデータ・場所・状態を登録できる(8個まで)。今回は3個(温度・湿度・気圧)のセンサデータを書き込むためのチャンネルを作成。 1. メニューバーの Channels > MyChannels をクリック。 1. New Channel ボタンをクリック。 1. 以下の情報を入力。 1. Name;(チャンネルの名前) 1. Field1; temp(フィード1の名前) 1. Field2: hum(フィード2の名前) 1. Field3; pres(フィード3の名前) 1. Make Public(一般公開しても良いならチェック) 1. Save Channel ボタンで保存 - 書き込み用のAPIキーの取得とチャンネルID スケッチにはチャンネルIDとAPIキーが必要なので、 1. メニューバーの Channels > MyChannels をクリックして、先ほど作成したチャンネルを開く。 1. Channel ID と書かれた7桁の数字がチャンネルID。 1. API Keys をクリックして Write API Key と書かれた英数字の文字列が書き込み用のAPIキー。 # スケッチ - ENV IIからセンサ値を読む部分は、[@ksasaoさん](https://twitter.com/ksasao/status/1263830103819055104)の作成したスケッチを使わせていただきました。 https://gist.github.com/ksasao/cf601184691e59297fd464af910966b4 ```arduino: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](https://camo.elchika.com/da1f1003699a083718928b7f0037a4b0e7ad7ac0/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f64623766346662302d336363372d343939642d623439322d646465613333343966373832/) - アンドロイドアプリの[ThingView](https://play.google.com/store/apps/details?id=com.cinetica_tech.thingview&hl=ja&gl=US)などをつかえば、スマホで簡単にモニタできます。 ![ThingView_icon](https://camo.elchika.com/ad16d8d35194bf698d6a9051aedc4a276568e117/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f64343266343366652d356438632d343930642d393730392d326134663635623830303563/)