blog.ijacek007.cz

Blog o všem trochu jinak.

Ukážeme si, jak za pomocí ESP8266 nebo jakékoli jiné desky programovatelné v prostředí Arduino udělat libovolný přijímač a vysílač infračervených signálu a tím například ovládat naší TV nebo cokoliv, co k dálkovému ovládání využívá právě infračervené signály.

Trocha nezbytné logiky věci. Infračervený signál je vlastně světelný signál vyzařující LED diodou, který využívají hlavně různé dálkové ovladače. Například televize, rádia, hifi věže a další. Princip je velice jednoduchý. Infračervená dioda vyšle sérii bliků do prostoru a přijímač, který je poblíž toto světlo je zachytí. Pokud jde o signál, se kterým umí pracovat, tak povel zpracuje, pokud ne tak povel ignoruje. Proto můžete v jedné místnosti ovládat několik spotřebičů několika ovladači a navzájem by se neměly rušit. Je to prostě dáno tím, že se zasílané instrukce liší, a i když povel ze satelitu zachytí i vaše televize, ví že tento povel není pro ní, a tudíž povel ignoruje. Nevýhodou tohoto systému je nutnost přímé viditelnosti signálu. Pokud do cesty vysílače a přijímače umístíte překážku, světelný paprsek nedoputuje k přijímači a ten tedy povel nezpracuje. Proto například ovladače fungují nejlépe, pokud je nasměrujete přímo na ovládanou elektroniku.


ESP8266 a infračervené sady s vysílací i přijmací diodou a ovládačemi.

My si dnes v našem příkladu složíme pomocí modulu ESP8266 univerzální přijímač těchto signálů, odchytíme si signál z dálkového ovladače, zapíšeme si kód, který vysílač vyšle při určitém tlačítku na ovladači a poté budeme tyto signály posílat pomocí infračervené vysílací diody místo ovladače tak, abychom mohli elektroniku ovládat sami bez ovladače, a přitom nemuseli pomyslně zvednout zadek z gauče. Budeme k tomu tedy nejprve potřebovat použít jednoduchou sadu na příjem a vysílaní, která se dá pořídit do 50 kč a dostanete k ní rovnou ovladač i vysílací a přijímací diodu a samozřejmě kontrolér tedy ESP8266. Jo a malém bych zapomněl. Pro vysílací diodu k ESP se na internetu ještě doporučuje použít tranzistor 2N2222, tak i na ten nezapomeňte.


Zapojení ESP s příjmací infračervenou diodou.

Nejprve si postavíme sadu pro zkoušku. Využijeme tedy přijímač i ovládání ze sady, které by mělo spolu bez problému fungovat a eliminujeme tak chyby, kdy se nám nedaří odchytit cizí signál hned při začátcích pokusu. Náš první kód využije připravenou knihovnu upravenou pro ESP názvem IRremoteESP8266. Pomocí sériové konzole bude vypisovat všechny kódy, které infračidlo dostane. Připojení je přitom velmi jednoduché na Pin G připojíme – na port 3V + přijímače a datový výstup z modulu připojíme na pin D4, v programu označovaný jako 2. Budeme tedy pomocí sériové konzole čekat na signál a jakmile jej přijímač dostane vypíše nám jej.

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

// Přijmaci diodu připojíme na pin D4 tedy GP02 označení 2

const uint16_t kRecvPin = 2;

IRrecv irrecv(kRecvPin);

decode_results results;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();  // Start the receiver
  while (!Serial)  // Wait for the serial connection to be establised.
    delay(50);
  Serial.println();
  Serial.print("Ctení je aktivni cekam na vysilani. ");
  Serial.println(kRecvPin);
}

void loop() {
  if (irrecv.decode(&results)) {
    // print() & println() can't handle printing long longs. (uint64_t)
    serialPrintUint64(results.value, HEX);
    Serial.println("");
    irrecv.resume();  // Receive the next value
  }
  delay(100);
}


Kód s přijmacím signálem na seriové konzoly.

Teď nastává teprve ta správná zábava. Naprogramujeme si totiž náš obvod. K tomu abychom mohli ovládat jiné zařízení, například hifi věž nebo televizi. Samozřejmě se musíme nejprve zmocnit ovladače a zjisti si frekvence tlačítek to již ale umíme, takže na náš přijímač naměřujeme ovladač a kódy si poznamenáme.


zapojení infračervené vysílací diody

Zapojíme si tedy k modulu ESP infračervenou vysílací diodu a provedeme krátké zapojení tak, abychom mohli ony signály, co jsme si v předchozích krocích zajistili, vysílat bez nutnosti sahat na ovládač. Jak jsem psal v úvodu. Ve všech zapojeních se doporučuje použít tranzistor 2N2222, proto u našeho zapojení jej také nevynecháme. Jak si můžete všimnout, celé zapojení se dá zrealizovat i bez jediného pájení, jen pomocí čtveřice propojek.


Webová stránka pro převod HEX(a) na desitkovou soustavu.

Než ale budeme moct vyslat náš kód budeme jej muset přepsat do desítkové soustavy. Náš analyzátor totiž vrátil kód jako hodnotu HEX(a). K převodu můžeme využit jak integrovanou kalkulačku, která je součástí Windows tak také specializované stránky, která nám HEX(a) kod převede do desítkové soustavy. www.rapidtables.com


Zapojení infeačervené vysílací diody a ovládacího tranzistoru

Po převedení všech našich odchycených signálu už následuje jen vytvoření programu, který nahrajeme do našeho kontroleru. Modul ESP se poté připojí k naší bezdrátové síti a vytvoří webový server, na kterém všechny odchycené a převedené signály vložíme do webové stránky a máme ovladač hotovo.

