Standardizing comms for Arduino shields

Sun, Jan 31 2010

Posted by Jonathan Oxer

A couple of weeks ago I came across Andrew Oke's interesting DIY Labs blog showing some of the cool stuff he's working on with Arduino. His main project is currently Arduarium (an Arduino-based aquarium controller) which looks really neat in itself, but what got my attention is a series of shields he has designed.

One of the problems with typical shields is that not only do they use a wide variety of methods to communicate with the host, but most of the time they don't even indicate on the header which pins they use. This is a personal bugbear of mine that I've ranted about in the past, and often it renders shields mutually exclusive: if there's contention on the pins required you may not be able to stack certain combinations of shields together.

Andrew's very sensible solution to this problem is to standardize on I2C comms between the Arduino and all shields, and to use consistent pin assignments. That way all you need to do is make sure each shield has a unique I2C address, plug them all together, and away you go. Check out these shields he's already designed:

pH / ORP shield

Port Expander shield

I2C / SPI / OneWire shield

RTC / EEPROM shield

Very, very interesting. I'm seriously thinking about adopting Andrew's I2C / pinout standard for my own future shield designs. It would certainly be a big improvement on the current ad-hoc shield pinout situation if more people started using his idea consistently.