M5StickCで外気の温度をスマホで確認
M5StickCで外気と室内の温度·湿度を測定して、スマホでも確認したいと思います。
DHT11を2個使って、室外と室内に設置します。
外への接続はエアコン配管用の穴を使います。穴の隙間を塞いでいるパテを少し開けて配線を通します。
DHT11との接続例(ライブラリの追加等)は次を参照してください。
スマホで確認するため、Ambient のサービスを使用します。今回参考にしたものは次のサイトです。ユーザー登録と使い方は親切に説明されています。
M5StickCで小型環境センサ端末を作る – Ambient
サンプルを変更したものが次のプログラムです。
#include <M5StickC.h>
#include "DHT.h"
#include "Ambient.h"
#define DHTPIN1 26
#define DHTPIN2 0
#define DHTTYPE DHT11
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
WiFiClient client;
Ambient ambient;
const char* ssid = "***************"; // ルータのssid
const char* password = "***************"; // ルータのパスワード
unsigned int channelId = ***************; // AmbientのチャネルID
const char* writeKey = "***************"; // ライトキー
void setup() {
M5.begin();
M5.Axp.ScreenBreath(8);
M5.Lcd.setRotation(1);
M5.Lcd.fillScreen(BLACK);
dht1.begin();
dht2.begin();
WiFi.begin(ssid, password); // Wi-Fi APに接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi AP接続待ち
delay(500);
Serial.print(".");
}
Serial.print("WiFi connected\r\nIP address: ");
Serial.println(WiFi.localIP());
ambient.begin(channelId, writeKey, &client); // Ambientの初期化
}
void loop() {
double vbat = M5.Axp.GetVbatData() * 1.1 / 1000; // バッテリー電圧を取得
float hum1 = dht1.readHumidity();
float tmp1 = dht1.readTemperature();
float hum2 = dht2.readHumidity();
float tmp2 = dht2.readTemperature();
M5.Lcd.setTextSize(1);
M5.Lcd.setCursor(45, 0, 2);
M5.Lcd.println("IN / OUT");
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(0, 17);
M5.Lcd.printf("T%3.1f %3.1f \r\n", tmp1, tmp2);
M5.Lcd.printf("H%3.1f %3.1f", hum1, hum2);
ambient.set(1, vbat);
ambient.set(2, tmp1);
ambient.set(3, hum1);
ambient.set(4, tmp2);
ambient.set(5, hum2);
ambient.send();
delay(180000); // 5分待機 5*60*1000ms.
}
上側が室内と室外の温度、下側が湿度です。
Ambient の設定画面で表示する内容を選択します。
外との温度·湿度の差がわかります。
M5StickCと温度・湿度センサ
M5StickC が手に入ったので、温度・湿度センサをつけてみました。DHT11 が安かったので、それをつなげます。
DHT11 センサの電源(左から1番ピン)を M5StickC の 3V3、信号(2番ピン)を G26、GND(4番ピン)を GND につなげます。1番ピンと2番ピンの間には 10kΩ の抵抗を入れます。
M5StickC を PC つなぐための USB driver 、プログラムを作成するための Arduino IDE と M5StickC のライブラリ追加は済んでいるものとします。
DHT11 ライブラリ
DHT11 を使うためのライブラリを追加します。
ツールのライブラリを管理で「unified sensor」と入力して下の方へスクロールします。「Adafruit Unified Sensor」をインストールします。
次に「dht」と入力します。「DHT sensor library by Adafruit」をインストールします。
プログラム
プログラムは「DHT sensor library」のサンプルを変更しました。
#include <M5StickC.h>
#include "DHT.h"
#define DHTPIN 26
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
M5.begin();
dht.begin();
M5.Axp.ScreenBreath(10); // 明るさ変更
M5.Lcd.setRotation(3);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextSize(1);
M5.Lcd.setCursor(40, 0, 2);
M5.Lcd.println("DTH11 Test!");
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t)) {
M5.Lcd.setTextSize(1);
M5.Lcd.setCursor(0, 17);
M5.Lcd.println("Failed to read from DHT sensor!");
return;
}
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(0, 17);
M5.Lcd.print("T: " + String(t) + " `C ");
M5.Lcd.setCursor(0, 45);
M5.Lcd.print("H: " + String(h) + " % ");
}
元のサンプルはこちらです。
すぐに電池がなくなるので、暗くしました。
M5.Axp.ScreenBreath(10);
この数値(7~15)で明るさが変えられます。15 だと明るくてすぐに電池がなくなります。
M5StickC おもしろいです。
押し入れの湿度チェック
梅雨の季節、押し入れの中も「じとじと」していることでしょう。そこで、湿度センサを使ってみます。
湿度センサは DHT11 を使い、Raspberry Pi で制御します。よく使われる組み合わせなので、Raspberry Pi の設定は他を参考にしてください。DHT11 の信号線(左から2番目のピン)は Raspberry Pi の7ピン(GPIO 4ピン)につなぎます。
Node-RED
制御ソフトに Node-RED を使い、スマホで確認できるようにします。Node-RED を最新のものにします。
次のコマンドをターミナルから入力してください。
bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
詳しくは、ここを参照してください。
Raspberry Piで実行する : Node-RED日本ユーザ会
温度センサ DHT11
温度センサの DHT11 を Node-RED で使うために必要なものをインストールします。
次のコマンドをターミナルから入力してください。
sudo npm install --unsafe-perm -g node-dht-sensor
sudo npm install --unsafe-perm -g node-red-contrib-dht-sensor
詳しくは、ここを参照してください。
node-red-contrib-dht-sensor - Node-RED (英語)
Node-RED 起動
Node-RED を起動します。次のコマンドをターミナルから入力してください。
node-red-start
パソコンのブラウザから Raspberry Pi の IPアドレスに「:1880」をつけてアクセスします。 例 192.168.3.28:1880
Node-RED の画面が表示されます。
スマホで確認できるように、必要なものをインストールします。
Node-RED のパレットの管理をクリックします。
Node-RED のパレットからノードを追加で「dashboard」と入力し、表示された node-red-dashboard を追加します。
inject ノードを画面に配置し、ダブルクリックで設定します。
繰り返しの時間間隔:5分
DTH11 のノードを配置し設定します。「DHT22」と書かれてますが「DHT11」に設定しなおします。
Sensor model:DHT11
Pin numbering:BCM GPIO
Pin number:4
dashboard の chart を配置して設定します。
「新規に ui_group を追加...」で鉛筆ボタンをクリック
「新規に ui_tab を追加...」で鉛筆ボタンをクリック
名前:湿度
このまま DTH11 に接続すると温度を表示するので、間に change ノードを追加して湿度を表示するようにします。
chart ではメッセージの msg.payload を表示するので、湿度のデータが入っている msg.hyumidity の内容をセットし直します。
すべて設定できたら deploy します。タイムスタンプ ノードの左の四角をマウスでクリックすると測定します。設定した時間間隔でも自動的に測定します。
測定結果を見るには、矢印の先をクリックします。または、「/ui/#0」をつけてアクセスします。 例 192.168.3.28:1880/ui/#0
同じルータ内であれば、スマホでも確認できます。
これで、気になる押し入れの湿度が確認できます。
スマート電球、遅すぎ!もっと、すばやく!
スイッチ入れれば、すぐ点灯、そして、「電気をつけて!」でも点灯 ⁉
但し、技適がないので使用不可。せっかく買ったのでちょっとだけ使ってみます。
スマート電球はとっても便利なのですが、家族にとってはあまり評判は良くないです。なにせ、反応が遅い。壁のスイッチならすぐに点灯するのに、この電球はワンテンポ遅れてから点灯する。まれに、しばらく反応しないで、あれ、今頃、なんてことも…
私は待てるのですが、家族からすると、不便なのです。
スマート壁スイッチ!
照明の壁スイッチをスマート化すれば、反応が良くなるかも。
でも、いまさら Philips Hue の ディマースイッチのために電球を買い替えるのももったいないし、赤外線リモコン対応の照明やオーム電機の照明リモコンスイッチだと壁スイッチの電源を切られると反応しなくなるし…
ありました
Pnasonic と 岩崎電機で出してました。電気工事士による工事が必要ですが…
IoTスマートスイッチ Link-S²(リンク エスツー) | 制御機器・配線機器 | 岩崎電気
注意:壁スイッチの作業は危険です。感電すると死亡事故になります。必ず電気工事士(電気屋さん)に依頼してください。
線が足りない!
既存の壁スイッチと取り換えができない⁉
スマート壁スイッチは、既存の壁スイッチにつながっている2本の線以外にもう1本が必要です。
電源はコンセントを見ると分かるように2本あります。接地線と非接地線というものです。壁スイッチにも2本きているのですが、コンセントでいうと片側の1本(非接地線)だけなのです。その1本の間にスイッチを入れて On/Off しています。
壁スイッチには On/Off のための線だけがきていているのです。線が2本でも、スイッチの両端の線で、実質は電源の片側(非接地線)だけです。3本目の線(接地線)が必要なのです。
探すと… ありました
この壁スイッチは2本(既存スイッチの両端の線)だけで動作します。
LIVOLOホワイト米国標準1Gang2Way LEDインジケーター付きワイヤレスリモートタッチスイッチVL-C501SR-11
- 出版社/メーカー: LIVOLO
- メディア: その他
- この商品を含むブログを見る
無線のリモコンで On/Off できるので、リモコンのスイッチ部にリレーをつけてRaspberry Pi でスマートスピーカから操作できます。(プログラム等いろいろやることがありますがネット上にたくさん情報があります)
でも、これは使ってはいけないのです。
なんか、ほかに良いものはないかな?
玄関のドアを開けるとパッと明るく! ホッとします。
ドアセンサと連動させて、玄関のドアを開けたら明るくします。もちろん、ドアを閉めたら少したってから明かりを消します。
取り付けには家にあったクリップ電球のヘッド部分のみを使いました。スマート電球を通常の電球と取り替えて、画鋲で壁に付けました。もちろん、コンセントからの電源なので、元電源(壁スイッチ等)を切られることはありません。
ドアセンサを使わなくても、スマホの位置情報と連動させて、家に着いたときに玄関の明かりがつくようにできますが…
ドアセンサと連動させたい
前回、玄関にドアセンサを取り付けたので、ドアセンサが反応すると玄関の明かりがつくようにしました。
ドアセンサが開いたのを検出したら、スマート電球を点灯するように設定しました。ドアセンサと電球の連携は使用するアプリ等に合わせて設定してください。
そして、ドアを閉めると一定時間後に消すようにしました。位置情報だと難しいかもしれません。家につく前に位置を検知しているので、どのタイミングで消すか時間の設定が難しいと思います。
玄関のドアを開けるとパッと明かりがつきます。ホッとします。
カギするの忘れたかな? でも、確認のため家に戻らない!
出かけてすぐに、鍵をしたか不安になって、家に戻ることがたまにあります。最近はたびたびかな?
Qrio Lock などのスマートロックを取り付けていれば、スマホで確認できるのですが、そこまでしなくても何とかならないでしょうか。
安価なドアセンサを使って、鍵ロックセンサにしてみました。
センサ本体(大きい方)と磁石(小さいほう)が近くにあれば「ドア閉」で、離れれば「ドア開」となります。最近は WiFi でスマホにつなげられるのものがいろいろあると思います。私の使ったのと同じような製品はもう売っていませんでした。下記のリンクは参考です。
鍵ロックセンサにするには
単に直接サムターンに付けました。サムターンの形によっては付けられないかもしれませんが、付けば安く済みます。
セット組の磁石を小さなものにかえて、ちゃんと反応する位置を探すのがコツになります。磁石はDAISOの「超強力マグネット ミニ」です。
サムターンの端っこに2個の小さい磁石を付けました。センサの中心に磁石が近づくようにしたら、うまく反応しませんでした。少しずらすと反応が安定しました。
一つで済めばいいのですが、センサとの距離が足りなかったので2つ付けます。位置が決まったらセロテープで一つを固定します。2つ目は近づければくっつきました。センサ本体は添付の両面テープで付けます。
スマホで見るとドアの開閉になりますが、読み替えて鍵の施錠、解錠とします。
これで、確認するために家へ戻らなくて済みます。
スマート電球の電源を切るな!
スマート電球を買ってきて、さっそく既存の電球とおきかえました。「OK Google 電気をつけて!」パッと電気がつくと気持ちがいいです。でも、たまに反応しなくなります。
なぜなら、誰かが壁のスイッチを切ってしまうのです。
壁のスイッチを切れないようにすればいいのですが、家族からは、直接スイッチで入り切りした方が使いやすいとのことで却下されました。
悔しいですが、直接スイッチでやったほうが手っ取り早いです。
結局、呼べど光らないスマート電球。せっかく買ったのに単なるLED電球です。
そこで、スマート電球の良さを少しでも知ってもらうために、直接コンセントから配線することにしました。賃貸なので、天井裏で配線しなおすことができません。
買ってきたのは、ダイソーのコーナーラック、電球ソケットです。これで壁照明にします。
コーナーラックの角の部分をノコギリで切って、延長コードが通過できるようにしました。延長コードをそこに通してコーナーラックを取り付けます。
延長コードに電球ソケット、スマート電球を取り付けて完成です。
これで、いつでも声に答えるスマート電球となりました。
めでたし、めでたし。