These LED backpack displays use the Arduino’s Two Wire Interface (or TWI — though you’ll also sometimes see this called I²C, Philips’ trademarked name for the company’s original implementation).

TWI allows multiple devices to communicate on the same bus. Just two wires are required…you don’t need to dedicate Arduino pins to every separate device. This takes place on analog pins 4 (serial data) and 5 (serial clock). Newer “R3” Arduino boards also include distinct SDA and SCL pins serving the same functions, though analog pins 4 and 5 still work too.

In order to distinguish among multiple devices on the bus, each must be assigned a unique numeric address. Most devices (sensors, etc.) are factory-configured for one specific address, but others (like these LED backpacks) are at least partially configurable. There’s a default address (0x70 in hexadecimal notation) which can then be tweaked by joining some solder pads on the back of the board:
Bridging the two copper pads in the “A0” box with a blob of solder will increase this backpack’s address by one (so it’s now 0x71 instead of 0x70). Bridging the “A1” box will add 2, and both can be used in combination for +3. This allows four possible addresses on the “mini” 8x8 matrices. The “small” matrices add an “A2” address selection which adds 4 to the device’s address (again usable in combination, so there’s a total of eight possible addresses with the small matrices).
So! For a project, let’s suppose we want to animate a face. We plan to use a mini 8x8 matrix for each eye, and three side-by-side to form a mouth.

But there’s only four addresses, and we have five matrices! So we’ll use a small compromise here: both eyes will always point the same direction and blink together…no winking or crossed eyes. To do this, we just use the same address for both — they’ll receive and display the exact same data in unison. (And that’s all there is to that…sorry if you were expecting a more technical procedure!)

The three mouth matrices are then each assigned a unique address, separate from the “eyes” address. Here’s the view from the back:
Flipping this over then, our wiring diagram will look something like the following. Notice that all five displays connect to the same four points for power, ground, serial clock and data:
(click to embiggen)
We’ve illustrated it with a 3x AA battery pack for portable use, but for a stationary installation you can also use a regulated 5 Volt power supply. This connects to the Arduino’s 5V pin, bypassing the voltage regulator, so make absolutely certain you’re using a 5V supply! (Three alkaline AA cells only provide 4.5 Volts, but this is enough to keep the Arduino happy.)

Notice we’re not using the DC power jack on the Arduino. Each of these displays can draw up to 200 milliamps (when fully lit), and the 5V regulator on the Arduino is only rated up to 500 mA. It could handle one or two of these displays (e.g. if only using the eyes), but the full face requires more current than this.

The buttons are optional — one of the example sketches (“wavface”) works together with a Wave Shield, and these are used to trigger sounds. A simpler example (“roboface”) does not require the Wave Shield or the buttons.
We wanted to test this in a lot of different settings, so we assembled an extra-durable rig with all the parts and wiring permanently soldered to a Proto Shield. But you don’t need to go all-out like this if you don’t want to:
Each matrix has about 18 inches of 4-conductor ribbon cable attached. The other ends of the ribbon cables join up at a 4-conductor JST plug cable, and a mating receptacle connects to the shield. Having a point of separation makes it easier to install and remove in different fixtures.

The three mouth matrices were tacked together with a bit of hot-melt glue. For the wires, an unused mounting hole on the Proto Shield was used as a strain relief attachment point, so anything pulling on the wires will put pressure here and not on the solder connections.
Last updated on 2014-04-17 at 04.15.18 AM Published on 2012-10-13 at 09.58.40 AM