22/08/2019

3 Steps to Test TV remote using ESP8266

By snorlaxprime

I have a dilema of trying to test the TV remove, but not having the TV. I have tried to point the remote to the Iphone camera but this didn’t produce anything. I remember having an infrared detector circuit but haven’t get around to make it, so here are what I have done to test and fix my broken TV remote.

Step 1. Gather the components

You will need the following components:

  • ESP8266
  • IR receiver TL1838
  • Prototype board

Step 2. Connecting the Circuit

You can connect the IR receiver to the ESP8266. The IR receiver have 3 pins, the first pin is the output which we connect to the D4 of ESP8266, the second (middle) pin is GND and the right pin is VCC, which we connect to the 3.3V of ESP8266. This is shown in the following diagram.

ESP8266 IR Receiver

The following diagram shows the pin out of the IR receiver TL1838

When the IR Receiver received any IR signal it will be transmitted to pin D4 of ESP8266 to be decoded. The remote that I have have some intermittent problem with the power ON/OFF switch, so you can imagine how annoying that is.

Step 3. Load the Sketch to ESP8266

Once you have connected the circuit, it is time to load the following sketch to the ESP8266.

/*
 IRremoteESP8266: IRrecvDump - dump details of IR codes with IRrecv
 An IR detector/demodulator must be connected to the input RECV_PIN.
 Version 0.1 Sept, 2015
 Based on Ken Shirriff's IrsendDemo Version 0.1 July, 2009,
 Copyright 2009 Ken Shirriff, http://arcfn.com
 JVC and Panasonic protocol added by Kristian Lauszus
 (Thanks to zenwheel and other people at the original blog post)
 LG added by Darryl Smith (based on the JVC protocol)
 */ 
 #ifndef UNIT_TEST
 #include <Arduino.h> 
 #endif
 #include <IRremoteESP8266.h>
 #include <IRrecv.h>
 #include <IRutils.h> 
 // an IR detector/demodulator is connected to GPIO pin 2 (D4)
 uint16_t RECV_PIN = 2;
 IRrecv irrecv(RECV_PIN);
 decode_results results;

 void setup() {
   Serial.begin(115200);
   irrecv.enableIRIn();  // Start the receiver
 }
 void dump(decode_results *results) {
   // Dumps out the decode_results structure.
   // Call this after IRrecv::decode()
   uint16_t count = results->rawlen;
   if (results->decode_type == UNKNOWN) {
     Serial.print("Unknown encoding: ");
   } else if (results->decode_type == NEC) {
     Serial.print("Decoded NEC: ");
   } else if (results->decode_type == SONY) {
     Serial.print("Decoded SONY: ");
   } else if (results->decode_type == RC5) {
     Serial.print("Decoded RC5: ");
   } else if (results->decode_type == RC5X) {
     Serial.print("Decoded RC5X: ");
   } else if (results->decode_type == RC6) {
     Serial.print("Decoded RC6: ");
   } else if (results->decode_type == RCMM) {
     Serial.print("Decoded RCMM: ");
   } else if (results->decode_type == PANASONIC) {
     Serial.print("Decoded PANASONIC - Address: ");
     Serial.print(results->address, HEX);
     Serial.print(" Value: ");
   } else if (results->decode_type == LG) {
     Serial.print("Decoded LG: ");
   } else if (results->decode_type == JVC) {
     Serial.print("Decoded JVC: ");
   } else if (results->decode_type == AIWA_RC_T501) {
     Serial.print("Decoded AIWA RC T501: ");
   } else if (results->decode_type == WHYNTER) {
     Serial.print("Decoded Whynter: ");
   }
   serialPrintUint64(results->value, 16);
   Serial.print(" (");
   Serial.print(results->bits, DEC);
   Serial.println(" bits)");
   Serial.print("Raw (");
   Serial.print(count, DEC);
   Serial.print("): ");
 for (uint16_t i = 1; i < count; i++) {     if (i % 100 == 0)       yield();  // Preemptive yield every 100th entry to feed the WDT.     if (i & 1) {       Serial.print(results->rawbuf[i] * RAWTICK, DEC);
     } else {
       Serial.write('-');
       Serial.print((uint32_t) results->rawbuf[i] * RAWTICK, DEC);
     }
     Serial.print(" ");
   }
   Serial.println();
 }

 void loop() {
   if (irrecv.decode(&results)) {
     serialPrintUint64(results.value, 16);
     dump(&results);
     irrecv.resume();  // Receive the next value
   }
 }

Once you have uploaded the code above, the ESP8266 should be ready to receive the IR signal, and it will dump the result to the Serial output. In my case, the remote it SONY TV, and I was able to fix it by inserting an aluminium foil between the button and the PCB. This fixes the intermittent ON/OFF button problem. For some reason this type of remote ON/OFF button is problematic. I have the second SONY remote that also have the same problem.

I hope this post is useful and you can use it for further expansion, now that you can decode the IR remote, you can automate some sequence for your TV. Because ESP8266 can be connected to WiFi, all of a sudden you can control your TV from the internet. Stay tune for more of this. Please drop me a line if you have any questions and don’t forget to subscribe for more IoT related projects.