This extension board is designed to have 16 output ports over the I2C protocol on two ULN2803 Darlington arrays. It uses an MCP23017 I2C controller to drive both ULN2803 Darlington arrays to switch relays, LEDs, etc. With the DIP switch, You can choose the I2C address, if You need to have two or more board connectors on the same I2C bus.

Technical data:
I2C controler: MCP23017-E/SO
Darlington arrays: 2 X ULN2803
Protocol: I2C
Operating Voltage for VCC: 1.8VDC to 5.5VDC
Maximum output current: 500mA
Board dimensions: 51 x 29mm

Example of Arduino IDE code, to turn off/on pins:

#include <Adafruit_MCP23X17.h>

#define PIN1 0 
#define PIN2 1 
#define PIN3 2 
#define PIN4 3 
#define PIN5 4 
#define PIN6 5 
#define PIN7 6 
#define PIN8 7 
#define PIN9 8 
#define PIN10 9 
#define PIN11 10 
#define PIN12 11 
#define PIN13 12 
#define PIN14 13 
#define PIN15 14 
#define PIN16 15 

Adafruit_MCP23X17 mcp;

void setup() {
  Serial.begin(115200);
  Serial.println("MCP23xxx Blink Test!");
  if (!mcp.begin_I2C()) {
    Serial.println("Error.");
    while (1);
  }

  // configure pin for output
  mcp.pinMode(PIN1, OUTPUT);
  mcp.pinMode(PIN2, OUTPUT);
  mcp.pinMode(PIN3, OUTPUT);
  mcp.pinMode(PIN4, OUTPUT);
  mcp.pinMode(PIN5, OUTPUT);
  mcp.pinMode(PIN6, OUTPUT);
  mcp.pinMode(PIN7, OUTPUT);
  mcp.pinMode(PIN8, OUTPUT);
  mcp.pinMode(PIN9, OUTPUT);  
  mcp.pinMode(PIN10, OUTPUT);
  mcp.pinMode(PIN11, OUTPUT);
  mcp.pinMode(PIN12, OUTPUT);
  mcp.pinMode(PIN13, OUTPUT);
  mcp.pinMode(PIN14, OUTPUT);
  mcp.pinMode(PIN15, OUTPUT);
  mcp.pinMode(PIN16, OUTPUT);
  Serial.println("Looping...");
}

void loop() {
  Serial.println("Switch off");
  mcp.digitalWrite(PIN1, LOW);
  mcp.digitalWrite(PIN2, LOW);
  mcp.digitalWrite(PIN3, LOW);
  mcp.digitalWrite(PIN4, LOW);
  mcp.digitalWrite(PIN5, LOW);
  mcp.digitalWrite(PIN6, LOW);
  mcp.digitalWrite(PIN7, LOW);
  mcp.digitalWrite(PIN8, LOW);
  mcp.digitalWrite(PIN9, LOW);
  mcp.digitalWrite(PIN10, LOW);
  mcp.digitalWrite(PIN11, LOW);
  mcp.digitalWrite(PIN12, LOW);
  mcp.digitalWrite(PIN13, LOW);
  mcp.digitalWrite(PIN14, LOW);
  mcp.digitalWrite(PIN15, LOW);
  mcp.digitalWrite(PIN16, LOW);
  delay(1000);
  Serial.println("Switch on");
  mcp.digitalWrite(PIN1, HIGH);
  mcp.digitalWrite(PIN2, HIGH);
  mcp.digitalWrite(PIN3, HIGH);
  mcp.digitalWrite(PIN4, HIGH);
  mcp.digitalWrite(PIN5, HIGH);
  mcp.digitalWrite(PIN6, HIGH);
  mcp.digitalWrite(PIN7, HIGH);
  mcp.digitalWrite(PIN8, HIGH);
  mcp.digitalWrite(PIN9, HIGH);
  mcp.digitalWrite(PIN10, HIGH);
  mcp.digitalWrite(PIN11, HIGH);
  mcp.digitalWrite(PIN12, HIGH);
  mcp.digitalWrite(PIN13, HIGH);
  mcp.digitalWrite(PIN14, HIGH);
  mcp.digitalWrite(PIN15, HIGH);
  mcp.digitalWrite(PIN16, HIGH);
  delay(1000);
}