"Enter"a basıp içeriğe geçin

Esp8266 ile IR Okuma Kopyalama Ve Kızılötesi Led Kullanarak Çoğaltma

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…

Tv kumandası
Klima kumandası

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.

https://chat.whatsapp.com/HlsNcRUTAfU708TlmTL9SC

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir