This extension board is designed to have 16 input or output ports over the SPI protocol. It can be used to trigger transistors, Darlingtons, etc. With the DIP switch, You can choose the SPI address, if You need to have two or more board connectors on the same SPI bus. It have a statdard 2.54 pinout, with INTA and INTB to innterupts.
It can be used in a 3.3VDC environment, like Raspberry Pi, and in a 5VDC environment, by Arduinos.

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

#include <SPI.h>
#include <Adafruit_MCP23X17.h>

// MCP23XXX Pin setup
#define PIN0 0 
#define PIN1 1
#define PIN2 2
#define PIN3 3
#define PIN4 4
#define PIN5 5
#define PIN6 6
#define PIN7 7
#define PIN8 8
#define PIN9 9
#define PIN10 10
#define PIN11 11
#define PIN12 12
#define PIN13 13
#define PIN14 14
#define PIN15 15
#define PIN16 16
#define PIN17 17
#define PIN18 18

#define CS_PIN 10

Adafruit_MCP23X17 mcp;

void setup() {
Serial.begin(115200);
Serial.println("MCP23S17 switch test");

if (!mcp.begin_SPI(CS_PIN)) {
Serial.println("Error");
while (1);
}

//PIN Setup
mcp.pinMode(PIN0, 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);
mcp.pinMode(PIN17, OUTPUT);
mcp.pinMode(PIN18, OUTPUT);
Serial.println("Schleife...");
}

void loop() {
Serial.println("Switch all ON");
mcp.digitalWrite(PIN0, HIGH);
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);
mcp.digitalWrite(PIN17, HIGH);
mcp.digitalWrite(PIN18, HIGH);
delay(500);
Serial.println("Switch all OFF");
mcp.digitalWrite(PIN0, LOW);
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);
mcp.digitalWrite(PIN17, LOW);
mcp.digitalWrite(PIN18, LOW);
delay(500);
}



Technical data:
Controler: MCP23S17-E/SO
Protocol: SPI
SPI maximum speed: 10MHz
Operating Voltage for VCC: 1.8VDC to 5.5VDC
Maximum output current sourced by any output pin: 25mA
Board dimensions: 43 x 29mm