How I built an RFID device without hurting myself

At the ETech conference on emerging technology, a CNET News reporter learns that it's always easier to use a gadget than it is to build one.

Before beginning work on his RFID reader, CNET News reporter Daniel Terdiman was given a partially built breadboard, some wiring, and a serial-to-USB cable. The finished product would be a reader capable of recognizing the serial number on an RFID tag. Daniel Terdiman/CNET

SAN JOSE, Calif.--I'm staring at a table covered in circuitry, a solderless "breadboard," a bunch of wire, an antenna, and some other components--all the things I've been given to build a rudimentary RFID reader--and I'm having serious thoughts about whether I'm in the right room.

I've certainly used RFID before--tiny radio frequency ID tags are increasingly showing up in everything from grocery store items to hospital wristbands to lift tickets. But the sum total of electronics that I've made in my life is, I'm now reminding myself, zero.

And yet, over the next three hours, I've got to take all these various bits and pieces and craft them into something that not only reads an RFID tag, but also can detect and store the serial numbers of up to 102 of them in resident memory. And do so while sitting pretty much front and center of a room full of other people who seem to me very confident in their ability to complete the same task.

I'm here at ETech, the Emerging Technology conference, and I'm sitting in on a session called "Hands-on RFID for Makers." Led by Tom Igoe, a professor at New York University's Interactive Telecommunications Program (ITP), and Brian Jepson, from O'Reilly Media, the workshop is designed as a primer for people interesting in building RFID readers for use in a wide variety of situations. I thought it would be fun to sit in on the session and see how the systems work.

Only, I didn't know I'd have to wield a wire-cutter. Or for that matter, compile and error-check code. But I've come all this way, the electronics, are sitting in front of me and I don't think I can slip out without everyone noticing.

Because I'm a reporter with what are obviously very rudimentary electronics skills, Jepson has kindly given me a partially built reader, one with much of the wiring already connected, and its antenna already working. This means that while the rest of the people in the room are busy slaving away and trying to ensure that their red, black, and blue wires go in the right slots on the breadboard and that their antennas snap snugly on, I can concentrate on trying to understand the instructions for running the software that will power the reader.

It also means, however, that I'm missing part of the learning and discovery of the task. Still, I'm thinking that I just want to get through this without embarrassing myself, and so I'm happy enough at being able to skip the first part of the exercise.

This simple script (in the white window) run in Processing displayed a list of recognized serial ports. Daniel Terdiman/CNET

My first steps then are to download two programming language compilers, one called Processing and another called Arduino. These are going to power the software that will control the reader once it's finished. But before I can even get going, I'm already getting an error message saying that Processing is incompatible with Mac OS X 10.5.

Perhaps, I think, this is a sign that this really isn't the place for me. Watching everyone else tinkering away happily, I'm wondering if I might have missed a notice that there was a specific set of coding prerequisites for this workshop. But just then, Igoe stops by and explains that the error message doesn't really mean anything, and that I should just proceed.

And just then, I hear someone behind me mutter, "So basically, everything I've done is wrong," and I start to think that maybe, just maybe, I'm not the only one here who feels a little confused. That's a powerful sentiment, too, and I resolve to keep going.

Igoe is still nearby and once I get Processing running, he has me enter a line of code into the compiler: "println(Serial.list());"

I hit the run button and suddenly, Processing springs to life and spits out a list of all the serial ports it recognizes on my MacBook Pro. When I plug a cable coming out of the RFID reader into a USB port on the computer and run the program again, the list gets longer. It's working! It's recognizing the reader. Success!

It seems that the next step should be getting the program to actually recognize an RFID tag--everyone at ETech has been given a personalized tag--but any confidence I've gained from the previous step is quickly dashed as I encounter another error message: "You might be missing a library."

Electronics 101: cut and strip wire and attach circuitry to a solderless breadboard. Daniel Terdiman/CNET

Holding down my panic, I summon the wherewithal to read through the instructions and discover that, indeed, I had missed a step and had neglected to download a crucial library of commands. So I read through the instructions, get a couple of suggestions from a neighbor, and it looks like I'm good to go.

That's because when I hit the run command again, the program seems to think for a second and then up pops a very promising-looking window with the words, "Hit any key to begin reading."

I tap a key on my keyboard, and then hold up my RFID tag to the reader, and voila! The words in the window disappear and up comes the prettiest collection of meaningless letters and numbers I've seen in a long time: "BEC02480," the serial number of my tag.

Feeling great, I summon my neighbor and ask him to swipe his tag as well, and sure enough, the serial number in the window changes.

Before I can bask in my achievement, however, Igoe strides back to the front of the room and announces that our next task--we still have about 90 minutes left in the workshop, after all--is going to be to work on the read/write capabilities of the reader.

"So don't pull the wires just yet," Igoe says.

Next up, then, is to build up our readers to be able to not only recognize the RFID tags, but also to store their serial numbers. Igoe, meanwhile, is dealing with some problems a few other people are having with their code.

"For those of you who find that when you hit a key multiple times, it locks up your computer," he said, "that's because this is example code, not enterprise code."

Given that my computer isn't locking up, I'm feeling pretty good. I must be doing something right. But then Igoe follows up with a throw-away line, "I'm going to assume that everybody here can look at code on their own."

This image shows the list of recognized and stored RFID serial numbers (in the white window). This reader is storing three such IDs, and the rest of the 102 total possible stored IDs show as all zeroes. Daniel Terdiman/CNET

Glancing at my screen, and the long lines of code--which I don't understand at all--included in the program we're supposed to run, I feel my heart sink.

Still, I resolve to gather my wits and continue. And that's good, because not wasting any time, Igoe instructs us to run the second programming language, Arduino, and begin working on the breadboard to get it ready for the reading and writing part of the task. Practically speaking, he explains, the idea behind writing to the RFID tag is so that it's possible to, say, walk around a conference gathering information about other attendees, on the fly, all without having to be connected to a computer.

It's time to build again, and this time, I'm not in possession of a pre-built board. This time, I realize, I'm going to have to swim on my own. Jepson comes by and gives me a hand, showing me how to attach the wires, and where to put a couple of them.

And the next thing I know, I'm cutting and stripping wire, and installing it, as well as a piece of Arduino circuitry, on the breadboard. And according to the diagram I'm following, I may even be doing it right. I slide a few red wires into their slots, and a few black ones. And suddenly, a couple of LEDs on the circuitry begin to flash, and I realize that I have built my first-ever piece of electronics.

There's still software to run, though, and after conferring again with my neighbor, I get the Arduino compiler working properly. I run my tag by the reader, and then the neighbor's, and then, executing a command, the software displays a list of serial numbers it has recorded, and sure enough, there's mine and my neighbor's.

This is a big deal. I ask another neighbor to scan his tag on my reader, run the command again, and indeed, it now shows that it's storing three IDs.

Sitting there, I started to have a feeling that I've often had when I've finished building a piece of Ikea furniture--that I actually know what I'm doing. But that's a dangerous sentiment. Building Ikea furniture is not the same thing as carpentry. And similarly, finishing this RFID reader really wasn't very complicated and wasn't indicative of any larger electronics proficiency.

Still, I walked into that room with no skills, and I walked out having built an actual piece of technology. It's not much, but it's something.

The finished RFID reader. Daniel Terdiman/CNET
Featured Video