Help us understand the problem. What is going on with this article?

ESP32 Devkitc+IRremoteの注意点

More than 1 year has passed since last update.

はじめに

bluetoothを使った赤外線リモコンを作ろうとしたときにハマったのでメモとして残しておきます。

環境

使用ソフト:Arduino
使用マイコン:esp32-devkitc
使用ライブラリ:IRremote(GitHub)

行おうとしたこと

IRRemoteをArduino IDEにインストールし、サンプルスケッチのIRremote>IRrecvDumpV2をESP32に書き込もうとした。

発生したトラブル

esp32に11番ピンがなかったのでIrecvDumpV2のrecvPinを15に書き換えて実行したところ下記のコンパイルエラー。

Arduino:1.8.9 (Windows 7), ボード:"ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 80MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 115200, None"

In file included from C:\Users\ユーザー名\AppData\Local\Temp\arduino_modified_sketch_934277\IRrecvDumpV2.ino:4:0:

C:\Users\ユーザー名\Documents\Arduino\libraries\IRremote/IRremote.h:365:23: error: 'SEND_PIN' was not declared in this scope

   const int sendPin = SEND_PIN;

                       ^

exit status 1
ボードESP32 Dev Moduleに対するコンパイル時にエラーが発生しました。

「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。

IRremote.hは赤外線の送受信用のライブラリなのだが、ESP32では赤外線送信がサポートされていないからESO32用のSEND_PINが定義されていないようだ。(Wifiの送信周りと干渉するらしい?)

8/29追記:多分割り込みやPWM信号がArduinoと互換性が無いからだろう。別記事にて自作してみたので作ってみたい人は確認してみてください。

なのでライブラリ(C:\Users\ユーザー名\Documents\Arduino\libraries\IRremote\IRremote.h)の365行目付近を下記のように書き換えた

書き換え前

IRremote.h
#ifdef USE_SOFT_CARRIER
    private:
        int sendPin;

        unsigned int periodTime;
        unsigned int periodOnTime;

        void sleepMicros(unsigned long us);
        void sleepUntilMicros(unsigned long targetTime);
#else
        const int sendPin = SEND_PIN;
#endif

書き換え後

IRremote.h
#ifdef USE_SOFT_CARRIER
    private:
        int sendPin;

        unsigned int periodTime;
        unsigned int periodOnTime;

        void sleepMicros(unsigned long us);
        void sleepUntilMicros(unsigned long targetTime);
#elif defined(ESP32)
// No system LED on ESP32, disable blinking by NOT defining BLINKLED

// avr/interrupt.h is not present
#else
        const int sendPin = SEND_PIN;
#endif

これでコンパイルが通り、動かしてみたら問題なく動いたので良しとする。

余談

赤外線送受信用のセンサーやLEDはSeeedのデバイスを利用した。FETや抵抗などがまとめてセットになっているので楽。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away