この記事はNefry Advent Calendar 20177日目の記事です。年末は時空歪みがち。
弊dotstudioは異常に湿度が低く、油断すると声が出なくなるので「湿度が40%を下回ったらLINEに通知する」という機能を作ってみました。
ちなみにQiitaをヘビーユーズしすぎてアップロード制限かかっていて苦しい感じで書いています。笑
使うもの
- Nefry BT
- Grove 温湿度センサ
- (Groveケーブル 5cm)
Nefryは小さくて省スペースなので、ケーブルもせいごさん(@tseigo)の紹介していた短いものを使ってみます!
IFTTTにアプレットを作成
「Nefry BTとIFTTTでスイッチを押したらLINEを送る仕組みを作ってみよう」の記事を参考に、Nefry用のアプレットを作成します。
「Webhook」をトリガーに「LINE Notify」を送るよう設定。アウトプットはSlackでもTwitterでもGmailでもなんでもOK。
Nefry側ではWebコンソールでIFTTTのキーを設定します。キーの取得は「Webhook」のセッティングから。
ちなみにIFTTTを使ってみるスケッチが、現在最新のNefryライブラリ1.1.3だと動かないみたい。。直前まで使ってた1.0.6ではとりあえず動きました。
温湿度センサのサンプルスケッチを試す
GroveのArduino用の温湿度センサのサンプルプログラムをとりあえず試してみます。
下記からライブラリをダウンロード。
スケッチ例[Humidity_Temperature_Sensor]の[DHTtester]を試してみる。
おっ。。。
対策1:ピン設定を変えてみる
「NefryBTでGroveセンサーをつなげる時の?について」という記事を見ると、対応するピンというものがあるらしい。
Nefry BTドキュメントの関連リンクにある「説明書」を読んでみる。
うこさん(@ukk0)に助けてもらいつつ、A0は「25」で使えるらしいことを確認。(13ページ目)
_( :⁍ 」 )_
対策2:ライブラリを変えてみる
Nefry製作者のわみさん(@wamisnet)にこっちのライブラリ試してみて、と言われたので下記を試す。
そのまま書き込むと以下のエラーが順番にでる。
- DHTのライブラリが複数あるよ -> 上で入れた「Grove_Temperature_And_Humidity_Sensor」消す
- Adafruit_Sensorライブラリないよ -> これも入れる https://github.com/adafruit/Adafruit_Sensor
灼 熱 地 獄
読めたよーーっ!!
まとめ
あと一歩でいける気がしているので12月中に頑張りたいなと思っています。。
湿度が40%を下回ったらLINE通知飛ばすようにできました!
めっちゃうざい。
チェックする時間を10分に1回(たぶん)にしました。
#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%以上になったあとまた下回ったら通知、としたいのでよい実装法があれば教えてください(´・ω・`)