Jeff Duntemann's Contrapositive Diary Rotating Header Image

February 20th, 2008:

Review: Tom Igoe’s Making Things Talk

Triage is a harsh mistress. I started out in computing with the CDP1802, a microprocessor designed for embedded systems work (it was used on the Viking Landers!) and for all the software I've used and the code I've written since then, I miss poking wires in breadboard holes and hitting the trigger of a wire-wrap gun. There's only so many hours in a life, and embedded work has not made the cut.

That may change. Embedded systems tinkering is easier now. Much easier, and for a couple of reasons: 1) The processors themselves can be had on small boards with appropriate I/O connectors; you don't have to fool with loose chips anymore. 2) Development software is better, mostly because now there is development software. In 1976 I literally had to write binary code by hand. (F8 FF A2… Yes, yes, I know, barefoot and uphill both ways. But if you think I'm exaggerating, you simply weren't there.) And, the point of the current discussion, 3) there are books like Making Things Talk, by Tom Igoe. Wow.

The first time I saw the cover I was confused: It shows a stuffed monkey and the completely inane blurb, “Projects and ideas to create talking objects from anything.” I literally thought it was about fooling with speech synthesizers. But no: It's about networking embedded systems modules with technologies including Ethernet, USB, Bluetooth, and Zigbee. The microprocessor modules under discussion are the Atmel AVR-based Arduinos, augmented by a host of sensor modules and connectivity modules that can be breadboarded on the same 0.1″ spacing blocks we used to use in 1976. In a sense, we now have modules the way other people have chips. (And in saying so I am indeed just boasting.) We can raise our consciousness to the level of connecting functional blocks rather than individual inverters and logic gates. That is a very big win.

The book is patient (as good tutorials must be) and begins with probably the finest introduction to low-level networking that I have ever seen. If you are a software developer you will understand it; if you have no experience whatsoever in networking or programming, you may have some trouble. A good prerequisite text would be Tom Igoe's 2004 Physical Computing (written with Dan O'Sullivan) which focuses on the older Basic Stamp modules and their close relatives. Physical Computing introduces both electronics and programming to a degree that Making Things Talk cannot. That said, Making Things Talk presents examples using a Java-derivative programming environment called Processing, which is free and open source and much gentler conceptually than programming in raw Java or, merciful God help us, C. (Pascal would be gentler still, but as we all know, Pascal is a kiddie language that cannot accomplish anything useful. You must believe this. A C programmer said it. QED.)

Once the essential groundwork is done, the book teaches through projects, good projects that are mostly fun and in many cases even useful. The book explains how RFID tags work and how to read them, and how to read 2-D barcodes with a Web cam. The most fascinating projects are those that involve physical location sensing, using modules that perform infrared ranging, ultrasonic ranging, GPS, and “digital compass” modules, all of which made the robot guy within me itch like hell. We didn't have stuff like that thirty years ago.

Although it doesn't get a huge amount of coverage in the book, the XBee module (which implements a Zigbee data radio system) fascinates me: It's basically jelly-bean logic implementing a short-range mesh network, and I intuit that hobby robots of the future may well consist of swarms of semi-independent functional blocks knit together coherently through the Zigbee network protocols, under the control of a multicore master processor. And damn, I would love to build something like that.

Anyway. Here are a few additional observations on the book:

  • It has at least process color on most pages, with beautifully shot full-color photos on many of them.
  • The technical figures are abundant and very well done.
  • The type is very small, the margins narrow. This 425-page book would have been a 600-page book back in the 90s. My guess is that O'Reilly wanted to the keep page count down because of all the costly interior color. Note to my age cohort: Prepare to squint, or go get yer readers.
  • There is far less discussion on debugging than I'd like. Coding is easy—as is plugging jumper wires into breadboard blocks. But when something doesn't work the way it should, where do you start? The book is mostly silent on that crucial point.
  • In general, the book probably covers a little too much ground, and doesn't go for quite enough depth. Zigbee is subtle, and its subtler features are not explored here. This may not be a completely fair criticism, but it supports my conviction that you must be a journeyman embedded systems type to really get the most from this book, as a lot of the blanks you must fill in yourself.

Don't let any of that stop you: If you have some clue about embedded systems modules and want to learn embedded systems-level data communications, there is nothing like this book anywhere. And if I do decide to go back to embedded systems tinkering, this will be the book that pushes me over the edge. Not yet—I have a rocket or two to finish and a few other things to do—but soon, soon.

Highly recommended.