Extending the Raspberry Pi GPIO with an I/O expander
As we have seen, making use of the higher-level bus protocols allows us to connect to more complex hardware quickly and easily. The I2C can be put to great use by using it to expand the available I/O on the Raspberry Pi as well as providing additional circuit protection (and, in some cases, additional power to drive more hardware).
There are lots of devices available that provide I/O expansion over the I2C bus (and also SPI), but the most commonly used is a 28-pin device, MCP23017, which provides 16 additional digital input/output pins. Being an I2C device, it only requires the 2 signals (SCL and SDA connections plus ground and power) and will happily function with other I2C devices on the same bus.
We shall see how the Adafruit I2C 16x2 RGB LCD Pi Plate makes use of one of these chips to control an LCD alphanumeric display and keypad over the I2C bus (without the I/O expander, this would normally require up to 15 GPIO pins).