見出し画像

M5StickCでちゃんと動く赤外線リモコンを作る


M5StickCには赤外線LEDがついています。これは「リモコン作ってください」って言っているようなものです。検索するといろいろ見つかるのですが、どの方法が一番良いのかと、M5Stack, Arduino, ESP32あたりでのリモコン信号の送受信の方法を探した記録です。いいのがありました。

検索してはじめに見つかったもの。http://sasapea.mydns.jp/2019/06/28/m5stickc-ir/ 連打したりするとめちゃくちゃな出力になりました。だめぽい。

https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/rmt.html ESP32のAPIのRMTを使う方法。https://lang-ship.com/blog/?p=732 にあるスケッチで赤外線ON/OFF時間のRAWデータをきれいに取れました。

receive_data(size:52) :
2479 0 547 1
657 0 546 1
1258 0 546 1
657 0 546 1
657 0 546 1
1259 0 546 1
656 0 547 1
657 0 546 1
1260 0 544 1
658 0 545 1
659 0 545 1
657 0 546 1
658 0 0 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1
32510 1 32510 1

でもここから各社のコードにデコードしなきゃなりません。http://elm-chan.org/fsw/irctrl/00index.html http://elm-chan.org/docs/ir_format.html これはかなりしっかりエンコード・デコードできます。昔Arduinoで使ったことがあるので実績ありです。これを移植しようかと思いましたが、さすがに面倒くさいです。

RMTで取ったON/OFF時間のデータからデコードだけしてくれるライブラリはないか?と探すと、 https://github.com/z3t0/Arduino-IRremote これはデコード処理だけで使うことができそうでした。Arduino用でメジャーっぽいのですが、更新が古い。ESP32も対応しているが、送信できない。海外のリモコンも含めて幅広く対応しているぽいので将来性も◎。

そして最後、Arduino IDEのライブラリの検索で「remote esp32」で検索して見つかったIRremoteESP8266


上にあったArduino-IRremoteを元にしているようでESP*に絞っているものみたい。更新も最近。ライブラリをインストールしてサンプルスケッチのPIN番号を変えただけですんなりON/OFFのRAWデータとパース後のバイナリデータが取れました。




rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
co0x0
IRrecvDumpV2 is now running and waiting for IR input on Pin 33
Timestamp : 000079.089
Library   : v2.6.4

Encoding  : SONY
Code      : 490 (12 bits)
Raw Timing[77]:
  +  2434, -   566,    +   636, -   566,    +  1236, -   566,    +   636, -   564, 
  +   638, -   566,    +  1238, -   566,    +   636, -   566,    +   636, -   566, 
  +  1238, -   566,    +   636, -   566,    +   636, -   566,    +   636, -   566, 
  +   636, - 26392,    +  2458, -   542,    +   660, -   568,    +  1236, -   566, 
  +   636, -   564,    +   638, -   566,    +  1238, -   564,    +   638, -   566, 
  +   636, -   566,    +  1236, -   566,    +   636, -   564,    +   636, -   566, 
  +   636, -   566,    +   636, - 26316,    +  2458, -   566,    +   636, -   566, 
  +  1238, -   566,    +   636, -   566,    +   636, -   566,    +  1238, -   566, 
  +   636, -   566,    +   636, -   566,    +  1236, -   566,    +   636, -   566, 
  +   636, -   568,    +   634, -   566,    +   636

uint16_t rawData[77] = {2434, 566,  636, 566,  1236, 566,  636, 564,  638, 566,  1238, 566,  636, 566,  636, 566,  1238, 566,  636, 566,  636, 566,  636, 566,  636, 26392,  2458, 542,  660, 568,  1236, 566,  636, 564,  638, 566,  1238, 564,  638, 566,  636, 566,  1236, 566,  636, 564,  636, 566,  636, 566,  636, 26316,  2458, 566,  636, 566,  1238, 566,  636, 566,  636, 566,  1238, 566,  636, 566,  636, 566,  1236, 566,  636, 566,  636, 568,  634, 566,  636};  // SONY 490
uint32_t address = 0x1;
uint32_t command = 0x12;
uint64_t data = 0x490;


