ESPHomeでのNECフォーマットの赤外線リモコン制御

赤外線(IR)リモコン制御をESPHomeを使ったデバイスで行う際に、IRrecvDemoV3 で解析したデータをどのように記述すべきかで手間取ったので、記録を残しておく。

IRrecvDemoV3

手元にあるリモコンの電源をM5Stack Atom Lite で制御しようとして、まず、リモコンの赤外線の信号を解析した。解析には、よく使われているような IRremoteESP8266  ( https://github.com/crankyoldgit/IRremoteESP8266 ) ライブラリを使うことにした。

IRremoteESP8266に含まれる IRrecvDumpV3 を使って赤外線信号を解析した。

電源ボタンの解析結果

解析をしたところ次の結果が得られた。NECフォーマットであることが解析からわかった。

Timestamp : 000287.662  
Library   : v2.8.6  
   
Protocol  : NEC  
Code      : 0x1FE817E (32 Bits)  
uint16_t rawData[71] = {9050, 4502,  588, 580,  560, 578,  560, 578,  562, 576,  562, 576,  562, 576,  562, 576,  562, 1690,  562, 1688,  562, 1692,  560, 1690,  564, 1690,  560, 1692,  560, 1668,  584, 1692,  560, 576,  560, 1668,  586, 578,  562, 578,  558, 580,  560, 578,  560, 580,  560, 578,  562, 1668,  582, 578,  560, 1692,  560, 1696,  556, 1688,  564, 1690,  560, 1692,  560, 1692,  560, 578,  560, 39982,  9056, 2274,  562};  // NEC 1FE817E  
uint32_t address = 0x80;  
uint32_t command = 0x81;  
uint64_t data = 0x1FE817E;

ESPhome の transmit_necのパラメータ

NECフォーマットであることが解析からわかったので、ESPHome では、remote_transmitter.transmit_nec を利用すればよいことがわかった。

しかし、ここからaddress:、 command: にどのように指定すべきかに試行錯誤と時間を要した。

結果的には次のように指定すればよかった。

      - remote_transmitter.transmit_nec:
          address: 0x7F80 # デバイス (~0x80<<8 | 0x80)
          command: 0x7E81 # 電源ボタン (~0x81<<8 | 0x81)

アドレス、コマンドをそれぞれ1バイトの a, c とすると address: には ((~a<<8) | a)、command: には ((~c<<8)|c)を指定すればよいことがわかった。

上記の電源ボタンの場合には、uint32_t address = 0x80; uint32_t command = 0x81; であることから a=0x80、c=0x81 として上記のように指定すればよいことになる。