2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32で赤外線リモコンを作る方法(IRremote v4.x)

Last updated at Posted at 2024-09-17

はじめに

今回はせっかく手に入れたESP32を使って自宅にあるリモコンを解析し,赤外線LEDを使ってテレビやエアコンを操作してみようと思います。

実装方針

リモコンの作成には,「受信して解析→送信する」の流れで進めていきます。

準備するもの

実装環境

回路作成

最終的にこんな感じの回路になりました。

受信する用回路

20240917181533.jpg

送信する用回路

2024091718153a3.jpg

実行環境

Arduino IDE やESP32のセットアップ方法については以前のブログを参考にしてください。
https://yhotta240.hatenablog.com/entry/2024/09/09/050147?_gl=1*1fuw8x4*_gcl_au*NjYyMjcwNDM3LjE3MjU1NTAzMjg.

赤外線を受信

Arduino IDEを開き,赤外線を受信するスケッチを作成します。
まずIRremote のドキュメントを確認してみました。

ドキュメントNew 4.x program:(新しい 4.x プログラム例)で以下のようなプログラムの例があったのでこれをベースにスケッチを作成していきます。

新しい 4.x プログラム例:
#include <IRremote.hpp>
#define IR_RECEIVE_PIN 2

void setup()
{
...
  Serial.begin(115200); // // Establish serial communication
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver
}

void loop() {
  if (IrReceiver.decode()) {
      Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Print "old" raw data
      IrReceiver.printIRResultShort(&Serial); // Print complete received data in one line
      IrReceiver.printIRSendUsage(&Serial);   // Print the statement required to send this data
      ...
      IrReceiver.resume(); // Enable receiving of the next value
  }
  ...
}

受信用のスケッチ作成:

#include <IRremote.hpp>  // IRremoteライブラリ
#define IR_RECEIVE_PIN 13 // GPIOピン番号を定義

void setup() {
  Serial.begin(115200);  // シリアル通信の初期化
  IrSender.begin(DISABLE_LED_FEEDBACK);  // 赤外線受信の初期化
}

void loop() {
  if (IrReceiver.decode()) {  // 信号を受信したら
    Serial.print("Received Raw Data: ");
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);  // 生のデータを16進数で表示

    IrReceiver.printIRResultShort(&Serial);  // 受信したデータの簡潔な概要を表示
    IrReceiver.printIRSendUsage(&Serial);    // 受信した信号を送信するためのコードを表示

    IrReceiver.resume();  // 次の信号を受信できるようにする
  }
}

ピンとコメントのところ以外は何も変えていません。

参考

新規のスケッチを作成して完成した受信用のスケッチを貼り付けESP32に書き込みます。

受信テスト:

プログラムが実行されたら任意のリモコンをレシーバに向け,リモコンの調べたいボタンを押します。

テレビのリモコンを例に受信されたデータを見ていきます。
202409171sp8153a3.jpg

電源ボタン:

Received Raw Data: F00F6380
Protocol=NEC Address=0x6380 Command=0xF Raw-Data=0xF00F6380 32 bits LSB first
Send with: IrSender.sendNEC(0x6380, 0xF, <numberOfRepeats>);
1チャンネルボタン:
Received Raw Data: FF006380
Protocol=NEC Address=0x6380 Command=0x0 Raw-Data=0xFF006380 32 bits LSB first
Send with: IrSender.sendNEC(0x6380, 0x0, <numberOfRepeats>);
2チャンネルボタン:
Received Raw Data: FE016380
Protocol=NEC Address=0x6380 Command=0x1 Raw-Data=0xFE016380 32 bits LSB first
Send with: IrSender.sendNEC(0x6380, 0x1, <numberOfRepeats>);

赤外線を送信

送信用のスケッチ作成(テレビリモコン電源ボタン)

#include <IRremote.hpp>
#define IR_SEND_PIN 4  // MOSFETを制御するGPIOピン

void setup() {
  // 赤外線送信モジュールの初期化
  IrSender.begin(IR_SEND_PIN, DISABLE_LED_FEEDBACK, 0);  
  Serial.begin(115200);  // シリアル通信の初期化
}

void loop() {
  // 受信したデータを再送信
  Serial.println("赤外線送信");
  IrSender.sendNEC(0x6380, 0xF, 0);  
  delay(5000);  // 5秒ごとに信号を送信
}

書き込みが完了したら送信テスト行います。

送信テスト

プログラムを実行し,赤外線LEDをテレビに向けたところ5秒間隔で電源をオン・オフすることが確認できました。

最後に

お読みいただきありがとうございます。
この記事の詳しい内容やプログラムの解説については,以下のブログにまとめていますのでぜひご覧ください。

参考

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?