John Holbrook


Using the RCX Today

Last updated: September 2020

Despite being the oldest of the three Mindstorms programmable bricks, the RCX remains my favorite. I love its simplicity, small size, and its relative reliance on traditional LEGO® studs, rather than Technic beams. However, using an RCX is in some ways harder and more complicated than when it was first released in 1998. This article will attempt to summarize some of the equipment, software, and techniques necessary to use an RCX in 2017.


Why use an RCX?

There are several reasons you might want to use an RCX instead of an NXT or EV3:


Hardware Guide

RCX Brick

The RCX brick comes in 3 hardware revisions:

1.0 - The original. The only revision to include a power input jack, so that in addition to 6 AA batteries, it can also be powered by a 9-12V AC power supply. (Yes, you read that right: It's an AC input).

1.5 (also called 1.1) - Included with the Robotics Invention System (RIS) 1.5 set. Identical to the 1.0 brick except that the power input jack has been removed. Officially, the 1.5 brick is also called an 1.0 brick, but with a serial number greater than approximately 300000.

2.0 - Identical to the 1.5 brick except that the IR interface operates at twice the frequency (76 kHz instead of 38 kHz). This has the effect of slightly reduced range, but enables the 2.0 brick to talk to Spybotics products.

Update 11 July 2020: The "serial number greater than 300000" thing seems to not be quite true - and in fact any reference to it seems to have been removed from the stackexchange thread linked above. Leonardo Verde has been doing some research on RCX serial numbers, and is collecting data about the type and serial number of many RCX bricks in this form. He's also shared the results with me; here's a snapshot at the time of writing:

Total Responses 126
Number of 1.0 bricks 66
Highest 1.0 serial number 990439
Lowest 1.0 serial number 284
Number of 1.5 bricks 21
Highest 1.5 serial number 585813
Lowest 1.5 serial number 356161
Number of 2.0 bricks 39
Highest 2.0 serial number 996764
Lowest 2.0 serial number 514846
So it looks like 1.5 bricks do reliably have a serial number over 300000, but 1.0 bricks can have such serial numbers too.

Aside from those diffrences, all hardware revisions are functionally identical, and all firmware versions are compatible with all hardware revisions. I tend to favor the 1.0 brick due to the inclusion of the power input, and in any case the 1.0 seems to be the most commonly-available brick online.
RCX 1.0 brick, from all sides. The 1.5 brick is identical except that there's no power jack at the bottom.The 2.0 brick is identical except that there's no power jack at the bottom and it says "RCX 2.0" instead of "RCX 1.0".

Infrared Tower

The infrared tower is used to send programs from a computer to the RCX, and data from the RCX back to the computer for logging. There are two models of infrared tower. One connects via a DE-9 serial port and requires a 9-volt battery, while the other connects over USB, and can get enough power from that so as to not require a battery. The USB model is more convenient to use (due to the lack of additional battery), and seems to be more readily available online.

Two IR towers: USB on the left; Serial on the right.
📷: Brickipedia (USB/Serial)

USB Infrared Tower on 64-bit Windows

Thanks to Reddit user MindS1 for correcting a previous error in this section.

A general-puspose Windows driver for the USB tower is only available for 32-bit Windows. For 64-bit Windows, there is this driver available, but it's only compatible with "ROBOLAB for LabView". Note that "ROBOLAB for LabView" requires an existing installation of LabView, and is not the same thing as "ROBOLAB".

If you want to program an RCX brick from 64-bit Windows using any other software (ROBOLAB, ROBOTC, NQC, etc.), you can do so with a serial IR tower (and a USB-to-DB-9 adapter cable, if needed).

Motors

RCX-compatible motors come in 2 shapes, which I'll call "rectangular" and "cubic". The cubic motors appear in more sets, and are in my opinion easier to work with.

Left: rectangular motor (2838c01). Right: cubic motor (71427c01 /43362c01).
Cubic motors come in 2 hardware revisions. However, unlike the RCX brick, there are no visual cues on the outside of the motors to tell the hardware revisions apart. The primary difference between the 2 revisions is that the older motors use internal gears made of metal, whereas in the newer motors the internal gears are made of plastic. As a result, the older hardware revision is more durable. It's also heavier, which is the best way to tell the difference between the two hardware revisions. You'll see the older revision described on Bricklink as "Older, heavier weight" and the newer revision described as "Newer, lighter weight".

Lots more technical info about RCX motors (and other LEGO motors) can be found here.

Sensors

The first-party sensors available for the RCX are Light, Rotation, Touch, and Temperature. In addition, a number of third-party sensors are available, and LEGO® also produced a "DCP Sensor Adapter" which converted the RCX connector to a 7-Pin DIN socket compatible with LogIT Microsense scientific sensors made by DCP Microdevelopments.

Clockwise from bottom left: Light sensor, rotation sensor, temperature sensor, touch sensor

Wires

The wires used for connecting motors and sensors to the RCX brick are terminated at either end with a 2x2x2/3 brick with electrical contacts on the top and bottom. Wires are available in lengths of 15, 17, 20, 21, 26, 36, 46, 69, 162, and 378 studs (1 stud = 8 mm = 0.315 in). Every first-party sensor except for the touch sensor comes with a short wire permenantly affixed to the sensor.

Wire connector for RCX motors and sensors, seen from the top (at left) and bottom (at right)

Remote

There also exists an infrared remote control, which can control the motor outputs of the RCX brick in real time without the need for programming.

RCX remote.
📷: Brickipedia (link)


Buying an RCX

If you don't already have an RCX, you'll need to buy a brick and an infrared tower. You'll probably also want to buy some combination of motors and sensors, depending on your application.

Buying a set

If you're new to Mindstorms, you'll probably want to buy a set containing a bunch of parts. eBay and Bricklink are both good places to buy RCX sets online.

The following sets contain RCX bricks:

Set Set Name RCX Brick Version Motors Included Sensors Included IR Tower Included
9790 ROBOLAB Team Challenge Set 1.0 2 old cubic† 2 touch, 1 light Serial
9719 Robotics Invention System 1.0 1.0 2 old cubic† 2 touch, 1 light Serial
9785 ROBO Technology Set (Serial)* 2.0 2 old cubic† 2 touch, 1 light Serial
9786 ROBO Technology Set (USB)* 2.0 2 old cubic† 2 touch, 1 light USB
9793 ROBOLAB Team Challenge Set (Serial)* 2.0 2 rectangular 2 touch, 1 light Serial
9794 ROBOLAB Team Challenge Set (USB)* 2.0 2 rectangular 2 touch, 1 light USB
3804 Robotics Invention System 2.0 2.0 2 old cubic† 2 touch, 1 light USB
*Sets 9785/9786 and 9793/9794 are identical to each other except for the type of the IR tower.
†LEGO changed the production method of the cubic motors with little fanfare, and in the middle of production of various sets. Thus, it's hard to tell whether a set you buy will contain the older or newer cubic motors, especially when purchasing a newer set (lookin' at you, 3804).
The ideal set would be one that contains an RCX 1.0 brick, older cubic motors, and a USB IR tower. As you can see, such a set doesn't exist. So, you'll have to decide which of those features you care about most and which you could do without. Alternatively, you could purchase either set 9790 or 9719 and supplement that with a USB IR tower, which can be indiviually purchased for relatively little online.

Buying individual parts

If you already have a bunch of LEGO® elements, you can save some money by buying only the electronic components you want. In my experience, Bricklink is the best place to buy individual Mindstorms components (or individual LEGO® components of any kind). Here are links to all the parts I've mentioned:

Name Part number Link
RCX 1.0 brick 884a Link
RCX 1.5 brick 884b Link
RCX 2.0 brick 884c Link
IR Tower (USB) x431c01 Link
IR Tower (Serial) 9713 Link
Rectangular motor 2838c01 Link
Cubic motor, old 71427c01 Link
Cubic motor, new 43362c01 Link
Light sensor 9758 Link
Rotation sensor 9756 Link
Temperature sensor 9755 Link
Touch sensor 9757 Link
DCP Sensor Adapter 9917 Link
Wire (general search) Various (most starting with 5306bc or 5306ac) Link
Remote control 9738 Link


Programming an RCX

Windows

In my experience, programming an RCX brick is most easily done from a computer running Windows. Several languages are available. On 64-bit versions of Windows, the USB IR tower can only be used by "ROBOLAB for LabView"; see above for more info.

ROBOLAB is the best of a couple of pieces of software officially distributed by LEGO for programming RCX bricks. It's based on National Instruments LabView, and unlike later LabView-based Mindstorms software (NXT-G and EV3-G), the visual resemblence is striking. The latest version of ROBOLAB is 2.9.4c, though version 2.5.4 is similar; the primary difference is that 2.9.4c can also program NXT bricks. Unfortunately, it can be pretty difficult to get ahold of a copy of ROBOLAB these days if you don't already have one; relatively few copies are available on Bricklink, and can go for upwards of $50. Note that after installing v2.9.4 from a CD, you'll want to also install the 2.9.4c patch, which can be found here.

These days, I do most of my RCX programming in ROBOTC. As the name implies, ROBOTC is a C-based language designed for robotics; versions of ROBOTC are also available for NXT/EV3 programmable bricks, VEX IQ "robot brain", VEX Cortex/Pic microcontrollers, and Arduino. Support for the RCX is not included with current versions of ROBOTC; however, a legacy RCX version is available, and this has the added advantage of being free, whereas other versions of ROBOTC are not. ROBOTC also comes packaged with a pretty good Integrated Development Environment, and lots of help and resources are available to learn how to use it, because of the support for many popular educational robotics platforms.

Another C-based language for the RCX is NQC ("Not Quite C"). One of the oldest third-party languages for the RCX, NQC has the advantage of working on all three popular desktop operating systems, and developer Dave Baum has written several books about the RCX system, which include information about NQC and its use. Another advantage of NQC is that it uses the stock firmware on the RCX (i.e., the same as used by ROBOLAB), unlike ROBOTC or LeJOS.

For people who prefer programming in Java, there's LeJOS. Short for "LEGO Java Operating System", versions of LeJOS are also available for the newer NXT and EV3 bricks, and LeJOS has proven to be one of the most popualr languages for third-party RCX programming.

Several other languages exist for the RCX, with which I am less familiar or which are hard to find nowadays. These include:

Bricxcc is a popular Mindstorms IDE for Windows which supports programming the RCX using NQC, LeJOS, brickOS, and other languages.

Linux

As far as I'm aware, there are no GUI Linux applications for controlling the RCX. However, if you're comfortable with the command line (and if you're a linux user, you probably are), there are several choices. These include:

It's worth noting that drivers for the USB IR tower are included with essentially all versions of the Linux kernel released in the last 10 years or so.

Mac

If you have a modern Mac, the easiest thing to do is to program your RCX in a Windows virtual machine (using a piece of software like VirtualBox, VMWare Fusion, or Parallels). I've run various versions of ROBOLAB and ROBOTC in a virtual machine on various Macs, with no apparent loss of functionality.

Mac software for programming RCX bricks does exist, but is generally either classic Mac OS software or OS X software compiled for PowerPC, meaning that it won't run on modern Macs. However, if you have an older Mac running Mac OS 9 or an older version of OS X (10.5 or older for running PowerPC software, 10.4 or older for running classic Mac OS software), it is often still possible to program an RCX natively on a Mac.

LEGO released versions of ROBOLAB for the Mac, and versions 2.5.4 and 2.9.4 are available as native OS X software compiled for PowerPC. As far as I'm aware, the functionality of Mac versions of ROBOLAB is identical to the corresponding version on Windows, though I've never used v2.9.4 for mac. ROBOLAB for Mac is even harder to find online than ROBOLAB for Windows, although it appears that later versions of the software were distributed on a single disc containing both Windows and Mac versions of the software.

NQC, LeJOS, and brickOS all have varying degrees of compatibility with OS X. Sometimes, compiled versions of the software are available for the Mac; other times, it's necessary to compile the software yourself. I'm not aware of any Mac IDEs for any of those languages; the NQC website links to a Mac NQC IDE called MacNQC but the link is dead at the time of writing.

Since pbForth compiles and runs code on the RCX itself, all that's necessary to use it on a mac is the ability to send plaintext files from the mac to the RCX, which can be accomplished with NQC.


Resources

If you know of any other resources that should be added to this list, feel free to let me know by dropping me an email.

Hardware/Building Guides

Software/Hacking

Sharing

General/Miscellaneous

Books

I haven't read these books, and they were published near the time of release of the RCX, so some of the information may now be obsolete or irrelevant.


Frequently Asked Questions

Mostly compiled from searches of Quora, the Mindstorms subreddit, and the LEGO Stack Exchange.

I changed the batteries in my RCX and now all my programs are missing! What happened?

The RCX's programs and firmware are stored in RAM. This made the brick cheaper to manufacture, because RAM was much cheaper than flash storage in the 1990s. However, a downside of RAM is that it needs to be continuously powered to retain the data it's storing. Thus, when power is cut to the RCX, such as when batteries are removed, its memory is erased, and it reverts to the default firmware and programs.

Happily, inside the RCX there is a small capacitor, which maintains power to the RAM for approximately 20 seconds after the batteries are removed. Thus, if you change the batteries within that time, the brick's memory will be preserved. Changing the RCX's batteries within 20 seconds sounds difficult, but is actually not too hard with some practice.

I read on [Website] that I can't use the USB IR tower with 64-bit Windows! Is that true?

For most applications, yes. See above for more information.

Can I send data to the RCX from a [TV remote/IR port on an old laptop/IR LED and an Arduino]?

From a TV remote, probably not, since the RCX doesn't understand data TV remote-control protocols (but you may be interested in the first-party remote control, which provides similar functionality).

But if you have direct control over what the IR LED does, yes! James Hagerman reports replicating the functionality of the LEGO IR tower with an Arduino and an IR LED and reciever, and posted a writeup about that here.

I no longer want my RCX bricks/motors/sensors! What should I do with them?

Probably the best thing to do is to sell them on eBay or Bricklink. If for some reason you don't want to do that, send me an email -- maybe I'll take it off your hands.

I want my RCX to play music!

This is a surprisingly common thing to want to do. The easiest way I know of is to find or compose a piece of music in the Ring Tone Text Transfer Language, and then use ROBOTC for RCX, which includes a tool (only visible if using menu-level "superuser") for transferring RTTTL tunes to ROBOTC commands which cause the RCX to play the described tune.

Can I use RCX motors or sensors with the NXT or EV3? What about with an Arduino or Raspberry Pi?

A converter cable is available which converts the connector used by RCX motors and sensors to the RJ12 connector used by the NXT and EV3. The NXT was designed to be backwards-compatible with RCX motors and sensors, and it's easy to do this in ROBOLAB 2.9 or NXT-G (with the download of some additional sensor blocks for NXT-G).

Unfortunately, due to the EV3 using a slightly different pinout for the sensor ports, the LEGO converter cable will not connect RCX sensors to the EV3 (more info in this stackexchange thread). Others have produced homemade converter cables which connect the sensors to the correct pins on the EV3, but in any case RCX sensors are unsupported in the official EV3 software, so use of such converters would have to be in conjunction with a third-party firmware such as LeJOS or ev3dev.

To drive RCX motors & sensors from an Arduino or RPi, there are a couple of options. First, you could use a Dexter Industries BrickPi, which adds some NXT/EV3 ports to a Raspberry Pi, and use the appropriate converter cables to connect the RCX-era devices. Alternately, the RCX motors and sensors are simple enough that it would probably be pretty easy to drive them directly. The motors expect 0-9V, and the sensors should return an analog voltage from 0-5V.

I'm having troube downloading firmware or otherwise transferring large programs or files to the RCX!

In my experience, the most common cause of communications failures is interference from bright room or outside light. When downloading firmware or large files to the RCX, I find it helpful to place a box or other opaque structure over the RCX and IR tower in order to prevent visible light interference.

Further discussion of other causes of communications failure can be found in this stackexchange thread.


Update Log

From time to time, I update this page to correct errors or add new information: