親がいい年齢になってきたのでIoTで見守りをする

# はじめに
父が亡くなり、母一人をほったらかしにするのも心配なため、5年目にしてようやく見守りを考えることにしました。
また、どうせ見守るなら、市販品ではなく自分で製作することにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/8c03b26d-a0a4-d07f-67c0-f6f82270829a.png)

# 計画
見守るにしても、カメラ等では見られるほう（母）も気分が良くないと考え、以下を候補としました。

- 光センサ
    - カーテンの明け閉め、明かりのON/OFFで見守り
- 人感センサ
    - 人の動きで見守り


結局、人感センサだと目に付く位置に配置する必要があるため、見えないところに置いても大丈夫な光センサを採用することにしました。
センサは簡単に接続できるようにGroveコネクタ搭載品を採用しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/7d0abb32-bc41-6ec8-5403-a8aaa2255f71.png)
また、24時間／365日動作させることから、なんとなくマイコンはRaspberry PiではなくArduinoを採用しました。
さらにクラウド等にデータを送ることを考えて、ESP32開発ボードを採用しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/4771380a-7cb5-7f7d-5673-a244cb29c987.png)
データの保存先は、簡単にグラフ表示できることから[Ambient](https://ambidata.io/)を採用しました。

## 将来の予定
一応、[IFTTT](https://ifttt.com/home)経由でGoogleスプレッドシート（Google Drive上）に書き込めるように準備はしましたが、直近の様子がグラフで見れれば良かったので、結局今回はAmbientを選択しました。
いずれはちゃんとトレンドを把握し、異常検知を行うようにしたいと思っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/797715c8-f5ea-8d57-c3c6-1b1a26509ac9.png)

# コード
プログラムは非常に単純で、一定間隔で光センサから値を取得し、Wi-Fi経由でAmbientに送るようにしました。
唯一、DeepSleepを使っているところがポイントかも。（300秒=5分停止させてみた）
DeepSleepの場合、本当は処理を全部setup()に書くのがお作法のようですが、他のプログラムとの見た目から個人的には気に入らないので、loop()内で少し処理を行っています。

なお、光センサはA0（ADC0、GPIO36）につなぎました。

```c
#include <WiFi.h>
#include "Ambient.h"

int sensorPin = A0;

// Wi-Fi setting
const char* ssid     = "your-ssid";
const char* password = "your-password";

// Ambient setting
unsigned int channelId = 12345; // change your channel id
const char* writeKey = "your-writekey";

void setup() {
  Serial.begin(115200);
  delay(100);

  Serial.print("Attempting to connect to SSID: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    // wait 1 second for re-trying
    delay(1000);
  }

  Serial.print("Connected to ");
  Serial.println(ssid);
}

void loop() {
  // read the value from the sensor:
  int sensorValue = analogRead(sensorPin);
  Serial.println(sensorValue);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  Ambient ambient;
  ambient.begin(channelId, writeKey, &client);

  ambient.set(1, sensorValue);
  ambient.send();
  
  Serial.println("Deep sleep start!");
  esp_sleep_enable_timer_wakeup(300*1000*1000);
  esp_deep_sleep_start();
}
```

# 機器設置～実行（調整）
ESP32開発ボードはブレッドボードに挿し、ジャンパーワイヤー直差しでGroveの光センサとつなぎました。
また、残念ながら実家にWi-Fi環境が無かったため、家に転がっていた古いWi-Fiルータを持ち込みました。
それとESP32を接続させ、目立たないように一式をテレビの裏に設置しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/06037d49-e6ce-9847-c274-c41ae09b95f2.png)

で、実行した結果（Ambientのグラフ表示）がこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/5699cb0f-6c68-ffdd-7b61-c1114ed1bad5.png)

いきなり最大値（4,095）になっていました。
レースのカーテンを閉めており、日の光も当たっていなかったのですが、こんな値に．．．

その後のポイントを、それぞれ解説していきます。

## ①心配になる
しばらく最大値のままになっていたため、正常に動作しているのか心配になり、光センサに布をかぶせてみました。
ちゃんと値が下がり一安心。

## ②出かける～帰宅
夕方、母と一緒に夕飯の買出しに出かけました。その間は、家の中が真っ暗となったと思われます。
急激に値が下がっているのがちょっと心配。

帰宅後明かりをつけましたが、あまり値が上がりませんでした。
テレビの裏は、明かりに対しては暗かった模様。

## ③センサーの位置を調整
これでは明かりがついていない状態と判断できない可能性があるため、センサの設置場所をテレビの前にしました。
一応なるべく目立たないように、手前に物が置かれている裏に配置しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/4ac5fd1b-eba7-999d-d48e-c6cd6492c261.png)

その結果、なかなかいい感じの値になりました。（2,000～2,500が夜間の明かりがついている状態の模様）

## ④寝る
どうやら寝るために明かりを消した模様。
（すでに私は帰宅していて実家にいなかったため、以降詳細は不明）

## ⑤起きる
何かを思い出したようで、起きて明かりをつけた模様。
30分ほど何かをしていた感じ。（電話でもかかってきたのかな？）

## ⑥寝る
再び明かりを消して寝た模様。

# 翌日の様子
翌日はこのような動きとなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/657d6845-718f-aaa0-011c-a417c52b639d.png)
なお、それ以降もほぼ同様の動きとなりました。

## ①起きる
母の話によると、毎日6:30にラジオ体操をするとのことでしたが、その様子はグラフには出ていませんでした。この日はサボったのか？
日が昇り、しばらく経ってからカーテンを開けたと思われます。
センサを設置した部屋が南西向きのため、カーテンを開けてもいきなり最大値になることは無かった模様。

## ②日没～明かり点灯
その後は最大値のまま推移し、夕方になりようやく値が下がり始めました。
真っ暗になったあと、ようやく明かりをつけたようです。
ただ、前日よりも値が低い。
確認したところ、センサの前に物（右側にあった温度計）を置いたことにより、影になっていたとのこと。
センサの位置を動かしてもらい、翌日以降は、ちゃんと前日同様の値になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/e636f38d-ed92-3511-02e1-39aef5397e84.png)

## ③寝る
この日はこの時間に明かりを消し、寝た模様。
その後も途中で目を覚ますことも無かったようです。

# ベストグラフ
現時点で一番きれいなグラフがコレ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/82cb84a7-d18a-7ef3-9be1-dc2645735c66.png)

# 感想
夜の明かりに関してはそれなりに状況が把握できているが、日中はまるでわからない状態でした。
明かりを消さない異常は発見できますが、カーテンを開けない異常は時間によっては発見できないかも。

このセンサには太陽光（直接ではないけど）は強すぎるようなので、できれば別のセンサで計測したほうが良さそう。
太陽光って偉大だなと、改めて気づかせてくれた感じ（笑）

なお、天気の悪い日の様子（日中）はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/e057e3ad-99cf-2e40-b2cb-607e8b60dc4a.png)

あと、今はブレッドボードむき出しで埃っぽいところに置いているので、箱に入れたい。

# おまけ
母に確認したところ、「カメラを付けても、別に気にならない」とのことでした。
そっちにすればよかったか？