Timestamp : 000080.627
Library   : v2.6.4

Encoding  : SONY
Code      : C90 (12 bits)
Raw Timing[77]:
  +  2460, -   566,    +  1238, -   566,    +  1238, -   566,    +   636, -   566, 
  +   638, -   564,    +  1238, -   564,    +   638, -   566,    +   636, -   566, 
  +  1238, -   566,    +   636, -   566,    +   636, -   566,    +   638, -   564, 
  +   638, - 25812,    +  2434, -   566,    +  1238, -   566,    +  1238, -   564, 
  +   636, -   542,    +   636, -   566,    +  1242, -   562,    +   636, -   566, 
  +   638, -   564,    +  1240, -   566,    +   636, -   566,    +   636, -   566, 
  +   636, -   566,    +   636, - 25766,    +  2458, -   566,    +  1238, -   566, 
  +  1238, -   566,    +   636, -   566,    +   638, -   566,    +  1238, -   566, 
  +   636, -   566,    +   636, -   566,    +  1236, -   566,    +   636, -   564, 
  +   638, -   566,    +   636, -   566,    +   636

uint16_t rawData[77] = {2460, 566,  1238, 566,  1238, 566,  636, 566,  638, 564,  1238, 564,  638, 566,  636, 566,  1238, 566,  636, 566,  636, 566,  638, 564,  638, 25812,  2434, 566,  1238, 566,  1238, 564,  636, 542,  636, 566,  1242, 562,  636, 566,  638, 564,  1240, 566,  636, 566,  636, 566,  636, 566,  636, 25766,  2458, 566,  1238, 566,  1238, 566,  636, 566,  638, 566,  1238, 566,  636, 566,  636, 566,  1236, 566,  636, 564,  638, 566,  636, 566,  636};  // SONY C90
uint32_t address = 0x1;
uint32_t command = 0x13;
uint64_t data = 0xC90;


Timestamp : 000087.423
Library   : v2.6.4

Encoding  : NEC
Code      : 1EE17887 (32 bits)
Raw Timing[71]:
  +  9112, -  4432,    +   638, -   494,    +   638, -   494,    +   636, -   494, 
  +   636, -  1616,    +   638, -  1614,    +   638, -  1616,    +   638, -  1614, 
  +   638, -   494,    +   638, -  1614,    +   638, -  1614,    +   638, -  1588, 
  +   664, -   492,    +   638, -   494,    +   638, -   492,    +   638, -   494, 
  +   638, -  1616,    +   638, -   494,    +   636, -  1616,    +   638, -  1614, 
  +   638, -  1614,    +   638, -  1614,    +   638, -   494,    +   636, -   494, 
  +   638, -   494,    +   638, -  1614,    +   636, -   494,    +   638, -   494, 
  +   636, -   494,    +   638, -   494,    +   638, -  1614,    +   638, -  1614, 
  +   638, -  1612,    +   638, - 39312,    +  9112, -  2184,    +   640

uint16_t rawData[71] = {9112, 4432,  638, 494,  638, 494,  636, 494,  636, 1616,  638, 1614,  638, 1616,  638, 1614,  638, 494,  638, 1614,  638, 1614,  638, 1588,  664, 492,  638, 494,  638, 492,  638, 494,  638, 1616,  638, 494,  636, 1616,  638, 1614,  638, 1614,  638, 1614,  638, 494,  636, 494,  638, 494,  638, 1614,  636, 494,  638, 494,  636, 494,  638, 494,  638, 1614,  638, 1614,  638, 1612,  638, 39312,  9112, 2184,  640};  // NEC 1EE17887
uint32_t address = 0x78;
uint32_t command = 0x1E;
uint64_t data = 0x1EE17887;


