お手軽に出来合いのものを組み合わせて赤外線リモコン操作する(Google Homeもあるよ!)

この記事はCPS Lab Advent Calenderの18日目の記事です。 17日目は「ゲームパッドをMIDIコントローラーとして使おうとした」でした。

こんにちは、赤外線リモコンの機器ってなかなか多いですよね。こっちはHTC Viveを設置してしまったものだからベースステーションから出る赤外線で家中のリモコンの危機です。

さて、赤外線リモコンで操作できる機器は例えばどんなものがあるでしょう。まずエアコン、ちょっと高いPCのディスプレイ、LEDシーリングライト……

色々あるのですが、今回はLEDシーリングライトを操作できるようにしました。しかも強い先人たちの築き上げたリソースをフル活用したら、殆どコードを書かずに実現できてしまいました。(しかしお手軽ではあるものの微妙な点もたくさん有りますのであしからず)

使ったもの

ESP8266-HTTP-IR-Blaster

実際の赤外線を発光する部分はESP-WROOM-02に接続した赤外線LEDから行います。 雑にユニバーサル基板上に実装しました。汚すぎてお見せできません…… まず最初の先人の成果物をまるっと利用させて頂くポイントがこちら

github.com

このスケッチでは赤外線受光素子からの赤外線パターンの記録と指定したパターンの発光を無線LAN経由から行うことができます。

ここまでcloneしてきて書き込むだけ。LAN内からは自由自在に赤外線リモコンとして操作できるようになりました。さて、次はどうしましょう?

timer(systemd)

最初に一番やりたかったことである決まった時間に照明をつけたり消したりをできるようにしました。 無駄に大掛かりだと自分でもおもっているのですが、自宅で動いているサーバのtimerタスクでESP-WROOM-02に決まった時間にHTTPリクエストを送るようにしました。 これによって、朝目が覚める時には明るい部屋になっている上に、そろそろ寝ないといけない時間帯には強制的に照明が消えます。 悩みの種であった睡眠リズムが若干改善するかもしれません。

Google Home

さて、その後Google Homeを購入したので、こいつからも操作できたら楽しいよねと思うようになりました。 しかし、Google Home経由で操作するにはDialogFlowにしろIFTTTにしろいっぺん外に出てから戻ってくるような通信経路になります。 今回はお手軽に何も考えず適当にやりたいことを実現するのが趣旨なので、もっといい方法あるんじゃないかとか思いつつ自宅IPにDDNSのアドレスを設定し自宅鯖にnginxを立ててLet's Encryptで証明書を取得して、nginxで外からの通信を受けることにしました。

とりあえずSSLBASIC認証を設定して(IFTTTだとBASIC認証しか使えなかった気が)、IFTTTのWebHookでそのまま自宅に返ってくるような感じにしました。

反応しない

冒頭でも挙げたのですが、HTC Viveが起動している間はベースステーションが部屋中に赤外線を照射するため、赤外線リモコンが一切使えなくなります。 何度もこれで照明のコントロールができずあれーおかしいなーとか言いながら数分間立ち尽くしてました。終了すれば普通に使えるし諦めました。

まとめ

とりあえずお手軽に照明をコントロールしてみましたが、ぶっちゃけ融通が聞かないと感じることも多くこの用途ならラズパイかなんかで自前実装するほうが色々コンパクトにできて楽かもしれません。

何も考えずにググるだけでやるとこうなるよ、という例ということで見ていただけると幸いです。でも何気に実用的に仕上がったのでやって見る価値はあると思いました。