概要
前回 Arduino で赤外線 LED を使って Panasonic のエアコンを制御しました
今回は同じように赤外線 LED を ESP-WROOM-02 (ESPr) で使って制御してみました
環境
- Arduino IDE 1.6.9
- ESP-WROOM-02 開発ボード
- 赤外線 LED
- トランジスタ 2N5088
- 抵抗 47Ω x2
- 抵抗 470Ω x2
- タクトスイッチ x2
ライブラリのインストール
Arduino のときに IRremote というライブラリを使いましたが、これは ESPr だと使えません
IRremoteESP8266 という専用のライブラリがあるのでこれを使います
Arduino IDE からインストールすることはできないので、Github から zip ファイルをダウンロードしましょう
そして
スケッチ -> ライブラリをインクルード -> .ZIP 形式のライブラリをインストール
でダウンロードした zip ファイルを選択してインストールしましょう
インストールが完了すると IRremoteESP8266.h
が include できるようになります
配線
今回の配線は以下の通りです
上から
サイドから
逆サイドから
基本は Arduino ときと同じなのですが、スイッチを 2 つ (冷房の起動と停止) にしたのとトランジスタを使って赤外線 LED の出力を増幅しています
これはあとで気づいたのですが、Arduino と ESPr では ESPr のほうが赤外線の出力が弱いです
なので、ESPr のときはトランジスタを使って赤外線の出力強度をあげています
送信用スケッチ
今回のスケッチは以下の通りです
440 バイト分の配列 start と stop はそれぞれエアコンの冷房ボタンと停止ボタンを学習した信号になります
赤外線の信号の学習は赤外線受信モジュールを使って事前に Arduino で行いました
Arduino + 赤外線受信モジュールを使って信号を学習する方法はこちらを参考にしてください
#include <IRremoteESP8266.h>
int START = 12;
int STOP = 14;
int khz = 38;
IRsend irsend(4);
unsigned int stop[440] = {3568, 1680, 512, 400, 476, 1244, 512, 404, 476, 408, 476, 404, 480, 372, 508, 404, 476, 408, 476, 404, 476, 404, 476, 376, 508, 376, 508, 372, 508, 1244, 512, 400, 476, 380, 504, 408, 476, 404, 476, 404, 476, 408, 476, 404, 476, 1244, 512, 1244, 508, 1252, 508, 376, 504, 376, 504, 1244, 512, 408, 476, 404, 476, 404, 476, 408, 472, 412, 476, 404, 476, 376, 504, 404, 476, 380, 504, 376, 508, 404, 476, 404, 476, 380, 504, 404, 476, 376, 504, 408, 472, 380, 508, 372, 508, 404, 476, 376, 504, 380, 504, 376, 504, 408, 476, 372, 508, 380, 504, 376, 504, 376, 504, 408, 476, 408, 476, 372, 508, 1244, 508, 1248, 508, 408, 476, 404, 476, 408, 472, 376, 508, 372, 504, 9976, 3564, 1684, 508, 376, 504, 1248, 508, 376, 504, 408, 476, 408, 472, 376, 504, 380, 504, 408, 476, 404, 476, 404, 476, 376, 504, 380, 508, 404, 472, 1248, 508, 376, 508, 380, 504, 376, 504, 376, 504, 376, 504, 380, 504, 404, 476, 1244, 512, 1244, 508, 1252, 508, 404, 476, 404, 476, 1248, 508, 380, 504, 404, 476, 408, 472, 408, 476, 408, 476, 376, 504, 404, 476, 404, 476, 380, 504, 376, 504, 376, 508, 404, 476, 380, 504, 376, 504, 408, 472, 376, 508, 408, 472, 1248, 508, 1248, 508, 404, 476, 380, 504, 408, 472, 376, 504, 1248, 508, 408, 476, 1244, 508, 1248, 508, 404, 476, 380, 508, 372, 508, 404, 476, 404, 476, 408, 476, 408, 476, 404, 476, 404, 472, 1256, 508, 404, 476, 1248, 508, 404, 476, 408, 476, 408, 476, 372, 504, 1248, 508, 408, 476, 408, 476, 404, 472, 408, 476, 380, 504, 376, 504, 404, 480, 372, 508, 408, 476, 404, 476, 404, 476, 404, 476, 380, 508, 404, 476, 404, 476, 376, 504, 380, 504, 404, 476, 1244, 512, 1244, 508, 380, 508, 404, 476, 376, 504, 372, 508, 408, 476, 408, 476, 404, 476, 404, 476, 408, 476, 404, 476, 1244, 508, 1244, 512, 408, 476, 408, 472, 376, 508, 404, 476, 380, 504, 404, 476, 408, 472, 408, 476, 408, 476, 404, 476, 372, 508, 404, 476, 412, 476, 372, 508, 404, 476, 372, 508, 408, 476, 404, 476, 404, 476, 408, 476, 408, 476, 376, 504, 404, 476, 404, 476, 1248, 512, 404, 476, 404, 476, 408, 476, 408, 480, 404, 476, 376, 504, 404, 476, 380, 508, 404, 472, 1244, 512, 1244, 512, 412, 476, 404, 476, 372, 508, 404, 476, 412, 476, 376, 504, 404, 476, 404, 476, 1252, 508, 1248, 508, 404, 476, 404, 476, 376, 508};
unsigned int start[440] = {3584, 1664, 532, 352, 524, 1228, 528, 388, 492, 392, 496, 384, 492, 388, 492, 392, 488, 396, 492, 388, 492, 388, 492, 388, 492, 392, 492, 388, 492, 1224, 528, 392, 492, 392, 492, 388, 492, 388, 492, 388, 492, 364, 520, 388, 492, 1228, 524, 1228, 528, 1232, 528, 388, 492, 388, 488, 1228, 532, 360, 524, 388, 488, 360, 524, 388, 492, 360, 524, 388, 492, 388, 496, 388, 488, 360, 524, 360, 524, 388, 492, 388, 412, 472, 492, 388, 492, 388, 492, 360, 520, 364, 520, 392, 492, 388, 488, 360, 524, 392, 492, 392, 488, 388, 496, 388, 416, 468, 412, 468, 412, 436, 524, 388, 492, 392, 492, 388, 488, 1232, 528, 1228, 524, 392, 492, 392, 412, 468, 488, 360, 520, 388, 492, 9956, 3584, 1660, 528, 392, 412, 1304, 528, 388, 492, 360, 524, 360, 520, 392, 492, 356, 444, 440, 520, 392, 488, 360, 524, 388, 416, 440, 520, 388, 492, 1228, 524, 392, 492, 392, 492, 388, 488, 396, 412, 468, 412, 472, 488, 392, 488, 1228, 524, 1228, 528, 1232, 528, 388, 492, 388, 488, 1232, 524, 364, 520, 392, 416, 464, 492, 388, 416, 468, 492, 392, 488, 360, 520, 360, 520, 364, 520, 360, 524, 388, 492, 388, 416, 468, 416, 1304, 448, 468, 488, 392, 488, 396, 488, 1228, 452, 1304, 448, 436, 448, 472, 412, 468, 412, 464, 492, 1228, 528, 360, 520, 1228, 452, 1304, 448, 468, 492, 360, 520, 392, 488, 396, 412, 468, 412, 472, 488, 356, 448, 468, 488, 392, 488, 1240, 524, 388, 416, 1304, 452, 464, 488, 364, 520, 360, 448, 464, 416, 1304, 524, 364, 448, 468, 412, 468, 488, 388, 492, 364, 520, 392, 412, 468, 412, 468, 416, 468, 488, 364, 444, 436, 444, 468, 488, 396, 412, 468, 412, 468, 488, 360, 448, 436, 448, 464, 412, 1304, 452, 1304, 528, 360, 524, 388, 416, 468, 412, 468, 412, 440, 444, 468, 412, 468, 416, 432, 448, 472, 412, 464, 488, 1228, 452, 1304, 452, 472, 412, 468, 412, 468, 488, 392, 412, 472, 412, 468, 488, 364, 444, 464, 416, 472, 412, 468, 412, 468, 412, 468, 412, 472, 416, 468, 412, 432, 448, 468, 412, 440, 444, 468, 412, 468, 412, 468, 412, 472, 416, 464, 416, 468, 412, 464, 416, 1308, 524, 396, 412, 464, 416, 468, 412, 472, 416, 468, 412, 468, 412, 468, 412, 472, 416, 464, 416, 1304, 448, 1304, 524, 400, 416, 432, 448, 464, 416, 468, 412, 472, 412, 1308, 448, 468, 412, 468, 412, 1308, 452, 1304, 452, 468, 412, 468, 412, 468, 412};
void setup() {
irsend.begin();
pinMode(START, INPUT);
pinMode(STOP, INPUT);
Serial.begin(115200);
}
void loop() {
if (digitalRead(START) == HIGH) {
Serial.println("START");
irsend.sendRaw(start, sizeof(start) / sizeof(start[0]), khz);
} else if (digitalRead(STOP) == HIGH) {
Serial.println("STOP");
irsend.sendRaw(stop, sizeof(stop) / sizeof(stop[0]), khz);
}
delay(500);
}
赤外線 LED の信号送信は 4 ピンで制御しています
タクトスイッチはそれぞれ 12, 14 ピンで制御しています
Arduino とほぼ同じように使えるのですが、若干違うところもあります
IRsend irsend(4);
という感じで赤外線を送信するピンを指定することができます
Arduino のときは 3 ピン固定でした
また、irsend.begin();
で赤外線 LED を使うことを宣言する必要があります
動作確認
スケッチを書き込んでエアコンに向けてスイッチを押してみましょう
リモコンの信号がちゃんと学習できていればエアコンの起動と停止ができるはずです
今回はトランジスタで信号を増幅しているので距離は数メートル離れても大丈夫でした
自宅で試した感じだと 4 - 5m は全然大丈夫でした
最後に
ESPr で赤外線 LED を制御してみました
ほぼ Arudino と同じように制御できますが、完全互換では動作しませんでした
また、信号の出力が弱いのでトランジスタを挟んだほうが良いです
あとはこれに MQTT を Subscribe する機能を設けて扇風機のときのようにネットから制御できるようにしたいと思います