ESP32からIFTTTを使ってLINE Notifyで通知を送ってみた

秋月電子通商で売っている[ESP32-DevKitC ESP-WROOM-32開発ボード](http://akizukidenshi.com/catalog/g/gM-11819/)でHTTPS通信ができたので、IFTTTを使ってLINEに通知を送ってみました。

今回はLINEでの通知に、LINE BusinessのMessaging APIとは別の、**LINE Notify**を利用します。
LINE Notifyは片方向の通知しか利用できず、LINEのユーザーアイコンのようなものも設定できませんが、通知先にトークのグループ、または「1:1でLINE Notifyから通知を受け取る」を設定するだけでお手軽に利用することができます。

# 動作環境
## ESP32側
- [ESP32-DevKitC ESP-WROOM-32開発ボード](http://akizukidenshi.com/catalog/g/gM-11819/)
    - Arduino IDEを利用
        - [MacでESP32のLチカ（Arduino IDE版）](http://qiita.com/naohiro2g/items/b8baa3f0e1a880ae9d0a)を参考にインストール
            - 秋月で売られているESP32-DevKitC ESP-WROOM-32開発ボードでは書き込み時のボタン操作は不要でした
    - WiFi(WPA2-PSK, 2.4GHz)の接続先
        - ルーター(AtermWG1800HP2)
            - ESP32との距離は4mくらい
        - iPhone 6s (テザリング)
            - テザリングをオンオフしたりしても再接続するようにした
    - LED (使用ピン: IO2, GND)
        - 適当な抵抗も入れておいてください
    - [PIRモーションセンサー](https://www.switch-science.com/catalog/2145/) (使用ピン: IO5, GND, 5V)
        - 検出範囲内で動きがあると出力が2秒程度Highになる

<img width="500" src="https://qiita-image-store.s3.amazonaws.com/0/137045/976c0455-508e-b3bb-6df9-ad1a046c7dbe.jpeg">

## IFTTT側
- Maker Channel + LINE (Notify)
    - 例: If maker Event "test", then send message (works with LINE)<br><img width="312" src="https://qiita-image-store.s3.amazonaws.com/0/137045/68c23534-b8f4-5bd0-e79e-f4c424e550c2.png">
    - 通知先を「1:1でLINE Notifyから通知を受け取る」に設定

# 製作したスケッチ
https://github.com/mascii/WiFiClientSecure-IFTTT

# スケッチの設定
`config.h` には、SSIDとWPAキー、IFTTTのMaker ChannelのEventとKeyを設定します。

`certificate.h` には、 `maker.ifttt.com` の証明書を予め設定しておきます。
リポジトリ内の `certificate.h` には　`maker.ifttt.com` の証明書がセットされていますが、　`maker.ifttt.com` 以外にアクセスしたい方は、以下のFirefoxのスクリーンショットを参考にしてください:

<img width="260" src="https://qiita-image-store.s3.amazonaws.com/0/137045/a55f610c-d742-3600-6916-523ddccbed17.png">
鍵マークをクリック

<img width="333" src="https://qiita-image-store.s3.amazonaws.com/0/137045/8404bb6e-a7df-c850-4ab8-f400ef42f872.png">
詳細を表示

<img width="500" src="https://qiita-image-store.s3.amazonaws.com/0/137045/cf84fdb4-6290-155b-2e88-683d9cb74e15.png">
セキュリティ→証明書を表示...

<img width="500" src="https://qiita-image-store.s3.amazonaws.com/0/137045/40adf797-f504-3fd7-b595-3013e50c2946.png">
詳細で一番上の階層の証明書を書き出し、 `bash convcert.sh (証明書ファイル)` で `certificate.h` を作成

# 説明
## スケッチ
このスケッチはスケッチの例の WiFiClientSecure を参考にしています。

PIRモーションセンサーがON/OFFを繰り返すため、 `loop` 関数ではセンサー反応後、約10秒はセンサーの反応を無視するようにしています。あまりスケッチを変更することなく、タクトスイッチ等にも対応できるかと思います。
LEDはPIRモーションセンサーが反応した際などに点灯させたり、エラー発生時に点滅させたりしています。

## LINE Notify
うまく動作すると、このような感じでLINEに通知が来ます。<br><img width="375" src="https://qiita-image-store.s3.amazonaws.com/0/137045/abfcac53-9d5a-266f-1617-7e6aaa70aae3.png">
今回は活用していませんが、ESP32側で取得した値をLINEに通知することもできます。

# 今回やりたかったけど出来なかったこと
[Google Apps Script](https://www.google.com/script/start/)という、JavaScriptを書いてAPIを作ることができるサーバーサイドスクリプト環境をESP32から利用してみようと思ったのですが、APIにアクセスしようとするとリダイレクトがあり、うまくいきませんでした。
調べてみると[HTTPSRedirect](https://github.com/electronicsguy/ESP8266/tree/master/HTTPSRedirect)というWiFiClientSecureを拡張してリダイレクトに対応したライブラリもあるようなのですが、うまく使うことができませんでした。

Google Apps ScriptはHTTPSも必須なのですが、実はIFTTTのMaker ChannelはHTTPSじゃなくても良いので、今回はあまりHTTPSにする意味はなかったかもです...
実際、 `#include <WiFiClientSecure.h>` を `#include <WiFiClient.h>` に変更、 `443` 番を `80` 番に変更して証明書関連をコメントアウトしても問題なく動いてしまいます。
IFTTTのMaker Channel以外でHTTPSを利用したい方がいらっしゃったら、この情報を活用していただけたらと思います。

# ESP32を触ってみて
- 2017年4月現在、ESP8266に比べると**情報がとにかく少ない**のが実情です
    - ESP8266で十分な場合が多いと思います
- 正直なところ、Arduino IDEでの開発ではESP32の性能をうまく引き出せないような気がします
    - とはいえ、SRAMの容量が倍増している恩恵は受けられる
- WiFiはRaspberry Pi 3のオンボードWiFiと違い、ちゃんと飛ぶ感じでした
- [ESP32-DevKitC ESP-WROOM-32開発ボード](http://akizukidenshi.com/catalog/g/gM-11819/)を買われる方は、ブレッドボードの幅に注意
    - [サンハヤト SAD-101 ニューブレッドボード](https://www.amazon.co.jp/dp/B00DSKCS68)が良さそうです