Edited at
NefryDay 7

Nefry BTでほぼノンプログラムな湿度管理したい

More than 1 year has passed since last update.

この記事はNefry Advent Calendar 20177日目の記事です。年末は時空歪みがち。

弊dotstudioは異常に湿度が低く、油断すると声が出なくなるので「湿度が40%を下回ったらLINEに通知する」という機能を作ってみました。

ちなみにQiitaをヘビーユーズしすぎてアップロード制限かかっていて苦しい感じで書いています。笑

https://gyazo.com/20dbb7477e4bfe2018b9ff8c7635b9e3


使うもの


  • Nefry BT

  • Grove 温湿度センサ

  • (Groveケーブル 5cm)

https://gyazo.com/056da13768b8d0a8f1124448b1abe970

Nefryは小さくて省スペースなので、ケーブルもせいごさん(@tseigo)の紹介していた短いものを使ってみます!


IFTTTにアプレットを作成

Nefry BTとIFTTTでスイッチを押したらLINEを送る仕組みを作ってみよう」の記事を参考に、Nefry用のアプレットを作成します。

「Webhook」をトリガーに「LINE Notify」を送るよう設定。アウトプットはSlackでもTwitterでもGmailでもなんでもOK。

https://gyazo.com/256c60e37bcc433769d640b883893fc4

Nefry側ではWebコンソールでIFTTTのキーを設定します。キーの取得は「Webhook」のセッティングから。

https://gyazo.com/0411a7c9a497c19e4477b4a7d0047abe

ちなみにIFTTTを使ってみるスケッチが、現在最新のNefryライブラリ1.1.3だと動かないみたい。。直前まで使ってた1.0.6ではとりあえず動きました。


温湿度センサのサンプルスケッチを試す

GroveのArduino用の温湿度センサのサンプルプログラムをとりあえず試してみます。

下記からライブラリをダウンロード。

https://github.com/Seeed-Studio/Grove_Temperature_And_Humidity_Sensor

スケッチ例[Humidity_Temperature_Sensor]の[DHTtester]を試してみる。

スケッチにある通りA0にセンサをセット。

https://gyazo.com/33609c85c898e8cca5c164e1777a010f

シリアルモニタで確認。

https://gyazo.com/42934ccd6a99cd928700a1e4651aa608

おっ。。。


対策1:ピン設定を変えてみる

NefryBTでGroveセンサーをつなげる時の?について」という記事を見ると、対応するピンというものがあるらしい。

Nefry BTドキュメントの関連リンクにある「説明書」を読んでみる。

うこさん(@ukk0)に助けてもらいつつ、A0は「25」で使えるらしいことを確認。(13ページ目)

https://gyazo.com/df094b2e4fe7311d6b890538c99b2ba9

サンプルスケッチのピンを書き換え。

https://gyazo.com/cedc1f67cc4ad2871275a125c77fe013

いざ!

https://gyazo.com/42934ccd6a99cd928700a1e4651aa608

_( :⁍ 」 )_


対策2:ライブラリを変えてみる

Nefry製作者のわみさん(@wamisnet)にこっちのライブラリ試してみて、と言われたので下記を試す。

https://github.com/adafruit/DHT-sensor-library

そのまま書き込むと以下のエラーが順番にでる。


  • DHTのライブラリが複数あるよ -> 上で入れた「Grove_Temperature_And_Humidity_Sensor」消す

  • Adafruit_Sensorライブラリないよ -> これも入れる https://github.com/adafruit/Adafruit_Sensor

DHTtesterのサンプルスケッチを開き直して試す。

https://gyazo.com/499250057b709f95843748d50185b6e9

灼 熱 地 獄

わみさんのコメントを参考にDHT11に変更する。

https://gyazo.com/32b381761ebe39af2bc07c5317a07a48

トライ。

https://gyazo.com/6fb9e3ce235b5b82ab7e766ad6edb04b

読めたよーーっ!!


まとめ

あと一歩でいける気がしているので12月中に頑張りたいなと思っています。。

湿度が40%を下回ったらLINE通知飛ばすようにできました!

https://gyazo.com/ff99ab43e6a083fc85ddec50c9317167

めっちゃうざい。

チェックする時間を10分に1回(たぶん)にしました。


arduino.ino

#include <Nefry.h>

#include <NefryIFTTT.h>
#include "DHT.h"

#define DHTPIN A0
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

String Event, SecretKey;
int counter = 0;

void setup() {
Nefry.setStoreTitle("SecretKey", 0);
Nefry.setStoreTitle("Event", 1);
SecretKey = Nefry.getStoreStr(0);
Event = Nefry.getStoreStr(1);
Serial.begin(9600);
Serial.println("DHTxx test!");

dht.begin();
}

void loop() {
delay(600000);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);

if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

float hif = dht.computeHeatIndex(f, h);
float hic = dht.computeHeatIndex(t, h, false);

if (h < 40) {
bool sendData = IFTTT.send(Event, SecretKey, (String)h, (String)(micros()/1000000)+"秒",(String)counter);
if (!sendData) {
Nefry.setLed(255, 0, 0);
}
}

Nefry.ndelay(1000);
Serial.print("Humidity: ");
Serial.print(h);
}


40%を下回ったら通知、その後湿度が40%以上になったあとまた下回ったら通知、としたいのでよい実装法があれば教えてください(´・ω・`)