M5StickCで外気の温度をスマホで確認

M5StickCで外気と室内の温度·湿度を測定して、スマホでも確認したいと思います。

DHT11を2個使って、室外と室内に設置します。

f:id:higenonagaineko:20190814074910j:plain

M5StickC 室内 外気

外への接続はエアコン配管用の穴を使います。穴の隙間を塞いでいるパテを少し開けて配線を通します。

f:id:higenonagaineko:20190814075028j:plain

DHT11 エアコンの配管

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.
}

f:id:higenonagaineko:20190814081022j:plain

室内 室外

上側が室内と室外の温度、下側が湿度です。

 

Ambient の設定画面で表示する内容を選択します。

チャネルとチャートのカスタマイズ – Ambient

f:id:higenonagaineko:20190814090039j:plain

温度 湿度

外との温度·湿度の差がわかります。

 

M5StickCと温度・湿度センサ

M5StickC が手に入ったので、温度・湿度センサをつけてみました。DHT11 が安かったので、それをつなげます。

f:id:higenonagaineko:20190729121937j:plain

3V3, G26, GND に接続

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」をインストールします。

f:id:higenonagaineko:20190729123018j:plain

Adafruit United Sensor

次に「dht」と入力します。「DHT sensor library by Adafruit」をインストールします。

f:id:higenonagaineko:20190729122934j:plain

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) + " % ");
}

 

元のサンプルはこちらです。

github.com

 

すぐに電池がなくなるので、暗くしました。
  M5.Axp.ScreenBreath(10);
この数値(7~15)で明るさが変えられます。15 だと明るくてすぐに電池がなくなります。

f:id:higenonagaineko:20190729123643j:plain

温度・湿度センサ

M5StickC おもしろいです。

押し入れの湿度チェック

梅雨の季節、押し入れの中も「じとじと」していることでしょう。そこで、湿度センサを使ってみます。

f:id:higenonagaineko:20190724123620p:plain

押し入れ じめじめ

湿度センサは DHT11 を使い、Raspberry Pi で制御します。よく使われる組み合わせなので、Raspberry Pi の設定は他を参考にしてください。DHT11 の信号線(左から2番目のピン)は Raspberry Pi の7ピン(GPIO 4ピン)につなぎます。

f:id:higenonagaineko:20190724123759p:plain

Raspberry Pi と DHT11

Node-RED

制御ソフトに Node-RED を使い、スマホで確認できるようにします。Node-RED を最新のものにします。


次のコマンドをターミナルから入力してください。
bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)

f:id:higenonagaineko:20190724092424j:plain

Node-RED インストール

詳しくは、ここを参照してください。

Raspberry Piで実行する : Node-RED日本ユーザ会

 

温度センサ DHT11

温度センサの DHT11 を Node-RED で使うために必要なものをインストールします。
次のコマンドをターミナルから入力してください。


sudo npm install --unsafe-perm -g node-dht-sensor

f:id:higenonagaineko:20190724092734j:plain

node-dht-sensor インストール

sudo npm install --unsafe-perm -g node-red-contrib-dht-sensor

f:id:higenonagaineko:20190724092835j:plain

node-red-contrib-dht-sensor インストール

詳しくは、ここを参照してください。

node-red-contrib-dht-sensor - Node-RED (英語)

 

Node-RED 起動

Node-RED を起動します。次のコマンドをターミナルから入力してください。
node-red-start

f:id:higenonagaineko:20190724093041j:plain

Node-RED 起動

パソコンのブラウザから Raspberry PiIPアドレスに「:1880」をつけてアクセスします。 例 192.168.3.28:1880
Node-RED の画面が表示されます。

 

ダッシュボード dashboard

スマホで確認できるように、必要なものをインストールします。

Node-RED のパレットの管理をクリックします。

f:id:higenonagaineko:20190724093435j:plain

パレットの管理

Node-RED のパレットからノードを追加で「dashboard」と入力し、表示された node-red-dashboard を追加します。

f:id:higenonagaineko:20190724093836j:plain

ノードの追加

inject ノードを画面に配置し、ダブルクリックで設定します。
繰り返しの時間間隔:5分

f:id:higenonagaineko:20190724094211j:plain

inject ノード

DTH11 のノードを配置し設定します。「DHT22」と書かれてますが「DHT11」に設定しなおします。

Sensor model:DHT11
Pin numbering:BCM GPIO
Pin number:4

f:id:higenonagaineko:20190724120714j:plain

