Merhaba bu, Kızılötesi kumandaların sinyallerini bir mikro denetleyici ile okuyup kopyalayarak ve kızılötesi led kullanarak çoğaltma hakkında bir proje yazısını içerir.
Bu proje kızılötesi sinyaller ile çalışan cihazları kumanda olmadan yönetebilmek ve belki siz sıcak bir günde eve gelmek üzere iken telefonunuzdan klimayı istediğiniz ayarlarda açıp eve geldiğinizde serin bir oda ile karşılaşmanıza olanak sağlayabilir, tabi ki onlarca kullanım senaryosu vardır.
Ben bunu Arçelik marka tv ve klimada denedim ama kızılötesi protokoller çok benzer ve bu proje eminim diğer tümü için de geçerli olacaktır.
Projeyi daha iyi anlatmak açısından 2 aşamaya böldüm, bunlar Okuma ve tekrarlama.
1- Okuma

Kullanacağımız kütüphane z3t0/IRremote@^4.7.1 bu kütüphanenin içerisinde bu sinyalleri yakalamak için hazır bir proje geliyor ReceiveDemo bu projeyi denetleyici kartımıza yükleyelim.

Sırada bağlantıları yapmaya geldi ReceiveDemo içerisinde PinDefinitionsAndMore.h içinde şöyle bir yazı var;


Varsayılan olarak böyle verilmiş tabi ki siz uygun olan diğer pinleri de kullanabilirsiniz ben bağlantımı şu şekilde yaptım.
Tabi ki PinDefinitionsAndMore.h içerisinde esp8266 ile ilgili kısımda pini D2 ile değiştim artık güç verip kızılötesi kumandaları okuyabiliriz.
Güç verip kumandanın tuşlarına bastığınızda şunları göreceksiniz…


Hangi protokol kullanıldığını address ve command bilgilerini veriyor ve send with kısmı da bu kızılötesi sinyali nasıl tekrar üreteceğimizi söylüyor, bunları not alalım. 1. adımı tamamladık bilgileri aldık şimdi diğer adıma geçelim.
2- Tekrarlama
Öncelikle devreyi hazırlayalım ihtiyacımız olan şeyler;
1- Denetleyici (esp8266)
2-IR reciver led
3-20 ohm direnç
4-Transistör
Devremiz resimdeki gibi olacak
ben bir esp8266 kullandığım için ve bu kart 3.3v ile çalıştığı için vin pininden lede 5v vermek istedim böylelikle usb den beslediğimde vin den 5v alacağımı düşündüm.

Şöyle bir sorunla karşılaştım vin sadece güç girişi içinmiş ben de resimdeki gibi bir type-c soketi taktım vin den besledim. Böylelikle hem esp8266 ya 5v vin den giriş yaptım ve lede de 5v verebildim. Devrenin son hali aşşağıdaki gibi



Donanım tarafı tamamen bitti şimdi de yazılım tarafına geçelim şu şekilde olacak esp kendini ap modunda başlatacak ve biz wifi ağ ları arasında görebileceğiz bağlandıktan sonra belirlediğimiz ip adresine gittiğimizde resimdeki gibi web sayfası karşılayacak bunu bir kızılötesi kumanda gibi düşünebilirsiniz.


Burda butonlara belirlediğimiz kızılötesi komutları tanımladığımızda artık normal bir kumanda gibi davranacak bir butona tıkladığımızda esp kızılötesi led ile istediğimiz kumanda kodunu gönderecek.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <LittleFS.h>
#include <IRremote.hpp>
#define IR_SEND_PIN D1
const char* AP_SSID = "IRRemote";
const char* AP_PASS = "12345678"; // en az 8 karakter
DNSServer dnsServer;
ESP8266WebServer server(80);
const byte DNS_PORT = 53;
IPAddress apIP(192, 168, 4, 1);
void handleIR() {
String dev = server.arg("dev");
String cmd = server.arg("cmd");
String val = server.arg("val");
if (dev == "tv") {
if (cmd == "vol_up") IrSender.sendNEC(0xFD01, 0xD0, 0);
else if (cmd == "vol_down") IrSender.sendNEC(0xFD01, 0xCC, 0);
else if (cmd == "power") IrSender.sendNEC(0xFD01, /* power kodun */ 0x00, 0);
// diğer TV komutlarını buraya ekle
}
else if (dev == "ac") {
if (cmd == "power") IrSender.sendLG(0x88, /* power kodun */ 0x0000, 0);
else if (cmd == "temp") {
// val parametresine göre önceden eşleştirdiğin sıcaklık kodlarını gönder
int temp = val.toInt();
// örnek: if (temp == 24) IrSender.sendLG(0x88, 0x92F1, 0);
}
else if (cmd == "mode") {
// val: "cool" / "fan" / "auto"
}
else if (cmd == "fan") {
// val: "low" / "med" / "high"
}
}
server.send(200, "text/plain", "OK");
}
void setup() {
Serial.begin(115200);
IrSender.begin(IR_SEND_PIN);
LittleFS.begin();
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
WiFi.softAP(AP_SSID, AP_PASS);
// Captive portal: hangi adrese gidilirse gidilsin ESP'nin IP'sine yönlendir
dnsServer.start(DNS_PORT, "*", apIP);
// Ana sayfa
server.serveStatic("/", LittleFS, "/remote.html");
// IR komut endpoint'i
server.on("/ir", HTTP_GET, handleIR);
// Telefon otomatik "internet var mı" kontrolü yapar, bunları da yönlendir
server.onNotFound([]() {
server.sendHeader("Location", "/", true);
server.send(302, "text/plain", "");
});
server.begin();
Serial.println("AP baslatildi, SSID: " + String(AP_SSID));
}
void loop() {
dnsServer.processNextRequest();
server.handleClient();
}Eğer bir sorun ile karşılaşırsanız buradan iletişim kurabilirsiniz.