sidetech

(元)インフラエンジニアの寄り道メモ。

IR(赤外線通信)-スマフォでリモコン操作

最近はスマフォにリモコンアプリでコントロールなんて普通な感じですよね。

昔は複数のリモコンを1つに集約なんていう学習リモコンがすげぇって思ったけど、最近のAV機器は何故かスマフォリモコンアプリがあったりします。

 

そして今時な話でいうと、アプリじゃなくてボイスでコントロールの時代ですね。

Google HomeやらAmazon Alexaやらで家電をコントロールしちゃう時代。

エアコンも音声でコントロールしたりね。

いちいちリモコン探さなくていいし便利だね。でも何故か対応機種やら色々と制限もあって、「うちの対応してないやん(涙)」っていうオチになったりさ。

Alexaのために対応機器に入れ替えるの?(汗)

 

ま、そんな思いを感じながら、まずは赤外線の世界をみてから考えるべさ・・・と思った私は、最近お気に入りのショップからとあるものを入手。

 

f:id:hunter1014:20180527012359j:plain

こやつはですね・・・

[スイッチサイエンス] ESPr® IR 赤外線リモコン

[スイッチサイエンス] ESPr® IR 赤外線リモコン

 

こんなやつです。

もうね、制外線の受信と送信とESP-WROOM-02が搭載されている。ブレッドボードも使う必要なし。お手軽に赤外線リモコンを味わえる品物です。

サンプルプログラムやサンプルスケッチであらかたのことができそうだったので、電子が分からなくてもプログラムが分からなくても、ほぼそのまま動いちゃう。

f:id:hunter1014:20180527012901j:plain

てことで、一応色々なリモコンを適当にスキャンしまくるです。

主役は赤枠のリモコンです。他のはどんなのがとれるのか参考用です。

 

 

ESP-IR – スイッチサイエンス

上記の説明サイトを参考にしたのですが、赤外線受信用プログラムは、「IRrecvDumpV2」を使いました。

なんでかというと・・・・「DEPRECATED: Please use IRrecvDumpV2.ino instead!」とメッセージがでたからです(^^;

エアコンのDAIKINのリモコンはかなり情報量を持っていて・・・解析すると・・・

 

Encoding : DAIKIN
Code : 11DA27004200005411DA270000393400AF000006600000C18000D5 (216 bits)
Mesg Desc.: Power: On, Mode: 3 (COOL), Temp: 26C, Fan: 10 (AUTO), Powerful: Off, Quiet: Off, Sensor: Off, Eye: On, Mold: Off, Swing (Horizontal): Off, Swing (Vertical): On, Current Time: 0:00, On Time: Off, Off Time: Off

 

と出ました。これ運転/停止ボタンなのですが、いっぺんに色々な情報を飛ばしているんですね。

ほかには・・・

Encoding : NEC
Code : E730E11E (32 bits)

と解析できたものは・・・なんと東芝のリモコン。これはリモコンの信号パターンが同じでデコードでそう解釈したみたいですね。リモコンの世界には〇〇方式みたいにある程度の流派に分かれるようです。

シャープのリモコンはパナソニックとデコードされました。

 

そして肝心要なPanasonicのリモコンは・・・・・「UNKNOWN」とでました(涙)

Encoding : UNKNOWN
Code : F6B92168 (42 bits)

国内で作られてないんでしょうね・・・。

「IRrecvDumpV2」を使うと、「Raw Timing[**]」というのと、それをもとに、

「uint16_t rawData[**] = {3590, 1634, 540, 330, 540, 330, 536, 1200, 540, 1198, 540,」

というようなデータを吐いてくれます。

何かしら、ベンダーコードパターンにマッチしていたらよかったんですが、マッチしなかった場合は、このrawDataを使うことになります。

何回かボタンを押して安定して同じ値がとれているかどうか確かめてデータを採取しましょう。

 

で、今回は「照明ON・照明OFF・常夜灯」という機能にして動作を確かめます。

スイッチサイエンスさんのサンプルプログラムの以下に当たる部分を変更します。

void setup()の前に以下をぶち込みます。

 

===

uint16_t rawData1[83] = {3590, 1634, 540, 330,~382, 488}; // UNKNOWN F6B92168
uint16_t rawData2[83] = {3594, 1634, 540, 332,~332, 536}; // UNKNOWN 1B9C2A92
uint16_t rawData3[83] = {3590, 1638, 542, 328,~334, 536}; // UNKNOWN A2768C92
===

こんな感じで・・・

んでvoid handleRoot()内のボタンにあたる3か所ですね・・・。

===
if(server.arg(0).indexOf("PowerON") != -1){
Serial.println("PowerON");
irsend.sendRaw(rawData1, 83, 38);
}
else if(server.arg(0).indexOf("PowerOFF") != -1){
Serial.println("PowerOFF");
irsend.sendRaw(rawData2, 83, 38);
}
else if(server.arg(0).indexOf("Low") != -1){
Serial.println("Low");
irsend.sendRaw(rawData3, 83, 38);
}

===

こんな感じで。sendRawの使い方は、上記の雰囲気で察してくださいw

最後の38は赤外線周波数の38Hzの意味です。

f:id:hunter1014:20180527015043p:plain

で、表示部はこんな感じにしておいて、サンプル通りに動くかな?とやってみた所。

 

ばっちりとスマフォから照明のコントロールが出来ました!

動作テストはこれで完璧です。

 

ここまでくれば、あとはヤリタイことはわかってきてますよね?

 

うーん、これ一部屋に1基置いておきたいな。。。

 

今回はスケッチとか書き込みとか説明はしょりましたが、USBシリアルで書き込みしてそこから動作チェックしーの・・・を繰り返したので、これをobnizとか使うと、ずっとWEBコーディングで済むんで楽かなぁ?とか考えましたが、ライブラリとかどうするねん・・・という課題もあるので(^^;

て所で今日は就寝です。。。ZZZzzz...