I got some TI PCF8575 I²C I/O expander devices some years ago and never gave them a try. Yesterday I did... In the title they are named PF575, this is because this is what is printed on the device.

I wrote code for making a LED blink using the I/O expander as simple as possible.

Here you see my setup on a breadboard. On the left is the LED connected via a PNP transistor for voltage control.

PF575 / PCF8575 attached to Arduino

I only had 24-SSOP packages so I needed to solder the PCF8575 to a DIP adapter for making it breadboard friendly.

PF575 / PCF8575

My code:

#include <Wire.h>

 *  Arduino PF575/PCF8575 I2C I/O port exapander LED blink example
 *  Setup:
 *  1. Connect A0, A1 and A2 to GND to set the address to 0x20.
 *  2. Connect SDL and SCL to the Arduino's I2C bus.
 *  3. Connect a LED to the P0 port of the I2C exapander.
 *     In my setup I am using a PNP Transistor connected to 5V unsing
 *     an resistor, the LED and the Arduino to make sure the LED gets
 *     a current from Vcc and not from the I2C exapander port.
 *  This code is trying to explain how it works as simple as possible.
 *  More detailed examples are found on the web. Search for pcf8575 and
 *  you will find what you want.

// Set I2C address
int address = 0x20;

void setup(){
  // Set all ports as output

void loop(){
  // Set port P0 on
  // Set port P0 off

// Function for writing two Bytes to the I2C expander device
void pf575_write(uint16_t data) {

Some links: