Wi-Fi(wifi)モジュールESP8266/ESP32開発ボードを使ってAC100V含む赤外線リモコン対応家電を操作する、いわゆるスマートリモコンの自作や非IRリモコン家電を無線で遠隔操作できる、いわゆるスマートコンセント・スマートプラグを自作してみるシリーズ。
ESP8266/ESP-WROOM-32チップ単体やピッチ変換モジュールとの併用はより省スペースではありますが、ESP8266/ESP32開発ボードを使う方が、何かと手間もなく、無難です。
今回は、某社製空気清浄機用のスマートリモコンを作りました。
当初、パソコンやタブレット、スマホのブラウザから、これら家電を遠隔操作することを想定していましたが、今となっては、自身は、自作スマートスピーカーやメインPCにも搭載の自作スマートスピーカー機能を使って音声で操作するのがメインとなっています。
よってブラウザからの無線操作のみならず、ラズパイスマートスピーカーで空気清浄機を音声操作可能にします。
空気清浄機については、電源、風量、タイマー、ターボの4つの操作を可能にしようと思います。
スマートリモコンを作るにあたっては、全ては「操作(ボタン・メニュー)に対して、どんな並びの赤外線信号を送信するか」であり、基本的に、これら以外の違いはなく、家電による差もない為、ハードウェアもソフトウェアも共通。
よって作り方の詳細は、冒頭の自作スマートリモコンのリンク先に譲ります。
事前準備としては、markszabo/IRremoteESP8266などESP8266用の任意のIR信号送受信ライブラリを使い、ESP8266で送受信回路を作って機能させたい家電のリモコンから受信機に信号を送信、これを解析して(読み取って)おき、操作ボタンと信号のリストを作っておきます。
尚、今回の家電は空気清浄機ですが、IRremoteESP8266のIRrecvDump/IRrecvDumpV2では(信号方式としては)、NECだったので、sendNEC()関数を使いました。
というわけでライブラリには、IRremoteESP8266を使わせて頂き、サンプルスケッチIRrecvDumpV2とこれに対応する受信回路を作って確認すると当該空気清浄機は、NECタイプ(sendNEC())、同じくサンプルスケッチIRsendDemoによるとsendNECの引数はunsigned int 16バイトである模様、よってシリアルモニタに表示された各ボタン用の受信内容の内、uint16_tの値を使いました。
自身もそうしましたが、この手のESP8266のスケッチ・プログラム概要としては、Webサーバを立てSPIFFSによりESP8266のメモリ上にトップページに各種ボタンを配置した操作画面となるHTMLファイルを置き、他に操作ごとのページ(URLだけあればよくHTMLファイルは不要)を作り、そこにアクセスするとそれぞれの操作信号を送信するという作りにするのが一般的でしょう。
ESP8266によるアクセスポイントは、仮にESPAIRCLEANERとしたので無線AP一覧にもこれが出てくることになります。
ただ、家電の数だけSOFT_APを立てると1軒でも結構な数になり、帯域を消費してしまうとしたら、微妙かなと...。
mDNSは、仮にespaircleanerとしたのでespaircleaner.localでPCブラウザなどからアクセスでき、SPIFFSでHTMLファイルをアップロードしていれば、例えば、操作画面が表示され、espaircleaner.local/powerにアクセスすると個別に電源ON/OFF操作できるようになっています。
[2019/04/30 訂正・追記:]
勘違い...、APモードにする(Soft_APを立てる)必要はありませんでした。
Android対策として遅まきながら固定IP対応し、アップロードしただけなのに、ESP32で実装していたこのリモコン付き空気清浄機、なんと信号出力されませんでした。
IRremoteESP8266の仕様変更なのか!?irsend.sendNEC()スタイルだと信号出力されないようで、ESP32で赤外線通信ができるライブラリ「IRremoteESP8266」の使い方に倣い、irsend.send()スタイルにすることで解決しました。
irsend.send()引数用の宣言とsetup(){}内でirsend.begin();、必要数irsend.sendNEC()に替えてirsend.send()行が必要でした。
尚、リンク先にあるIRutils.hは内部で読み込まれているのか、送信には不要なのか、明示する必要はありませんでした。
あ、irsend.sendNEC()で信号出力できなかったのは、IP固定ロジック入れる際、setup(){}内のirsend.begin();を誤って消してしまったからの可能性大!?
SPIFFSを利用する場合、例えば、メインメニューは、メイン操作パネル、エアコンの場合、自作スマートリモコンで東芝エアコン大清快を遠隔操作の例のようになります。
ESP8266とリモコン参照。
空気清浄機操作用自作リモコンの場合、設置位置には注意が必要です。
赤外線LEDにもよるでしょうし、LED先端付近において光線が拡散しない工夫の有無にもよるでしょうが、自身が今回使ったものは、指向性が高い(向きが重要な)ものであり、赤外線LEDは、ブレッドボードに挿した状態で使用しました。
よってうまく受光できる位置に自作リモコンをセットしておく必要があります。