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.
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.
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);
}
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.
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.
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
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.
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
Vložit komentář
* - vyžadované údaje. RSS kanál s komentáři