Timestamp : 000088.196
Library   : v2.6.4

Encoding  : NEC
Code      : 1EE1F807 (32 bits)
Raw Timing[67]:
  +  9090, -  4406,    +   662, -   494,    +   638, -   494,    +   636, -   494, 
  +   638, -  1612,    +   640, -  1614,    +   638, -  1614,    +   638, -  1614, 
  +   638, -   496,    +   636, -  1592,    +   662, -  1614,    +   638, -  1612, 
  +   640, -   494,    +   636, -   494,    +   638, -   492,    +   638, -   494, 
  +   638, -  1614,    +   640, -  1588,    +   662, -  1616,    +   638, -  1588, 
  +   664, -  1614,    +   638, -  1614,    +   638, -   492,    +   638, -   492, 
  +   638, -   494,    +   640, -   492,    +   638, -   492,    +   638, -   492, 
  +   638, -   494,    +   636, -   494,    +   636, -  1616,    +   638, -  1588, 
  +   664, -  1610,    +   638

uint16_t rawData[67] = {9090, 4406,  662, 494,  638, 494,  636, 494,  638, 1612,  640, 1614,  638, 1614,  638, 1614,  638, 496,  636, 1592,  662, 1614,  638, 1612,  640, 494,  636, 494,  638, 492,  638, 494,  638, 1614,  640, 1588,  662, 1616,  638, 1588,  664, 1614,  638, 1614,  638, 492,  638, 492,  638, 494,  640, 492,  638, 492,  638, 492,  638, 494,  636, 494,  636, 1616,  638, 1588,  664, 1610,  638};  // NEC 1EE1F807
uint32_t address = 0x78;
uint32_t command = 0x1F;
uint64_t data = 0x1EE1F807;


エアコンのリモコンの長い信号にも対応していてすごい。温度や風量もパースしてprintされちゃう。

Encoding  : PANASONIC_AC
Code      : 0220E004000000060220E004003132803F00000660000080000614 (216 bits)
Mesg Desc.: Model: 4 (JKE), Power: On, Mode: 3 (COOL), Temp: 25C, Fan: 0 (Low), Swing (Vertical): 15 (AUTO), Quiet: Off, Powerful: Off, Clock: 00:00, On Timer: Off, Off Timer: Off
Raw Timing[439]:
  +  3538, -  1702,    +   462, -   408,    +   462, -  1256,    +   492, -   406, 
  +   490, -   384,    +   490, -   380,    +   494, -   382,    +   488, -   380, 
  +   492, -   390,    +   490, -   406,    +   464, -   380,    +   496, -   378, 
  +   490, -   380,    +   496, -   348,    +   522, -  1256,    +   468, -   402, 
  +   490, -   390,    +   492, -   378,    +   496, -   352,    +   518, -   352, 
  +   518, -   380,    +   494, -   376,    +   494, -  1256,    +   490, -  1254, 
  +   464, -  1280,    +   490, -   380,    +   494, -   376,    +   494, -  1284, 
  +   468, -   374,    +   494, -   382,    +   492, -   376,    +   496, -   380, 
  +   492, -   386,    +   494, -   380,    +   490, -   380,    +   496, -   374, 
  +   496, -   378,    +   492, -   378,    +   496, -   380,    +   492, -   380, 
  +   492, -   386,    +   494, -   380,    +   492, -   378,    +   496, -   380, 
  +   490, -   378,    +   492, -   378,    +   498, -   376,    +   498, -   402, 
  +   470, -   386,    +   494, -   380,    +   490, -   380,    +   496, -   376, 
  +   496, -   378,    +   492, -   378,    +   498, -   346,    +   526, -   380, 
  +   492, -   386,    +   494, -   374,    +   496, -  1254,    +   490, -  1254, 
  +   468, -   430,    +   462, -   412,    +   462, -   380,    +   494, -   376, 
  +   496, -   354,    +   518, - 10004,    +  3684, -  1678,    +   492, -   378, 
  +   494, -  1254,    +   466, -   380,    +   516, -   382,    +   494, -   380, 
  +   496, -   374,    +   496, -   378,    +   496, -   412,    +   466, -   378, 
  +   492, -   384,    +   492, -   376,    +   494, -   382,    +   494, -   374, 
  +   496, -  1260,    +   488, -   384,    +   490, -   416,    +   464, -   386, 
  +   492, -   286,    +   582, -   382,    +   494, -   380,    +   490, -   382, 
  +   490, -  1256,    +   464, -  1282,    +   468, -  1282,    +   466, -   376, 
  +   522, -   376,    +   494, -  1254,    +   492, -   356,    +   518, -   380, 
  +   492, -   380,    +   494, -   382,    +   488, -   392,    +   490, -   382, 
  +   492, -   408,    +   464, -   384,    +   492, -   378,    +   496, -   374, 
  +   496, -   380,    +   494, -   378,    +   494, -   386,    +   496, -  1256, 
  +   464, -   432,    +   444, -   400,    +   498, -   374,    +   498, -  1250, 
  +   492, -  1256,    +   468, -   406,    +   492, -   390,    +   492, -   378, 
  +   492, -  1256,    +   488, -   382,    +   494, -   380,    +   490, -  1232, 
  +   514, -  1258,    +   468, -   402,    +   490, -   392,    +   494, -   376, 
  +   494, -   380,    +   496, -   376,    +   496, -   378,    +   492, -   378, 
  +   498, -   378,    +   492, -   346,    +   524, -  1256,    +   494, -  1228, 
  +   518, -  1254,    +   464, -  1260,    +   490, -  1276,    +   494, -  1256, 
  +   490, -  1254,    +   468, -   408,    +   486, -   390,    +   496, -   380, 
  +   490, -   410,    +   468, -   376,    +   496, -   376,    +   496, -   378, 
  +   496, -   374,    +   498, -   376,    +   494, -   390,    +   492, -   408, 
  +   468, -   346,    +   524, -   380,    +   496, -   376,    +   496, -   378, 
  +   498, -   406,    +   468, -   378,    +   492, -   390,    +   492, -   380, 
  +   494, -  1250,    +   490, -  1284,    +   442, -   406,    +   488, -   382, 
  +   492, -   380,    +   496, -   380,    +   494, -   388,    +   494, -   380, 
  +   490, -   380,    +   496, -   378,    +   492, -   378,    +   496, -   374, 
  +   496, -  1254,    +   490, -  1288,    +   436, -   418,    +   490, -   378, 
  +   494, -   378,    +   494, -   352,    +   524, -   374,    +   498, -   380, 
  +   490, -   378,    +   496, -   380,    +   496, -   386,    +   492, -   378, 
  +   498, -   378,    +   492, -   376,    +   496, -   380,    +   496, -   380, 
  +   490, -   378,    +   496, -   380,    +   496, -   388,    +   490, -   378, 
  +   498, -   374,    +   494, -   378,    +   496, -   380,    +   496, -   374, 
  +   494, -   352,    +   520, -   378,    +   496, -  1232,    +   514, -   380, 
  +   496, -   376,    +   496, -   348,    +   524, -   380,    +   494, -   380, 
  +   490, -   380,    +   496, -   376,    +   496, -   390,    +   492, -   378, 
  +   496, -  1250,    +   494, -  1226,    +   496, -   408,    +   490, -   380, 
  +   492, -   378,    +   498, -   378,    +   492, -   386,    +   498, -   374, 
  +   498, -   374,    +   496, -  1300,    +   490, -   382,    +   492, -  1256, 
  +   490, -   384,    +   490, -   380,    +   492, -   380,    +   496

