An Arduino UNO has a limited number of GPIO pins - but what if it is not enough? The GPIO expansion shield specifically designed for Arduino UNO-type boards. This shield greatly expands the GPIO resources to 36 pins in total, including 14 digital pins, 6 analog pins and 16 I2C pins. In addition digital and analog pins include the DFRobot "Gravity" interface, giving you in-line power and ground pins and saving you having to connect millions of jumper wires for a single sensor.


Board Overview

GPIO Shield for Arduino V1.0

Num Name Description
1 External Power 5 VDC
2 VCC Jumper Caps Choose to power from board or shield external power
3 PCA9555DB IIC Address Setting Set PCA9555DB I2C Address 0x20~0x27
4 Arduino Digital I/O Pins D0~D13
5 Arduino Analog input Pins A0~A5
6 IIC to GPIO Digital Pins P0.0P0.7; P1.0P1.7
7 IIC Port IIC Communication
8 UART Port UART Communication


PCA9555DB IIC Address

Plug = 0
Unplug = 1

A2 A1 A0 I2C Address
0 0 0 0x20 (Default)
0 0 1 0x21
0 1 0 0x22
0 1 1 0x23
1 0 0 0x24
1 0 1 0x25
1 1 1 0x26
1 1 1 0x27

"D": represents digital signal
"A": represents analog signal

One of the biggest benefits of the I/O expansion shield is more power and GND pins, allowing you to connect more sensors.

* Green: digital signal
* Blue: analog signal
* Red: VCC
* Black: GND


VCC Jumper Caps

There are two Jump caps, you can change the position of two caps for the different VCC power input. See the following schematic for details:
The middle pin is the shield VCC pin. If you connect caps on the left side, VCC pins get power from the shield external port; If you connect caps on the right side, VCC pins get power from the board 5V port;

This is suitable for some applications that require greater current.


Connection Diagram

GPIO Shield for Arduino

Sample Code

In this section, we will use an Arduino library written by nicoverduin Github Library. About Library installation.

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#include "WProgram.h"

#include "clsPCA9555.h"
#include "Wire.h"

PCA9555 ioport(0x20);

void setup()
  ioport.pinMode(8, OUTPUT); //Set GPIOs pinMode LED
  ioport.pinMode(15, INPUT);  //Button

void loop()
  if (ioport.digitalRead(ED15) == LOW) {
    ioport.digitalWrite(8, LOW);                  //Turn off Led

  if (ioport.digitalRead(ED15) == HIGH) {
    ioport.digitalWrite(8, HIGH);                 //Turn on Led



For any questions/advice/cool ideas to share, please visit DFRobot Forum.

More Documents

PCA9555 Datasheet
SVG files


For any questions, advice or cool ideas to share, please visit the DFRobot Forum.