#include <Arduino.h>
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#endif  // ESP8266
#if defined(ESP32)
#include <WiFi.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#endif  // ESP32
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <WiFiClient.h>

const char* kSsid = "TajnaWifi";
const char* kPassword = "SuperTajneHeslo";
MDNSResponder mdns;

#if defined(ESP8266)
ESP8266WebServer server(80);
#undef HOSTNAME
#define HOSTNAME "IJA IR SERVER"
#endif  // ESP8266
#if defined(ESP32)
WebServer server(80);
#undef HOSTNAME
#define HOSTNAME "IJA IR SERVER"
#endif  // ESP32

const uint16_t kIrLed = 4;  // ESP GPIO pin to use. Recommended: 4 (D2).

IRsend irsend(kIrLed);  // Set the GPIO to be used to sending the message.

void handleRoot() {
  server.send(200, "text/html",
              "<html>" \
                "<head><title>" HOSTNAME " Demo </title>" \
                "<meta http-equiv=\"Content-Type\" " \
                    "content=\"text/html;charset=utf-8\">" \
                "<meta name=\"viewport\" content=\"width=device-width," \
                    "initial-scale=1.0,minimum-scale=1.0," \
                    "maximum-scale=5.0\">" \
                "</head>" \
                "<body>" \
                  "<h1>Vítej na " HOSTNAME ", zde jsou možnosti ir signálů." \
                      "</h1>" \
                  "<p><a href=\"ir?code=3242099070\">Zapni / vypni</a></p>" \
                  "<p><a href=\"ir?code=3242107230\">Pause</a></p>" \
                  "<p><a href=\"ir?code=3242101110\">Opakovat</a></p>" \
                  "<p><a href=\"ir?code=3242066430\">Hlasitost +</a></p>" \
                  "<p><a href=\"ir?code=3242070510\">Hlasitost -</a></p>" \
                  "<p><a href=\"ir?code=3242105190\">Další</a></p>" \
                  "<p><a href=\"ir?code=3242097030\">Předchozí</a></p>" \


                "</body>" \
              "</html>");
}

void handleIr() {
  for (uint8_t i = 0; i < server.args(); i++) {
    if (server.argName(i) == "code") {
      uint32_t code = strtoul(server.arg(i).c_str(), NULL, 10);
#if SEND_NEC
      irsend.sendNEC(code, 32);
       Serial.println(code);

#endif  // SEND_NEC
    }
  }
  handleRoot();
}

void handleNotFound() {
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++)
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  server.send(404, "text/plain", message);
}

void setup(void) {
  irsend.begin();

  Serial.begin(115200);
  WiFi.begin(kSsid, kPassword);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(kSsid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP().toString());

#if defined(ESP8266)
  if (mdns.begin(HOSTNAME, WiFi.localIP())) {
#else  // ESP8266
  if (mdns.begin(HOSTNAME)) {
#endif  // ESP8266
    Serial.println("MDNS responder started");
    // Announce http tcp service on port 80
    mdns.addService("http", "tcp", 80);
  }

  server.on("/", handleRoot);
  server.on("/ir", handleIr);

  server.on("/inline", [](){
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
#if defined(ESP8266)
  mdns.update();
#endif
  server.handleClient();
}

V příkladu stačí změnit jen řádek 17 a 18, kde Tajná wifi nahradíte jménem vaší Wifi sítě a Super tajné heslo zase heslem k vaší Wifi. Poté už jen stačí doplnit ty správné kódy a popisy od řádku 50. Pro účely testování na sériové lince modul vypisuje jednak ke které sítí se připojil, tak jaké kódy odesílá dioda. Koó si tedy modifikujte po svém a máte hotovo.


Ukázka webového serveru s připraveným ovládaním Infračervených signálu.

Jak je vidět i s tak jednoduchými součástky se dá udělat docela zajímavé zapojení, které například, když necháte v ložnici napojené na powerbanku, dovede například z povzdálí vypínat zvuk v TV, přepínat kanály nebo cokoliv si vymyslíte. Také s tím samozřejmě můžete jednoduše sjednotit všechny ovladače v obyváku nebo si jen hrát. Použití už nechám jen na vás. Klidně se do komentářů můžete pochlubit, co jste pomocí podobného zapojení doma vymyslely vy.

Mohlo by vás zajímat

Převodník čísel z HEX do číselného tvaru

Minimalistický wifi kontrolér k led pásku WS2812

Jak pomocí Arduina přeprogramovat Wi-Fi relátko Sonoff basic


Štítky článku diagnostika | elektronika | skutecnost | zabava | zajimavosti |
Autor Ijacek.007 12.12.2021 Opravil(a) sokorka zobrazeno 642x
Předchozí článek ESP8266 a měření proudu pomocí SCT013
Jak pomocí ESP8266 či Arduina ovládat světlo DJ led světlo T645C Další článek


gravatar

Vložit komentář

Nick *:
WWW:
Email * (nezobrazuje se ):
Gravatar:
Pamatuj si mě:
Komentář článku *:
Opiš následující text: *

* - vyžadované údaje. RSS kanál s komentáři

Přihlášení



Audioknihy

Jsme milovníci audio knížek, kterých aktuálně máme zakoupených 426. Poslech všech dohromady zabral přes 5945 hodin.

Z tohoto množství jsme si již stihli poslechnout téměř 48% tedy 203 audioknih.

Aktuálně poslouchaná audioknihakniha je Orlova kořist

Poslední hodnocenou audioknihou je Marek Dvořák: Mezi nebem a pacientem Hodnocení audioknihy 4/5.

Nejlépe hodnocenou audioknihou je Astronautův průvodce životem na Zemi Hodnocení audioknihy 4/5.

Reklama