uint16_t rawData[439] = {3538, 1702,  462, 408,  462, 1256,  492, 406,  490, 384,  490, 380,  494, 382,  488, 380,  492, 390,  490, 406,  464, 380,  496, 378,  490, 380,  496, 348,  522, 1256,  468, 402,  490, 390,  492, 378,  496, 352,  518, 352,  518, 380,  494, 376,  494, 1256,  490, 1254,  464, 1280,  490, 380,  494, 376,  494, 1284,  468, 374,  494, 382,  492, 376,  496, 380,  492, 386,  494, 380,  490, 380,  496, 374,  496, 378,  492, 378,  496, 380,  492, 380,  492, 386,  494, 380,  492, 378,  496, 380,  490, 378,  492, 378,  498, 376,  498, 402,  470, 386,  494, 380,  490, 380,  496, 376,  496, 378,  492, 378,  498, 346,  526, 380,  492, 386,  494, 374,  496, 1254,  490, 1254,  468, 430,  462, 412,  462, 380,  494, 376,  496, 354,  518, 10004,  3684, 1678,  492, 378,  494, 1254,  466, 380,  516, 382,  494, 380,  496, 374,  496, 378,  496, 412,  466, 378,  492, 384,  492, 376,  494, 382,  494, 374,  496, 1260,  488, 384,  490, 416,  464, 386,  492, 286,  582, 382,  494, 380,  490, 382,  490, 1256,  464, 1282,  468, 1282,  466, 376,  522, 376,  494, 1254,  492, 356,  518, 380,  492, 380,  494, 382,  488, 392,  490, 382,  492, 408,  464, 384,  492, 378,  496, 374,  496, 380,  494, 378,  494, 386,  496, 1256,  464, 432,  444, 400,  498, 374,  498, 1250,  492, 1256,  468, 406,  492, 390,  492, 378,  492, 1256,  488, 382,  494, 380,  490, 1232,  514, 1258,  468, 402,  490, 392,  494, 376,  494, 380,  496, 376,  496, 378,  492, 378,  498, 378,  492, 346,  524, 1256,  494, 1228,  518, 1254,  464, 1260,  490, 1276,  494, 1256,  490, 1254,  468, 408,  486, 390,  496, 380,  490, 410,  468, 376,  496, 376,  496, 378,  496, 374,  498, 376,  494, 390,  492, 408,  468, 346,  524, 380,  496, 376,  496, 378,  498, 406,  468, 378,  492, 390,  492, 380,  494, 1250,  490, 1284,  442, 406,  488, 382,  492, 380,  496, 380,  494, 388,  494, 380,  490, 380,  496, 378,  492, 378,  496, 374,  496, 1254,  490, 1288,  436, 418,  490, 378,  494, 378,  494, 352,  524, 374,  498, 380,  490, 378,  496, 380,  496, 386,  492, 378,  498, 378,  492, 376,  496, 380,  496, 380,  490, 378,  496, 380,  496, 388,  490, 378,  498, 374,  494, 378,  496, 380,  496, 374,  494, 352,  520, 378,  496, 1232,  514, 380,  496, 376,  496, 348,  524, 380,  494, 380,  490, 380,  496, 376,  496, 390,  492, 378,  496, 1250,  494, 1226,  496, 408,  490, 380,  492, 378,  498, 378,  492, 386,  498, 374,  498, 374,  496, 1300,  490, 382,  492, 1256,  490, 384,  490, 380,  492, 380,  496};  // PANASONIC_AC
uint8_t state[27] = {0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, 0x20, 0xE0, 0x04, 0x00, 0x31, 0x32, 0x80, 0x3F, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x80, 0x00, 0x06, 0x14};


で、本来の目的の音量調節信号変換君。ブラビアの音量信号がきたらサウンドバーの信号に置き換えて送信。結果、大成功でテレビのリモコンでサウンドバーの音量調節ができるようになりました。

実際にM5StickC+IR Unitで動くリモコン信号変換君のスケッチはこの続きで!! ↓↓↓



ここから先は

5,729字

¥ 1,000

この記事が気に入ったらサポートをしてみませんか?