Posted by: bgtwindad | November 14, 2011

LocoIO Completed!

LocoIO Completed! by BGTwinDad
LocoIO Completed!, a photo by BGTwinDad on Flickr.

What is this? This is the LocoIO board. It was designed by John Jabour and updated by Hans DeLoof, and is available from a Belgian company called “Het Spoor” (Dutch for “The Track”) as a kit for about $45 US including shipping, with the current exchange rate.

This little guy plugs into the Digitrax LocoNet, and has 16 independent I/O pins. Each of the 16 I/Os can either act as an input, generating a LocoNet message when the voltage on the pin changes, or as an output, changing its voltage in response to a LocoNet command.

What’s it for? Well, I’m going to use at least some of the I/Os to turn LED lighting on and off from my JMRI computer. I can use other pins as inputs from block occupancy detectors or control panel switches or whatever. I can even drive the flashers on a crossing gate signal if I like.

With an add-on board it can be used to drive turnout motors or solenoids, and of course the inputs can also provide direct turnout position feedback to the LocoNet.

The kit comes as a bare PC board and a bag of parts, and to build it you have to place and solder all of the parts. This may seem intimidating, but if you’re able to solder track feeders, this should be no harder than a typical model structure kit. The PCB is labeled clearly where each part goes, and aside from figuring out which resistor is which, the placement is pretty obvious. While there are a lot of pins to solder, the small size means it goes quicker and easier than rail soldering.

You may note from the picture that there’s an empty chip socket in the center. This is where the microprocessor “brain” goes. I need to do a final inspection and clean the solder flux off the board before installing this most important chip.

Assembly took about an hour, and went very smoothly. Next up after cleaning and testing, I will install it on the layout and hook it up to a 12V power supply, my LocoNet, and the lights I want to control. After programming it from JMRI, I’ll be ready to use my very expensive light switch!


(Note: Edited 17-Aug-12 to add attribution to John Jabour)



  1. No criticism, but the LocoIO was originally designed by John Jabour. Hans de Loof and others have since modernised and improved the design. I have used quite a few, along with LocoBuffer, LocoServo and LocoBooster, the latter two having been designed by Hans de Loof.

    • Thanks for the correction! I certainly didn’t intend to misplace any credit. I appreciate the information.

  2. Hi,
    I recently acquired a locoIo. All the hardware works fine, but I cannot figure out how to “link” inputs/outputs of LocoIo with adresses in JMRI, I haven’t been able to find a single page about this on the web.
    My hardware config : a standalone loconet with JMRI + Locobuffer USB + LocoIO.
    Thanks for your help,
    Nicolas (from France)

    • Well, I must agree that figuring out the “trick” to programming the LocoIO was a bit of an issue at first.
      JMRI provides a tool for programming the LocoIO board. You’ll find it in the menu structure under LocoNet->Configure LocoIO.

      There are some instructions on the JMRI website at

      Unfortunately, even with those instructions I had to play with things a bit. The Programmer will let you set the base address for the LocoIO. The first thing you’ll need to know is that the newer boards come with the board address set to 0x51, not 0x50, so that can trip you up.

      So, you set the board address at the top of the dialog, and click “Probe”. You should get a note at the bottom indicating that the board was read successfully.

      Now, you’ve got 16 rows in the table. Each row corresponds to one of the I/Os on the LocoIO board. For each row, the first column is the I/O number. Choose an operating mode from the second column and then type into the third column the Turnout # (LocoNet address) or Sensor # you want to reference that I/O with in JMRI. Leave the other columns alone – they will be auto-filled in. Then click the “Write” button for that row.

      Depending on what changes you’ve made you may or may not need to turn the LocoIO board off and back on.

      So, for example, if you set I/O #1 to “Input: Block Detector, Active High” and address 101, then you would go to the Sensor Table (Tools->Tables->Sensors) and ADD a sensor with the system name LS101 (Loconet Sensor #101). Or if you set I/O#2 to “Output: Block Occupied Indication” and address 102, then in the Turnouts table (Tools->Tables->Turnouts), create a Turnout with system name LT102.

      Other parts of JMRI would then read I/O #1 by looking at LS101 and set or clear I/O #2 by throwing or closing LT102.

      It may be helpful to note that JMRI treats all hardware outputs as “Turnouts”, so even the office lights in my yard office are a “Turnout” to JMRI.

      I should write a blog post on this… 🙂

  3. Thank you very much.
    With all these explanations I was endeed able to “link” JMRI to a specific I/O and turnout.
    Thanks again.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s


%d bloggers like this: