Introduction: You Can Turn on the TV at ANY TIME.

IoT era.

Many things can be controlled remotely. Bluetooth or WiFi is used to these. But I am making is too difficult and expensive. I can more easily access the IR remote module in the surrounding.

So, I decided to use the Infrared remote.

IR Gateway!

Step 1: Parts for Making It

1. Remote controller.

I use the remote controller a feature of the smartphone

2. IR Receiver

Arduino + Ethernet Shield + IR Recive Sensor(It contained in Total Sensor Board)

3. IR Transceiver

WIZwiki W7500(mbed platform) + IR Transceive Sensor(It connected with Seeed studio's interface board)

Step 2: Flow

You can turn on the TV at everywhere.

1. Press the power button on the remote control.

2. Arduino + IR receiver reads the IR value. (ex, 0x20 0xDF 0x10 0xEF)

3. Arduino + ethernet shield is transmitted to the server in a specified format.

(NEC, 0010 0000 1101 1111 0001 0000 1110 1111)

4. WIZwiki-W7500 TCP server receives a fixed format.

(NEC, 0010 0000 1101 1111 0001 0000 1110 1111)

5. Binary Format Conversion

0000 0100 1111 1011 0000 1000 1111 0111

6. And it transmits the IR data. Because Bits are stored in reverse order.

Final HEX values: 0x04 0xFB 0x08 0xF7

Step 3: Can My TV Get the Same Value Via Direct and Indirect Path?

I tested that my TV can receive the same values from different paths.

So, I used Arduino + IR receive sensor. Then uploaded demo firmware (IRrecvDemo - Arduino example source code) author: Ken Shirriff's IRremote library(

I tested that IRrcvDemo program has received the same.

1. Direct path.

When I used my IR remote controller, IRrcvDemo program received 0x20 0xDF 0x10 0xEF when Power button pressed.

2. Indirect path.

When I used the IR library in mbed(

I sent 0x20 0xDF 0x10 0xEF, IRrcvDemo program received 0x04 0xFB 0x08 0xF7..

In both cases, IRrcvDemo program received a differnet value.

I fell into chaos.

So, I had checked Binary code.

0x20 0xDF 0x10 0xEF ==> 0010 0000 1101 1111 0001 0000 1110 1111

0x04 0xFB 0x08 0xF7 ==> 0000 0100 1111 1011 0000 1000 1111 0111

!!! An array of bits had been opposed.

So, I tried to make bits to inverse in mbed & Transceiver

Step 4: When TCP Client Sent Specific Packet to TCP SERVER&IR TRANSCEIVER

I sent the specific Packet like "NEC,00100000110111110001000011101111".(Protocol,Bit string)

W7500(TCP SERVER&IR TRANSCEIVER) can receive the right packet and send the reversed IR code.

So, IRrcvDemo program received the right data that I want.

Step 5: When I Use the IR Remote Controller

How to send specific Packet that I want.

I want to send sepcific packet like "NEC,00100000110111110001000011101111" when I pressed the Power button on my remote controller.

When I Press the power button on my remote controller, Arduino+Ethernet Shield+IR receiver can receive the data like "0x20 0xDF 0x10 0xEF".

So, I had to change to the specific format. (NEC,00100000110111110001000011101111)

Then that packet send to the TCP Server.

Step 6: Finally, When I Press the Power, Could My TV Be Received Correctly?

When I press the power,

TCP Server can receive the right packet(NEC,00100000110111110001000011101111)

AND send the reverse packet(0x04 0xFB 0x08 0xF7)


My RECEIVER(IRrcvDemo program) can receive the same data as a Direct path.

Step 7: Result.

WOW, my TV received same data in two cases.

Receiver side Source code included in this article.

And IR transceiver side Source code included in mbed repository.