DHT11 ノード

dashboard の chart を配置して設定します。

f:id:higenonagaineko:20190724120230j:plain

chart ノード

「新規に ui_group を追加...」で鉛筆ボタンをクリック

f:id:higenonagaineko:20190724121251j:plain

chartの設定

「新規に ui_tab を追加...」で鉛筆ボタンをクリック

名前:湿度

f:id:higenonagaineko:20190724121418j:plain

chartの設定


このまま DTH11 に接続すると温度を表示するので、間に change ノードを追加して湿度を表示するようにします。

chart ではメッセージの msg.payload を表示するので、湿度のデータが入っている msg.hyumidity の内容をセットし直します。

f:id:higenonagaineko:20190724121716j:plain

change ノード

すべて設定できたら deploy します。タイムスタンプ ノードの左の四角をマウスでクリックすると測定します。設定した時間間隔でも自動的に測定します。

f:id:higenonagaineko:20190724122146j:plain

deploy

測定結果を見るには、矢印の先をクリックします。または、「/ui/#0」をつけてアクセスします。 例 192.168.3.28:1880/ui/#0

f:id:higenonagaineko:20190724122408j:plain

chart

同じルータ内であれば、スマホでも確認できます。

f:id:higenonagaineko:20190724122517j:plain

湿度

 

これで、気になる押し入れの湿度が確認できます。

 

スマート電球、遅すぎ!もっと、すばやく!

スイッチ入れれば、すぐ点灯、そして、「電気をつけて!」でも点灯 ⁉

f:id:higenonagaineko:20190625222455j:plain

スイッチとリモコン

但し、技適がないので使用不可。せっかく買ったのでちょっとだけ使ってみます。

 

スマート電球はとっても便利なのですが、家族にとってはあまり評判は良くないです。なにせ、反応が遅い。壁のスイッチならすぐに点灯するのに、この電球はワンテンポ遅れてから点灯する。まれに、しばらく反応しないで、あれ、今頃、なんてことも…

私は待てるのですが、家族からすると、不便なのです。

 

スマート壁スイッチ!

照明の壁スイッチをスマート化すれば、反応が良くなるかも。

でも、いまさら Philips Hue の ディマースイッチのために電球を買い替えるのももったいないし、赤外線リモコン対応の照明やオーム電機の照明リモコンスイッチだと壁スイッチの電源を切られると反応しなくなるし…

 

ありました

Pnasonic と 岩崎電機で出してました。電気工事士による工事が必要ですが…

[タッチ]LEDお好み点灯(リンクモデル)(3線式) | スマートフォン・タブレット操作時 | アドバンスシリーズ リンクモデルの特長 | 商品ラインアップ | アドバンスシリーズ | スイッチ・コンセント(配線器具) | Panasonic

IoTスマートスイッチ Link-S²(リンク エスツー) | 制御機器・配線機器 | 岩崎電気

注意:壁スイッチの作業は危険です。感電すると死亡事故になります。必ず電気工事士電気屋さん)に依頼してください。

 

線が足りない!

既存の壁スイッチと取り換えができない⁉
スマート壁スイッチは、既存の壁スイッチにつながっている2本の線以外にもう1本が必要です。
電源はコンセントを見ると分かるように2本あります。接地線と非接地線というものです。壁スイッチにも2本きているのですが、コンセントでいうと片側の1本(非接地線)だけなのです。その1本の間にスイッチを入れて On/Off しています。

壁スイッチには On/Off のための線だけがきていているのです。線が2本でも、スイッチの両端の線で、実質は電源の片側(非接地線)だけです。3本目の線(接地線)が必要なのです。


探すと… ありました

この壁スイッチは2本(既存スイッチの両端の線)だけで動作します。 

 無線のリモコンで On/Off できるので、リモコンのスイッチ部にリレーをつけてRaspberry Pi でスマートスピーカから操作できます。(プログラム等いろいろやることがありますがネット上にたくさん情報があります)

f:id:higenonagaineko:20190625222558j:plain

リモコンのボタン部分にリレーをはんだ付け

でも、これは使ってはいけないのです。


なんか、ほかに良いものはないかな?

 

玄関のドアを開けるとパッと明るく! ホッとします。

ドアセンサと連動させて、玄関のドアを開けたら明るくします。もちろん、ドアを閉めたら少したってから明かりを消します。

f:id:higenonagaineko:20190624200051j:plain

玄関のスマート壁照明

