1
0

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-25

はじめに

前回,ESP32とIRremoteライブラリを使ってテレビリモコンの赤外線信号を送受信することができました。今回は,赤外線のデータ長がテレビリモコンよりも長いエアコンのリモコンを解析し,その信号を送信してみようと思います。

実装準備

実装方針や準備するもの,実装環境に関しては,前回の投稿と特に変わらずエアコン制御用にスケッチを少し変更するだけです。同じ手順で進めます。

1. 実装方針

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

受信する

  1. 受信モジュールの回路を組み立てESP32にプログラムを書き込みます
  2. リモコンのボタンを受信モジュールに向けて信号を送信します
  3. シリアルモニタで解析されたデータを確認します

送信する

  1. 赤外線LEDとトランジスタを使って回路を組み,ESP32にプログラムを書き込みます
  2. プログラムを実行して送信先のデバイスが動作するか確認します

これでリモコンの信号を受信して解析し,送信するという流れで実装していきます。

2. 準備するもの
3. 回路作成

受信する用回路

20240917181533.jpg

送信する用回路

2024091718153a3.jpg

4. 実装環境

Arduino IDE やESP32のセットアップ方法については以前のブログを参考にしてください。

https://yhotta240.hatenablog.com/entry/2024/09/09/050147?_gl=1*hkroiv*_gcl_au*NjYyMjcwNDM3LjE3MjU1NTAzMjg

ここまでは前回と同様です

赤外線を受信

エアコン用リモコン

IMG_5851.JPG

受信用スケッチ:

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

void setup() {
  Serial.begin(115200);  // シリアル通信の初期化
  IrReceiver.begin(IR_RECEIVE_PIN, 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.printIRResultRawFormatted(&Serial, true);  // RAWフォーマットで結果を表示
    IrReceiver.compensateAndPrintIRResultAsCArray(&Serial, true);  // uint16_t配列として結果を出力
    IrReceiver.resume();  // 次の信号を受信できるようにする
  }
}

冷房:

シリアルモニタ
Received Raw Data: FF00FF00
Protocol=PulseDistance Repeat gap=51100us Raw-Data=0xFF00FF00 424 bits LSB first
Raw result in microseconds - with leading gap
rawData[851]: 
 -51100
 +3400,-1650
 + 450,-1200 + 500,- 350 + 450,- 400 + 450,- 400
 + 450,- 400 + 450,- 350 + 500,- 350 + 500,- 350
 ・・・{省略}・・・
 + 450,- 400 + 450,- 400 + 450,- 350 + 500,- 350
 + 450,- 400 + 450,- 400 + 450,- 400 + 450,- 400
 + 450
Sum: 532300
uint16_t rawData[851] = {3380,1670, 430,1220, 480,370, 430,420, ・・・{省略}・・・, 430,420, 430,420, 430};  // Protocol=PulseDistance Repeat gap=51100us Raw-Data=0xFF00FF00 424 bits LSB first

赤外線を送信

送信用のスケッチ作成(エアコンの冷房)

受信した赤外線信号を送信するためのスケッチを作成します。ここでは,先ほど受信したrawData[851]のデータをそのまま赤外線モジュールを使って再送信します。

#include <IRremote.hpp>
#define IR_SEND_PIN 4  // MOSFETを制御するGPIOピン(例:GPIO3)
#define PIN_BUTTON_TURN_ON 0

// 冷房
const uint16_t rawData[851] = {3380,1670, 430,1220, 480,370, 430,420, ・・・{省略}・・・, 430,420, 430,420, 430};

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

void loop() {
  // 受信したデータ送信
  if (digitalRead(PIN_BUTTON_TURN_ON) == LOW) { // bootボタンを押す
    IrSender.sendRaw(rawData, sizeof(rawData)/sizeof(rawData[0]), 38);
    Serial.println("send trun on at " + String(millis()));
  }
  delay(5000);
}

送信テスト

スケッチを書き込み,ESP32のブートボタンを押して送信テストを行います。シリアルモニタには「send turn on at」といったメッセージが表示され,送信成功のタイミングがミリ秒単位で確認できます。

無事にエアコンの冷房を起動させることができました。

まとめ

今回は,ESP32とIRremoteライブラリを使用して赤外線信号の受信・解析・再送信を行い,エアコンの制御に成功しました。今後はこれらを応用してGASと連携させ,エアコンなどを遠隔操作できるようにしたいと思います。

最後に

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

参考

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?