ESP8266と明るさセンサーでトイレ監視

## はじめに

会社の男子トイレは個室１つ。

作業部屋を出て廊下を渡った先にトイレがそこにある。

集中して作業をしている最中にトイレへ行きたくなって使用中だったときのイラっと感をなくすためにトイレを監視するシステムをつくりました。


## やったこと
(個室なので)照度センサーでトイレを使用中であるかを検知してESP-WROOM-02で[IFTTT](https://ifttt.com/)へメール通知。

[IFTTT](https://ifttt.com/)からTwitterへトイレ監視情報をツイートします。

最終的にはトイレの使用状況に変化があればツイートするようにします。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/32122/ba6f6216-342c-9a37-4140-3866788f3854.png)



## 用意するもの
- ESP-WROOM-02開発ボード（[秋月電子](http://akizukidenshi.com/catalog/default.aspx)）
- 光センサーモジュール DFR0026（[秋月電子](http://akizukidenshi.com/catalog/default.aspx)）
- microUSBケーブル
- ブレッドボードとかジャンパー線とかはんだごてセット

## 工程

### ○電子工作編
[ESP-WROOM-02のピンアウト](http://www.quitsq.com/download/develop/ESP-WROOM-02_pinout_diagram.pdf)と[DFR0026の説明書](https://www.dfrobot.com/wiki/index.php/DFRobot_Ambient_Light_Sensor_SKU:DFR0026)をにらめっこして配線します。

Deep-sleepから復帰するためにGPIO16ピンとRSTピンを接続することを忘れずに。

ESP-WROOM-02でアナログデータを取得する（AnalogRead()を使用する）際はTOUTピンを使用します。しかしTOUTピンは電圧が1.0vまでしか扱えません。

ESP-WROOM-02の電源電圧は3.3vで、そのままTOUTピンに繋げるとボードが壊れる可能性があります。そこで分圧をして3.3Vから1.0Vに電圧を下げます。


なんとか配線したのが下記の状態。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/32122/49e3ae00-72f1-4d25-cbc4-6170e3ee491e.png)

### ○Arduino編

ESP-WROOM-02からGmailへ送信する箇所は[ここ](http://www.instructables.com/id/ESP8266-GMail-Sender/)からソースをダウンロード。

ソースを一部抜粋

```toilet_monitor.ino
void loop() {

  int illuminance;

  illuminance = analogRead(A0);

  int diff = abs(rtcData.lastIlluminance -  (int)illuminance);
 
  if(diff > 300) { // 照度300luxより大きな差がある場合を検出
          ：
    // send mail
    Gsender *gsender = Gsender::Instance();
    String subject = "";

    if((int)illuminance > 300) {
        subject = "男子トイレ使用中";
    }
    else {
        subject = "男子トイレ空いてます！";
    }
    
    if(gsender->Subject(subject)->Send("trigger@applet.ifttt.com", "時刻：" + String(elem.getString("datetime")) + "<br />照度：" + String(illuminance))) {
      Serial.println("Message send.");
    } else {
      Serial.print("Error sending message: ");
      Serial.println(gsender->getError());
    }
  }
          ：
}
```

```Gsender.h
class Gsender
{
    protected:
        Gsender();
    private:
        const int SMTP_PORT = 465;
        const char* SMTP_SERVER = "smtp.gmail.com";
        const char* EMAILBASE64_LOGIN = "<Gメールアカウント base64>";
        const char* EMAILBASE64_PASSWORD = "<Gメールパスワード base64>";
        const char* FROM = "<Gメールアドレス>";
        
        
};
```

今回作ったソースは[こちら](https://github.com/hasudon7171/toilet_monitor)

### ○サービス連携

Arduinoからメール送信して、メール受信をトリガーにツイートします。

**ESP-WROOM-02(Arduino) -> Gmail -> IFTTT -> Twitter**

ESP-WROOM-02からメール送信するにはSMTPサーバに接続してメールを送信しますが、Gメールアカウントで「安全性の低いアプリがアクセスするのを許可する」設定にしないと認証で失敗します。

[IFTTT](https://ifttt.com/) でアカウントを作成後、画面上部メニュー[My Applets] -> [New Applet]を選択。

Ifの次の[+]から[Email] -> [Send IFTTT any email]を選択。
thenの次の[+]から[Twitter] -> [Post a tweet]を選択。
Twitterのアカウントと連携して、Tweet textを下記のようにして[Create action]でAppletを作成します。
>\<pre>
>{{Subject}}
>{{BodyHTML}}
>\</pre>

### ○完成品
100均で買った箱に入れていざトイレへ。
![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/32122/04a68558-d4ec-db1c-38b4-dac1b9a12462.png)

見た目は雑ですが明るさに変化があるとツイートするトイレ監視のできあがり。

## 参考
http://arduino-esp8266.readthedocs.io/en/latest/libraries.html?highlight=TOUT
https://www.dfrobot.com/wiki/index.php/DFRobot_Ambient_Light_Sensor_SKU:DFR0026
http://qiita.com/azusa9/items/65a5c3772c41631b5ca1
http://qiita.com/ryokai/items/9b0c56616b4550eb05f1
http://www.instructables.com/id/ESP8266-GMail-Sender/
http://tech.thejoestory.com/2016/10/esp8266-gmail-send-email.html