

The MCP23017 IO Expander Breakout, manufactured by Soldered (Part ID: 333007), is a versatile 16-bit I/O expander that communicates via the I2C protocol. It allows microcontrollers to extend their GPIO capabilities by adding 16 additional input/output pins. This breakout board simplifies the integration of the MCP23017 chip into your projects by providing easy-to-use pin headers and a compact design.








The MCP23017 Breakout board provides access to the following pins:
| Pin Name | Description |
|---|---|
| VCC | Power supply input (1.8V to 5.5V). |
| GND | Ground connection. |
| SDA | I2C data line. Connect to the SDA pin of the microcontroller. |
| SCL | I2C clock line. Connect to the SCL pin of the microcontroller. |
| Pin Name | Description |
|---|---|
| GPA0-GPA7 | General-purpose I/O pins for PORTA. Configurable as input or output. |
| GPB0-GPB7 | General-purpose I/O pins for PORTB. Configurable as input or output. |
| Pin Name | Description |
|---|---|
| A0, A1, A2 | Address selection pins. Used to set the I2C address (0x20 to 0x27). |
| Pin Name | Description |
|---|---|
| INTA | Interrupt output for PORTA. Active-low. |
| INTB | Interrupt output for PORTB. Active-low. |
Below is an example of how to use the MCP23017 Breakout with an Arduino UNO to control LEDs and read button inputs.
#include <Wire.h>
#include <Adafruit_MCP23017.h>
// Create an MCP23017 object
Adafruit_MCP23017 mcp;
void setup() {
Wire.begin(); // Initialize I2C communication
mcp.begin(0); // Initialize MCP23017 with default address (0x20)
// Configure GPA0 as output (for an LED)
mcp.pinMode(0, OUTPUT);
// Configure GPA1 as input with pull-up resistor (for a button)
mcp.pinMode(1, INPUT);
mcp.pullUp(1, HIGH); // Enable internal pull-up resistor
}
void loop() {
// Read the button state (GPA1)
bool buttonState = mcp.digitalRead(1);
// Turn the LED (GPA0) on or off based on the button state
if (buttonState == LOW) { // Button pressed
mcp.digitalWrite(0, HIGH); // Turn LED on
} else {
mcp.digitalWrite(0, LOW); // Turn LED off
}
delay(100); // Small delay for debounce
}
I2C Communication Not Working
GPIO Pins Not Responding
Interrupts Not Triggering
Overheating or Power Issues
Q: Can I use multiple MCP23017 Breakouts in the same project?
A: Yes, you can connect up to 8 MCP23017 devices on the same I2C bus by configuring their addresses using the A0, A1, and A2 pins.
Q: What is the maximum I2C speed supported by the MCP23017?
A: The MCP23017 supports I2C speeds up to 1.7MHz (Fast Mode Plus).
Q: Can the MCP23017 handle analog signals?
A: No, the MCP23017 is designed for digital input/output only. Use an ADC (Analog-to-Digital Converter) for analog signals.
Q: Do I need external pull-up resistors for the GPIO pins?
A: No, the MCP23017 has internal pull-up resistors that can be enabled via software. However, external pull-ups may be used if stronger pull-up resistance is required.