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で動くリモコン信号変換君のスケッチはこの続きで!! ↓↓↓
ここから先は
¥ 1,000
この記事が気に入ったらサポートをしてみませんか?