Due to server issues & outages with Endicia - There is no USPS / Postal service orders at this time - Read more.

April 5, 2013 AT 11:00 am

Interfacing an I2C GPIO expander (MCP23017) to the Raspberry Pi using C++ (SYSFS)

We like Python but here are some examples for an I2C port expander in C++:

The I2C bus is a two wire bus developed by Phillips/NXP (4-wire if you want to include power and ground), that is used to connect a single master device to up to 120+ slave peripheral devices. The master device is typically a microcontroller, and the slave device(s) is/are typically peripheral chips that perform special functions such as GPIO expanders, analog to digital converters, digital to analog converters, real-time clocks, eeproms and many more.


Because one could have multiple slave devices on the I2C bus, each slave must have a distinct device address. So for example to write a byte ‘a’ to a register ‘b’ located in a slave device with a device address ‘c’, you would have to send three bytes ‘c’, ‘b’ and ‘a’ in that order. You also have to make sure that you assert the Read/Write bit found in the same byte as the device address ( byte ‘c’) for either read or write operation.

Read more


Over at the adafruit learning system, we have our own MCP230xx GPIO Expander on the Raspberry Pi tutorial:

While the Raspberry Pi packs and awful lot of punch for the price, and it’s fairly flexible where HW expandability is concerned, there are situations where you might want a bit more basic digital IO. Thankfully, it’s an easy problem to solve with an I2C-enabled device like the MCP23008 (for an extra 8 GPIO pins) or the MCP23017 (for an extra 16 GPIO pins). This tutorial will show you how you can get up and running quickly with either of these chips.

Check it out here!


998Each Friday is PiDay here at Adafruit, be sure to check out our posts, tutorials and new Raspberry Pi related products. Have you tried the new “Adafruit Raspberry Pi Educational Linux Distro”? It’s our tweaked distribution for teaching electronics using the Raspberry Pi. But wait, there’s more! Try our new Raspberry Pi WebIDE! The easiest way to learn programming on a Raspberry Pi.

We now have Raspberry Pi Model B with 512MB RAM in stock and shipping now!


“D is for Diode” – Circuit Playground Episode 4 is out now! CLICK HERE TO WATCH!

Have an amazing project to share? Join the SHOW-AND-TELL every Wednesday night at 7:30pm ET on Google+ Hangouts.

Join us every Wednesday night at 8pm ET for Ask an Engineer!

Learn resistor values with Mho’s Resistance or get the best electronics calculator for engineers “Circuit Playground”Adafruit’s Apps!



No Comments

No comments yet.

Sorry, the comment form is closed at this time.