Wednesday, May 20, 2009

The CM17A and Arduino

My first X10 project was to create an interface between the Arduino and the CM17A (aka "Firecracker"). The CM17A is a dongle that wirelessly (RF) sends X10 commands to X10 RF receivers. The receivers then send signals down the house wiring to control lights and appliances.

After many hours of Googling, I could not find any examples of an interface other than some written in assembler. However, I did find lots of good information about the protocol that is used to talk to the CM17A. With that I was able to write a small program ("sketch") that demonstrates how to have the Arduino talk to the CM17A. I wrote up an article with the explanation and example and posted it on the Arduino Playground here. It should tell you all you need to know.
I made a short video of a simple example where a TV remote is used to have the CM17A send X10 commands to a light.

Don't let the custom boards and led matrix scare you. There are much simpler ways to use the CM17A with Arduino. In a future post I will describe how it can be used to send the temperature to a home made X10 Controller.


  1. Excellent Work.
    I need to control my Room lamp with Arduino so that i can turn that lamp on/off. Is it possible?

  2. Thank you!
    What you want to do is totally possible.
    The link to the "Playground" article in the post above will give you all you need to interface the Arduino to the Firecracker. In fact since I wrote it, someone made an library out of it.
    Then all you need is an X10 RF receiver like the TM751.
    (If you don't want to dim, you can plug the lamp directly into the TM751 - otherwise you need a lamp module too.)
    Good luck on your project.

  3. Brilliant hacking. I have a X10 CM11A which I am thinking to control with an Arduino. Unfortunately I don't have a CM17A but might grab one since I've seen your success. The CM11A has a serial DB9 connection which is normally controlled by a PC. I am curious if the same protocol will work with this X10 controller. It seems logical since the the X10 Windows program is designed to control the CM11A and the CM17A.. hmm.... I guess I'll try it.



  4. The "playground" article you wrote looks like it will be a big step in the right direction for my project. Thank you!

  5. You're most welcome.
    Good to hear it helped!

  6. I cannot get the example on the playground to work using the cm11a. Any suggestions?

  7. I think it only works with a CM17A.

  8. Thanks for this information and supported libraries. Were you able to determine the codes for all lights on / off? Of course, I could loop through and do it manually for the range I use, but wondering if there is a single command that all units respond to.

  9. I believe there is a command for all on and all off. But frankly it's been years since I worked on this. I didn't need these commands so I probably didn't include them.

    As a start, look in X10Firecracker.cpp at
    prog_uint16_t cmndCode[] PROGMEM = {

    Then if look at the CM17A documentation you should find the commands to add to that section. (If I'm not mistaken ;-)

    Good luck with your project.

    1. Thanks for the reply and tip. I've got it all working nicely now, with the arduino backend web server accepting string tokens via the URL to dynamically send any house, unit, and action commands to it for processing, making it nice and easy to add / remove outlets / modules w/o having to modify the compiled sketch going forward.

      If I get a chance, for fun, I'll post a little demo, so you can see how others have benefited from your initial work. Thanks again.


  10. Good to hear. I'd be happy to link to it here if you do.

  11. cyro_fogaca@hotmail.comJuly 28, 2015 at 7:36 AM

    queria fazer controle dos x10 pelo arduino usando um website alguma dica de interface entre x10 e arduino??

  12. It doesn't look like you are trying very hard to find the answer - but maybe
    will help.