Friday, May 5, 2017

ESP8266 IR Remote

Control your appliances (e.g. TV and AV systems) via WiFi+IR.




Arduino code:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <IRremoteESP8266.h>
IRsend irsend( 14 /*GPIO pin*/);
ESP8266WebServer server(80);
const char* ssid = "........";
const char* password = "........";
// soft access point (as backup)
static const char *softAPssid = "ir-remote";
static const char *softAPpassword = "12345678";
static const char *indexhtml = "<html>\n"
"<head>\n"
"<title>IR remote</title>\n"
"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"
"</head>\n"
"<style media=\"screen\" type=\"text/css\">\n"
"table{width:100%;}\n"
"button{display: block; width:96%; padding:12px; margin: 4px; font-weight:bold; font-size:1.5em;}\n"
"</style>\n"
"<body>\n"
"<script type=\"text/javascript\">\n"
"function req(cmd)\n"
"{ var xmlHttp = new XMLHttpRequest();\n"
"console.log(cmd);\n"
"xmlHttp.onreadystatechange = function(){}\n"
"xmlHttp.open(\"GET\", cmd, true);xmlHttp.send(null); }\n"
"var intervals = {};\n"
"function pressed(cmd){ req(cmd); intervals[cmd] = setInterval(function() { req(cmd); }, 250); }\n"
"function unpressed(){for (var cmd in intervals){ clearInterval(intervals[cmd]); } }\n"
"</script>\n"
"<h2>Sony AV System Remote</h2>\n"
"<table>\n"
"<tr><td><button onmousedown=\"req('power')\">POWER</button></td>\n"
"<td><button onmousedown=\"req('func')\">FUNC</button></td></tr>\n"
"<tr><td><button onmousedown=\"pressed('volup')\" ontouchstart=\"pressed('volup')\" onmouseup=\"unpressed()\" ontouchend=\"unpressed()\">VOL+</button></td>\n"
"<td><button onmousedown=\"pressed('tuneup')\" ontouchstart=\"pressed('tuneup')\" onmouseup=\"unpressed()\" ontouchend=\"unpressed()\">TUNE+</button></td></tr>\n"
"<tr><td><button onmousedown=\"pressed('voldown')\" ontouchstart=\"pressed('voldown')\" onmouseup=\"unpressed()\" ontouchend=\"unpressed()\">VOL-</button></td>\n"
"<td><button onmousedown=\"pressed('tunedown')\" ontouchstart=\"pressed('tunedown')\" onmouseup=\"unpressed()\" ontouchend=\"unpressed()\">TUNE-</button></td></tr>\n"
"</table>\n"
"</body>\n"
"</html>\n";
void handleRoot() {
server.send(200, "text/html", indexhtml);
}
void handlePower() {
Serial.println("power");
irsend.sendSony(irsend.encodeSony(15, 21, 80), 15, 2);
server.send(200, "text/plain", "power");
}
void handleFunc() {
Serial.println("func");
irsend.sendSony(irsend.encodeSony(15, 105, 208), 15, 2);
server.send(200, "text/plain", "func");
}
void handleVolup() {
Serial.println("volup");
irsend.sendSony(irsend.encodeSony(15, 18, 80), 15, 2);
server.send(200, "text/plain", "volup");
}
void handleVoldown() {
Serial.println("voldown");
irsend.sendSony(irsend.encodeSony(15, 19, 80), 15, 2);
server.send(200, "text/plain", "voldown");
}
void handleTuneup() {
Serial.println("tuneup");
irsend.sendSony(irsend.encodeSony(20, 52, 16, 16), 20, 2);
server.send(200, "text/plain", "tuneup");
}
void handleTunedown() {
Serial.println("tunedown");
irsend.sendSony(irsend.encodeSony(20, 51, 16, 16), 20, 2);
server.send(200, "text/plain", "down");
}
void handleNotFound(){
server.send(404, "text/plain", "Not Found");
}
void setup()
{
Serial.begin(115200);
WiFi.begin(ssid, password);
WiFi.softAP(softAPssid, softAPpassword);
irsend.begin();
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("Soft AP: ");
Serial.println(softAPssid);
Serial.print("IP address: ");
Serial.println(WiFi.softAPIP());
if (MDNS.begin("irremote")) {
Serial.println("MDNS responder started");
}
server.on("/", handleRoot);
server.on("/power", handlePower);
server.on("/func", handleFunc);
server.on("/volup", handleVolup);
server.on("/voldown", handleVoldown);
server.on("/tuneup", handleTuneup);
server.on("/tunedown", handleTunedown);
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}
view raw IRremote.ino hosted with ❤ by GitHub


References:
markszabo/IRremoteESP8266
Sony IR codes
Sony SIRC protocol





2 comments:

  1. Thanks for posting useful information.
    Yaaron Studios is one of the rapidly growing editing studios in Hyderabad. We are the best Video Editing services in Hyderabad. We provides best graphic works like logo reveals, corporate presentation Etc. And also we gives the best Outdoor/Indoor shoots and Ad Making services.
    Best video editing services in Hyderabad,ameerpet
    Best Graphic Designing services in Hyderabad,ameerpet­
    Best Ad Making services in Hyderabad,ameerpet­

    ReplyDelete