It seems like the major phone manufacturers are moving away from built in IR blasters so I'm looking for a way to future-proof my "dumb" devices that don't currently integrate with my IoT infrastructure. I have a mesh-networked smart home, but I need to find a physical remote to turn on my TV? There has to be a better way.
I recently built an IR blaster that controls stand alone air conditioners in my house and another previous project was a connected HVAC vent with an android connected webapp. Essentially, all I need to do is combine these two things into a web-connected IR blaster with a webapp frontend so I can press buttons on my phone and have IR signals sent to my media centers. These can be deployed in every room and controlled anywhere from a single interface, so the applications for this are extreamly broad.
I grabbed some unused hardware and wired up everything I'd need to get connected to my WiFi, accept HTTP connections and send IR signals.
This worked just fine in that I could request a specific URL on the IP assigned to the ESP8266 and have the Arduino output a "Power" signal to the IR LED. I just needed to find out where to host the webapp, have that send the URLs to the IR blaster and then have those requests parsed into specific IR codes. This was very tedious to do using AT commands with the ESP8266, and there was something causing a 1-2 second delay between sending the request and the LED blinking.
I went ahead with the NodeMCU ESP8266 dev board because it has onboard power regulation, USB to serial interface, and plenty of I/O pins in this small package (it's also breadboard friendly). It turns out there is already an ESP8266 WebServer library that accepts GET requests that I was able to adapt for sending IR codes and the regular IRremote library works out of the box.
The ESP8266 on the NodeMCU isn't powerful enough to host the webapp itself, so I'll run it on an underutilized C.H.I.P. $9 computer that is already running to my home network. Another limitation is that the ESP8266 is that it's a 3.3v board, so the IR LEDs driven directly from an I/O pin were very dim and had to be right next to the appliance it was sending a signal to. I instead used the I/O pin to drive an npn transistor to switch the 5v supply voltage on/off.
After doing some research, I found a great tutorial for implementing a REST API for Arduino to control LEDs on adafruit. I used their JavaScript and PHP files to submit the cURL requests and loaded that on the CHIP which is already running apache but could just as easily be hosted in the cloud. After creating a basic HTML page for the remote control, I added the manifest.json and icon files so it can run as a native webapp on an Android phone.
On the Arduino side, I trimmed down the webserver to just accept a GET request, parse the URL, send a 200 OK, and then disconnect. Based off the URL, the Arduino would send the IR code that was mapped to the button pressed.
Everything is working flawlessly with zero delay. I discovered that the IR LEDs I'm using have a very narrow angle, so I have to be careful that they are pointed correctly. Some industrial velcro lets me mount it under a shelf, out of sight, and makes sure it stays pointed at the IR receivers on the other end. I added some thick gauge wire to the LED leads so they can be fine tuned.
Having resistors for the IR LEDs caused them to be almost unusable, so the transistor is powering them with an unregulated 5v. This allows me to bounce IR off walls and mount the blaster across the room, but will definitely have an effect on longevity. I'm hoping that since they are used very infrequently and the IR signals are super short pulses (lower duty cycle than most dim PWM signals) I won't need to replace the LEDs for some time. I made sure to order some wide angle and higher output IR LEDs for version 2, so when these finally die, I'll replace them along with an inline resistor.
I use this every day and it has worked flawlessly. I've even added a second device in our family room to control our window AC unit and another TV.
Plans for the future:
This small connected IR blaster is slowly filling the gap between my smart home and legacy appliances.
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
![]() |
|
It seems like the major phone manufacturers are moving away from built in IR blasters so I'm looking for a way to future-proof my "dumb" devices that don't currently integrate with my IoT infrastructure. I have a mesh-networked smart home, but I need to find a physical remote to turn on my TV? There has to be a better way.
I recently built an IR blaster that controls stand alone air conditioners in my house and another previous project was a connected HVAC vent with an android connected webapp. Essentially, all I need to do is combine these two things into a web-connected IR blaster with a webapp frontend so I can press buttons on my phone and have IR signals sent to my media centers. These can be deployed in every room and controlled anywhere from a single interface, so the applications for this are extreamly broad.
I grabbed some unused hardware and wired up everything I'd need to get connected to my WiFi, accept HTTP connections and send IR signals.
This worked just fine in that I could request a specific URL on the IP assigned to the ESP8266 and have the Arduino output a "Power" signal to the IR LED. I just needed to find out where to host the webapp, have that send the URLs to the IR blaster and then have those requests parsed into specific IR codes. This was very tedious to do using AT commands with the ESP8266, and there was something causing a 1-2 second delay between sending the request and the LED blinking.
I went ahead with the NodeMCU ESP8266 dev board because it has onboard power regulation, USB to serial interface, and plenty of I/O pins in this small package (it's also breadboard friendly). It turns out there is already an ESP8266 WebServer library that accepts GET requests that I was able to adapt for sending IR codes and the regular IRremote library works out of the box.
The ESP8266 on the NodeMCU isn't powerful enough to host the webapp itself, so I'll run it on an underutilized C.H.I.P. $9 computer that is already running to my home network. Another limitation is that the ESP8266 is that it's a 3.3v board, so the IR LEDs driven directly from an I/O pin were very dim and had to be right next to the appliance it was sending a signal to. I instead used the I/O pin to drive an npn transistor to switch the 5v supply voltage on/off.
After doing some research, I found a great tutorial for implementing a REST API for Arduino to control LEDs on adafruit. I used their JavaScript and PHP files to submit the cURL requests and loaded that on the CHIP which is already running apache but could just as easily be hosted in the cloud. After creating a basic HTML page for the remote control, I added the manifest.json and icon files so it can run as a native webapp on an Android phone.
On the Arduino side, I trimmed down the webserver to just accept a GET request, parse the URL, send a 200 OK, and then disconnect. Based off the URL, the Arduino would send the IR code that was mapped to the button pressed.
Everything is working flawlessly with zero delay. I discovered that the IR LEDs I'm using have a very narrow angle, so I have to be careful that they are pointed correctly. Some industrial velcro lets me mount it under a shelf, out of sight, and makes sure it stays pointed at the IR receivers on the other end. I added some thick gauge wire to the LED leads so they can be fine tuned.
Having resistors for the IR LEDs caused them to be almost unusable, so the transistor is powering them with an unregulated 5v. This allows me to bounce IR off walls and mount the blaster across the room, but will definitely have an effect on longevity. I'm hoping that since they are used very infrequently and the IR signals are super short pulses (lower duty cycle than most dim PWM signals) I won't need to replace the LEDs for some time. I made sure to order some wide angle and higher output IR LEDs for version 2, so when these finally die, I'll replace them along with an inline resistor.
I use this every day and it has worked flawlessly. I've even added a second device in our family room to control our window AC unit and another TV.
Plans for the future:
This small connected IR blaster is slowly filling the gap between my smart home and legacy appliances.