There are many devices that use infrared remote controls – TV’s, DVD players, cameras, power sockets. So getting a Raspberry Pi to be able to send remote control signals opens up many possibilities for projects. Combining the GPIO pins with a web server on the Raspberry Pi means that we can create a web UI to control these devices.
Installing LIRC on the Raspberry Pi
One of the great things about running a Linux operating system on the Raspberry Pi is that it provides access to a wealth of software projects that can run on the device. One of these is the Linux Infrared Remote Control (LIRC) project that provides a way of receiving and transmitting IR signals from many remote controls. LIRC provides a method of recording signals from a remote control and storing them in a configuration file, so that they can be sent directly from the Raspberry Pi.
Installing LIRC on the Raspberry Pi needs the latest firmware to be on the Raspberry Pi. One of the clearest guides I’ve found on the process of updating your firmware and installing LIRC is on Alex Bain’s site. That walks you through the process of installing LIRC and getting the initial configuration done.
IR Receiver and Transceiver Circuits
Once LIRC is set up, we need to set up an infrared receiver and transmitter circuit.
The receiver circuit is the simplest to set up. I’ve used a TSOP382, but check the data sheet for your IR receiver as the pins for ground and Vcc are sometimes the other way round. If you connect those pins incorrectly you could fry the IR receiver. Also, note that I’m connecting the Vcc pin to 3.3V as the TSOP382 works fine on that voltage.
The Adafruit site has a great walkthrough of testing and using an IR receiver.
The IR transmitter circuit is a bit more complex as the current output from the Raspberry Pi GPIO pins will only give you a very weak signal from the IR transmitter LED. If you search on the Internet you’ll find a number of different circuits that you can use to amplify the signal so that you can get a few meters distance of signal from your IR LED.
‘m sure sure what the IR LED I’ve used as I rescued it from a Sony DVD remote control. In terms of the components to use for the circuit, you’ll find a number of options. I used the components that I had available (Q1=BC547 transistor, R1=220ohm, R2=omitted as I didn’t have a low enough resistor). Though I haven’t measured the range of the signal, it works fine from 4m away from the devices.
Once LIRC is setup and you can configured at least one remote, sending commands to through the IR LED is as simple as:
# device command irsend SEND_ONCE Humax KEY_POWER
Of course, we don’t want limit people to controlling the TV by ssh-ing into the Raspberry Pi to change the channel. So we need a web-based UI that people can access through a computer, tablet or smart phone.I got my 11-year old son to work on a design using Inkscape so that I’d have an SVG image that I could use as the web interface on an HTML5 web page. After a few iterations on the design, we came up with this:
The advantage of using an SVG file is that it will scale naturally with the device that it is viewed one, so should work well on a smartphone’s 4-inch screen as well as on a 20-inch monitor.
Flask Web Application
The web application has been written using the Flask micro-framework, similar to my previous post. This time, the application reads the LIRC config file (/etc/lirc/lircd.conf) and gets the names of the devices that have been configured, and presents them to the user.
For more detail: Web-based IR Remote on the Raspberry Pi