• Only need five pins of Raspberry Pi (RPI) to control it, 5V, 3V3, GND, SDA and SCL.
  • On board MCP23008 for IIC interface, relay connects in the IIC, save the GPIOs of RPI and can cascading modules
  • On board ULN2803 relay control
  • Four relays mounted on board, but more relay can hook on it via the cable terminal or connect cascadely
  • SMD type toggle switch for adapting IIC address, you will need any tiny tip ends for operating it.
  • Four LEDs indicator connected correspondingly to relays.


  • RPI pin header is NOT soldered on the board, but included in the package, this will need to be soldered by yourself, please be aware this is different with the pictures shown here.
  • Pin header designed for RPI model B, but can also work for model B+

Documentation: See the schematic, demo code here.

Additional information

Weight 0.09 kg

4 reviews for Raspberry Pi GPIO Expander + Relay Drive Shield

  1. 5 out of 5

    Agnieszka (verified owner)

    Really good modules, great idea that it can be chained, so once I need 12 relays to control, I can still do it with my single Raspberry Pi and these 5 pins! Very well manufactured, very good quality. As well good design with buffering of relays. This is really interesting board if you build a house control center with RPi. Just get one and try yourself.

  2. 3 out of 5

    lunakid (verified owner)

    Excellent design, very useful and easy to use.
    BUT: 1 of the 4 relays (or the relevant connections) is faulty on the board I received! (The relay does click, but no connection.)

  3. 3 out of 5

    aferrarel (verified owner)

    I bought 5 of them. The construction is good but there are some issues:
    in 3 out of 5 the leds don’t work, fortunately the relays work
    the serigraphy on the PCB board is wrong, the connector for the other 4 lines without the relais and the GND, +5V are exchanged, be careful if you are using these connectors
    finally the demo code doesn’t work properly, it activates only 3 out of the 4 realis, I wrote this simple test program:
    #! /usr/bin/python

    import smbus
    import sys
    import getopt
    import time

    #bus = smbus.SMBus(0) #Rev 1 board
    bus = smbus.SMBus(1) # New Rev 2 board

    address = 0x20 # I2C address of MCP23008

    bus.write_byte_data(address,0x00,0x00) # Set all to outputs

    # Handle the command line arguments
    delay = 1
    while True:
    bus.write_byte_data(address,0x09,16) #
    time.sleep(delay) # 1 second delay
    bus.write_byte_data(address,0x09,32) #
    bus.write_byte_data(address, 0x09, 64)
    bus.write_byte_data(address, 0x09, 128)
    bus.write_byte_data(address, 0x09, 0)
    except KeyboardInterrupt:

  4. 5 out of 5

    steve.bromwich (verified owner)

    My relay was on address 0x27 not 0x20 but otherwise worked fine. Sample shell script to power cycle each relay in turn with a half second pause:


    # All off
    i2cset -y 1 0x27 0x09 0
    sleep .5
    # 4
    i2cset -y 1 0x27 0x09 16
    sleep .5
    # 3
    i2cset -y 1 0x27 0x09 32
    sleep .5
    # 2
    i2cset -y 1 0x27 0x09 64
    sleep .5
    # 1
    i2cset -y 1 0x27 0x09 128
    sleep .5
    # All off
    i2cset -y 1 0x27 0x09 0

Add a review

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Product Enquiry