取り付けには家にあったクリップ電球のヘッド部分のみを使いました。スマート電球を通常の電球と取り替えて、画鋲で壁に付けました。もちろん、コンセントからの電源なので、元電源(壁スイッチ等)を切られることはありません。

f:id:higenonagaineko:20190624202152j:plain

クリップ電球のヘッドのみ流用

ドアセンサを使わなくても、スマホの位置情報と連動させて、家に着いたときに玄関の明かりがつくようにできますが…

 

ドアセンサと連動させたい

前回、玄関にドアセンサを取り付けたので、ドアセンサが反応すると玄関の明かりがつくようにしました。

 

ドアセンサが開いたのを検出したら、スマート電球を点灯するように設定しました。ドアセンサと電球の連携は使用するアプリ等に合わせて設定してください。

f:id:higenonagaineko:20190622153817j:plain

ドアセンサ

そして、ドアを閉めると一定時間後に消すようにしました。位置情報だと難しいかもしれません。家につく前に位置を検知しているので、どのタイミングで消すか時間の設定が難しいと思います。

 

 

玄関のドアを開けるとパッと明かりがつきます。ホッとします。

 

カギするの忘れたかな? でも、確認のため家に戻らない!

出かけてすぐに、鍵をしたか不安になって、家に戻ることがたまにあります。最近はたびたびかな?

 

Qrio Lock などのスマートロックを取り付けていれば、スマホで確認できるのですが、そこまでしなくても何とかならないでしょうか。

 

安価なドアセンサを使って、鍵ロックセンサにしてみました。

f:id:higenonagaineko:20190622153817j:plain

ドアの開閉センサ

センサ本体(大きい方)と磁石(小さいほう)が近くにあれば「ドア閉」で、離れれば「ドア開」となります。最近は WiFiスマホにつなげられるのものがいろいろあると思います。私の使ったのと同じような製品はもう売っていませんでした。下記のリンクは参考です。

 

鍵ロックセンサにするには


単に直接サムターンに付けました。サムターンの形によっては付けられないかもしれませんが、付けば安く済みます。

セット組の磁石を小さなものにかえて、ちゃんと反応する位置を探すのがコツになります。磁石はDAISOの「超強力マグネット ミニ」です。

f:id:higenonagaineko:20190622154750j:plain

施錠中

サムターンの端っこに2個の小さい磁石を付けました。センサの中心に磁石が近づくようにしたら、うまく反応しませんでした。少しずらすと反応が安定しました。

f:id:higenonagaineko:20190622154902j:plain

解錠中

一つで済めばいいのですが、センサとの距離が足りなかったので2つ付けます。位置が決まったらセロテープで一つを固定します。2つ目は近づければくっつきました。センサ本体は添付の両面テープで付けます。

 

スマホで見るとドアの開閉になりますが、読み替えて鍵の施錠、解錠とします。


これで、確認するために家へ戻らなくて済みます。

 

スマート電球の電源を切るな!

スマート電球を買ってきて、さっそく既存の電球とおきかえました。「OK Google 電気をつけて!」パッと電気がつくと気持ちがいいです。でも、たまに反応しなくなります。

f:id:higenonagaineko:20190621183917j:plain

つきません

なぜなら、誰かが壁のスイッチを切ってしまうのです。

f:id:higenonagaineko:20190621184723j:plain

スイッチがOff

壁のスイッチを切れないようにすればいいのですが、家族からは、直接スイッチで入り切りした方が使いやすいとのことで却下されました。

 

悔しいですが、直接スイッチでやったほうが手っ取り早いです。

 

結局、呼べど光らないスマート電球。せっかく買ったのに単なるLED電球です。

そこで、スマート電球の良さを少しでも知ってもらうために、直接コンセントから配線することにしました。賃貸なので、天井裏で配線しなおすことができません。

 

買ってきたのは、ダイソーのコーナーラック、電球ソケットです。これで壁照明にします。

 

コーナーラックの角の部分をノコギリで切って、延長コードが通過できるようにしました。延長コードをそこに通してコーナーラックを取り付けます。

f:id:higenonagaineko:20190621185038j:plain

コーナーラック

延長コードに電球ソケット、スマート電球を取り付けて完成です。

f:id:higenonagaineko:20190621185655j:plain

延長コードに電球ソケット

これで、いつでも声に答えるスマート電球となりました。

f:id:higenonagaineko:20190621185849j:plain

OK Google 電気をつけて!

めでたし、めでたし。