はじめに
中国Broadlink社のRM miniという製品があります。赤外線リモコンを学習しておいて、スマホやGoogle Homeからのアクションで、リモコン操作が行えるデバイスです。
Google HomeとRM miniを組み合わせると、いままでの家電をそのままに(赤外線リモコンがついている家電に限られますが)スマートホーム化できる、ナウい仕組みが実現するのです!
「ねえグーグル、電気をつけて」で、家の中の照明を一斉に点灯・消灯するのはとても便利で未来的です。しかし…最初のうちは楽しいのですが、しばらくすると、しゃべるよりスイッチを押したほうがはるかに楽…。
そこで、IFTTTのイベントを発生させる、専用のボタンをESP-WROOM-02で作ってみました。
※(2020/08/01追記)記事はESP-WROOM-02(ESP8266)で作っていますが、ソースコードはESP32でも使えるように少し直しました(#defineだらけで見にくくなってしまいましたが…)。
RM miniはIFTTTでコントロールできる。
RM miniシリーズは、密かにクラウド側のバージョンアップを続けており、いつの間にかIFTTTにも対応するようになりました。そのためには、新しいAndroidアプリ「BroadLink - Universal Remote」に乗り換える必要があります。ihcを使っていた方は、そのまま設定も引き継がれます。
設定したら、https://ifttt.com/broadlink で使えるようになります。サンプルには、「日の出になったら実行する」などあって、これだけでも便利に活用できそうです。
このAndroidアプリで、RMminiの赤外線リモコンの設定を行います。
IFTTTのWebhookを使う。
IFTTTには、Webhook機能があります。これを使うと、httpのPOSTをイベントにすることができます。ESP-WROOM-02を使って、ボタンを押したらPOSTするようにすれば、ボタンを押したらIFTTT経由でRM miniにイベントを送ることができます。
Webhookのページで「Setting」をクリックすれば、APIキーを取得できるので、これをコピーしておきます。
ESP-WROOM-02でボタンを押したらIFTTTにイベントを送信する箱を作る。
これを読んでいる方は、引き出しの中に昔買ったESP-WROOM-02が入っていると思いますので、これを使いましょう。ボタンは、ホームセンターに売っている呼び鈴用のプッシュスイッチを使ってみました。
回路図は以下のような感じ。最近はお安い評価ボードが容易に手に入るので、その場合はスイッチ(SW1~SW3)と動作確認用のLEDを配線するだけです。
ソースコードを手元の環境に合わせて修正する。
ソースは https://github.com/tonasuzuki/ifttt-btn に置いておきましたので、使ってください。以下を手元の環境に合わせて修正します。
※(2020/08/01追記)記事はESP-WROOM-02(ESP8266)で作っていますが、ソースコードはESP32でも使えるように少し直しました。
-
IFTTTのWebhook maker keyを入れる
#define IFTTT_MAKER_KEY "ここにAPI keyを入れる"
-
家の無線LANのSSIDとパスワードを書く
const char ssid[] = "ここにSSIDを入れる";
const char pass[] = "ここにpasswordを入れる";
-
ボタンの数と、ボタンを接続したGPIO番号を書く(上記回路図のまま接続したならそのまま)
#define BUTTON_NUM 3 // ←ボタンの数
int nButtonPins[] = {14, 12, 13}; //←GPIO番号を並べる
-
動作確認用のLEDのGPIO番号を書く。(上記回路図のまま接続したならそのまま)
#define LED_PIN 5
-
Light sleepまでの時間を設定する。
#define BUTTON_SLEEP_TIME (300*1000) //←5分後にLight sleep
#define BUTTON_SLEEP_TIME 0 //←Light sleepしない場合
- 最後にボタンを押したあと、指定ミリ秒経過後にLight sleepする時間です。Light sleep中は消費電力が1mAくらいになるらしいので、電池で駆動したい場合などは設定するといいでしょう。ただし、ボタンを押したら無線LANに接続するのに数秒かかるので、ちょっとイライラします(笑)。Light sleepしなくないならば、0を設定します。
接続したボタンを押すと、IFTTTのwebhookに「esp-buttons1」のようなイベントが送信されます。(イベント名の最後の「1」は、押したボタンによって変わります)。
なお、送信はhttpsではなくてhttpです。(httpsのお手軽な実装方法、よくわからないです…)
IFTTTでトリガーに合わせた処理内容を設定する。
あとは、IFTTTのwebhookイベントに、Broadlinkのアクションを設定します。
なお、アクションに設定できるリモコン操作は、1つだけです。ボタンを押したら、複数の照明をONにするなど、一つのイベントで、複数のアクションを実行させたい場合は、同じイベント名でアクションを複数作ります。
最後に
ボタンを押したら、IFTTTにイベントを送信するだけの箱を作ってみました。上記事例では照明をつけたりしていますが、IFTTTのイベントを発生させるだけなので、例えば雨が降ったらLINEでメッセージを送るなど、応用が効くとか思います。みなさんも試してみてください。