異次元③:ESP32の赤外線送受信ライブラリ


ESP32デバイスは開発された時間は長くないらしいんで、赤外線送受信の専用ライブラリは見つかってなかった。
下の元ソースリンクからサポートされているソースがあって、メインソースに反映されていないため、こちらがそれを反映して、ライブラリ化にしました。
Arduino-IRremote-master-esp32-plus-disableIRIn
Arduinoバージョン改造しているため、送信PINは固定でIO3です、、、が、、、ESP32のIO3はRXDOになります。そして、ESP32に書き込む際に一旦RXDOの接続を外す必要があります。
外さないとエラーが起きて書き込めません。

#こちらのリンクは元Arduinoバージョン:元ソース

2018/01/15修正追加:
エアコンの赤外線コードは長くて通常のライブラリは対応されてないため、ちょっとライブラリを修正したのでエアコンも対応できる。
Arduino-IRremote-master-esp32-plus-disableIRIn-rawbufplus

もっと長くしたい場合はIRremoteInt.hの43行を修正してください。
元ソース:
#define RAWBUF 101 // Maximum length of raw duration buffer
・・・
uint8_t rawlen;

修正後:
#define RAWBUF 400 // Maximum length of raw duration buffer
・・・
uint16_t rawlen;

赤外線の発信距離はかなり短すぎて、1メートル程度しか届かないのは問題で、色々試したところライブラリ内のirSend.cppのを下記のように修正すると3メートルぐらい範囲を広げることがっ出来ました。

修正前
25行: ledcWrite(LEDCHANNEL,50);
修正後
25行: ledcWrite(LEDCHANNEL,128);
最新版を載せます。
Arduino-IRremote-master20180401.zip

2018/08/06更新:
ESP32で上の赤外線ライブラリを使用して、受信した赤外線コードをSPIFFSに書き込もうとしたら、Cache disabled but cached memory region accessedのエラーが起きました。
色々調査したところ、どうやら赤外線受信モードを開始するとフラッシュが書けなくなることが分かったが、上のライブラリだと iRrecv.disableIRInはちゃんと内部のtimerを停止していないようで、エラーが起きました。上のライブラリのirRecv.cppに
void IRrecv::disableIRIn ( ){
cli();
TIMER_DISABLE_INTR;
sei(); // enable interrupts
162行 timerEnd(timer);//この行を追加しました。
}
Arduino-IRremote-master20180806.zip