Proiect WiFi TV Remote

Proiectul își propune realizarea unei telecomenzi de televizor prin WiFi – un dispozitiv de conversie a comenzilor WiFi în comenzi prin infraroșu specifice unei telecomenzi obișnuite.

Proiectul utilizează un Led Brick Telecomandă Infraroșu:

led-infrarosu

https://www.robofun.ro/electronice/led/led-telecomanda-infrarosu

Această componentă ne va permite să transmitem comenzile către dispozitivul comandat – televizor sau alt dispozitiv care utilizează o telecomandă prin infraroșu.

Pentru implementarea conectivității WiFi proiectul va utiliza o placă de dezvoltare bazată pe controlerul WiFi ESP8266 și anume placa NodeMCU. Chiar dacă nu este o placă din familia Arduino această placă poate fi programată cu ajutorul mediului de dezvoltare Arduino IDE Placa funcționează la 3.3V și se poate alimenta prin intermediul conexiunii USB.

nodemcu

https://www.robofun.ro/wireless/wireless-wifi/NodeMCUv2-ESP8266

Pentru configurarea mediului Arduino IDE se pot urma pașii descriși în materialul ”Quick Start to Nodemcu (ESP8266) on Arduino IDE”:

http://www.instructables.com/id/Quick-Start-to-Nodemcu-ESP8266-on-Arduino-IDE/

Pentru a putea comanda componenta LED Brick vom utiliza o bibliotecă specifică plăcii de dezvoltare NodeMCU – biblioteca IRremoteESP8266 (o adaptare a bibliotecii IRremote pentru ESP8266). Această bibliotecă trebuie instalată separat de componentele specifice plăcii de dezvoltare, adresa de la care poate fi descărcată este:

https://github.com/markszabo/IRremoteESP8266

Schema de interconectare între placa de dezvoltare și modulul LED Brick este simplă:

wifiremotetv_bb

 

Schema de interconectare utilizează un tranzistor NPN 2N3904 pentru a amplifica comanda dată de pinul plăcii de dezvoltare. Astfel pinul IN al LED Brick-ului se va conecta la pinul Vin al plăcii de dezvoltare (este pinul de 5V al alimentării USB) și pinul GND la colectorul tranzistorului. Emitorul tranzistorului se va conecta la masă (GND) și baza va prelua, prin intermediul unui rezistor, comenzile provenite de la pinul D5 (GPIO14) al plăcii de dezvoltare.

O variantă electronică a schemei de interconectare arată în felul următor – rezistorul R2 (180ohm) este integrat în modulul LED Brick:

wifiremotetv_schem

Sistemul va permite trimiterea de comenzi prin infraroșu prin intermediul unei interfețe web simple accesibilă de pe orice sistem (PC sau telefon mobil inteligent) aflat în aceiași rețea ca și sistemul WiFi TV Remote:

screenshot

 

Accesarea interfeței web se poate face cu ajutorul unui client web (browser) accesând adresa IP a sistemului NodeMCU – adresa se preia dinamic (prin DHCP) de către sistem și este afișată în Serial Monitor la pornirea sistemului.

screenshot2

Programul sistemului va utiliza bibliotecile software IRremoteESP8266 (trebuie instalată) și ESP8266WiFi (parte componentă a instalării extensiei ESP8266 pentru mediul Arduino IDE):

#include <IRremoteESP8266.h>

#include <ESP8266WiFi.h>

În program trebuie personalizate datele de conectare la rețeaua WiFi:

const char* ssid = “…..”;

const char* password = “….”;

Comanda către LED Brick se va transmite prin intermediul pinului D5 (GPIO14):

 IRsend irsend(14);

WiFiServer server(80);

În cadrul secțiunii setup() se va inițializa comunicația serială, comunicația cu LED Brick, se va realiza conexiunea WiFi și se va porni componenta web server:

 void setup()

{   Serial.begin(9600);

irsend.begin();

Serial.print(“Connecting to “);

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

 delay(500);

Serial.print(“.”);

}

Serial.println(“”);

Serial.println(“WiFi connected”);

server.begin();

Serial.println(“Server started”);

Serial.println(WiFi.localIP());

}

În cadrul secțiunii loop() se vor prelua și trata solicitările web (http) provenite de la clienți:

void loop()

{ WiFiClient client = server.available();

if (!client) return;

Serial.println(“new client”);

while(!client.available()){ delay(1); }

String request = client.readStringUntil(‘\r’);

Serial.println(request);

client.flush();

 

Programul implementează trei comenzi specifice unei telecomenzi SONY (Power, P+ și P-). Pentru aflarea altor coduri (pentru alte butoane / pentru alte tipuri de televizoare) se poate consulta materialul ”Telecomanda Universala IR cu Arduino”:

https://www.robofun.ro/forum/viewtopic.php?f=16&t=454

 

if (request.indexOf(“/COMMAND=POWER”) != -1) {

for (int i = 0; i < 3; i++) {

irsend.sendSony(0xa90, 12); // Sony TV power code

delay(40);

}

}

if (request.indexOf(“/COMMAND=PP”) != -1) {

for (int i = 0; i < 3; i++) {

irsend.sendSony(0x90, 12); // Sony P+

delay(40);

}

}

if (request.indexOf(“/COMMAND=PM”) != -1) {

for (int i = 0; i < 3; i++) {

irsend.sendSony(0x890, 12); // Sony P-

delay(40);

}

}

client.println(“HTTP/1.1 200 OK”);

client.println(“Content-Type: text/html”);

client.println(“”);

client.println(“<!DOCTYPE HTML>”);

client.println(“<html>”);

 client.println(“<h1>WiFi TV Remote</h1>”);

 client.println(“<br>”);

client.println(“Click <a href=\”/COMMAND=POWER\”>here</a> to turn ON/OFF the TV<br>”);

client.println(“Click <a href=\”/COMMAND=PP\”>here</a> to change the program [+]<br>”);

client.println(“Click <a href=\”/COMMAND=PM\”>here</a> to change the program [-]<br>”);

client.println(“</html>”);

delay(1);

Serial.println(“Client disonnected”);

Serial.println(“”);

}

Programul a fost realizat și testat cu Arduino IDE 1.6.9, extensia ESP8266 Community 2.3.0 și biblioteca IRremoteESP8266 1.0.0.

 

Sistemul prezentat poate fi folosit și pentru a pune în practică astfel de momente:

https://youtu.be/RWxMqgkW90g

 

Proiectul poate fi completat creând o interfață web mai atrăgătoare, implementând un număr mai mare de comenzi și chiar realizând o telecomandă multi-dispozitiv (comanda mai multor dispozitive utilizând o interfață unică). Mai jos puteți găsi câteva idei de proiecte ce pot fi folosite ca sursă de inspirație:

 

ESP8266 powered Web Controlled Sony Camera Remote

https://youtu.be/D40ZpVjZ744

 

ESP8266 WiFi controlled aircon remote

http://www.instructables.com/id/ESP8266-WiFi-Controlled-Aircon-Remote/

 

Wifi Remote Control using ESP8266

http://www.instructables.com/id/Wifi-Remote-Control-using-ESP8266/

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s