Interfacing a Linux laptop to household appliances.

Interfacing a Linux laptop via the parallel port.

Disclaimer: Hooking non-standard hardware up to PCs, especially anything connected to the mains supply, means you are prepared to take the risk of frying your PC, or even worse, you. I cannot accept responsibility for anyone going away and frying PC's or themselves. I am merely putting this information on the web, to show what is possible. Experiment at your own risk.


Well, it just had to be done. Using a parallel port only for printing seemed a bit tame, so I started thinking about what else I could interface to a Linux box ? It took all of a few seconds for me to realise the answer was "Lots".

I needed to use my Linux laptop (Omnibook 800) for data acquisition of telemetry data from rocket launches, sensor data from static tests, and also as the launch control system for rockets, so I needed to interface to the parallel port. This got me thinking, if I was going to be interfacing to non-computer external hardware, why not interface to household appliances ?

Initially, basic on/off control of household appliances would present a worthy challenge I thought. That narrowed down the number of controllable household appliances to just about everything; Washing machine, lights, TV, VCR, Toaster, Blender, Thermostat, Fridge, Freezer. O.K. you could do this using X-10, but I wanted to be inventive.

Computer Hardware Used.

Interfacing Hardware Used.

Interfacing Tools Used.

Table 1: Parallel port pinouts
Pin Number Purpose
12DCD #2
13CTS #2
14Txd #2
15Tx Clock
16RXD #2
17Rx Clock
19RTS #2
21Signal Quality Detect
22Ring Detect
23Data Rate Select
24TX Clock


The code neccessary for the input and output to the parallel port is trivial in C. Whilst C is not always the most user friendly of programming languages, in this case, the code is so small, that it is easy (hopefully) to understand. The plan of action was as follows:

  1. Write C code to read input/send output to hardware devices via the parallel port.
  2. Write browser interface to control the C code.
  3. Write a Tcl/Tk GUI interface, for non-browser GUI control of the C control code.
  4. Write a Java GUI interface, for control of the C control code.
  5. Write Java version of the C control code and integrate into the Java GUI code.


By the time the interfacing was done, the most important lesson learnt was that whilst it was an interesting learning experience, using X-10 for home automation, and more specifically, the CM12U RS-232 to X-10 interface module and some software in C, Java or Perl is far more productive in the long run.