Non Programming Manager


    0.1.0 • Public • Published


    Node.js library for the I2C I/O Expander MCP23017 on a Raspberry Pi

    It currently supports reading, writing and changing the pull-up resistor of the GPIOs.

    The module tries to mimic the Arduino-Syntax


    install via npm. just type the following in the terminal/console

    npm install node-mcp23017 --save

    Raspberry Pi Setup

    In order to use this module with the Raspberry Pi running Raspbian you have to enable to stuff

    $ sudo vi /etc/modules

    Add these two lines

    $ sudo vi /etc/modprobe.d/raspi-blacklist.conf

    Comment out blacklist i2c-bcm2708

    #blacklist i2c-bcm2708

    Load kernel module

    $ sudo modprobe i2c-bcm2708

    Make device writable

    sudo chmod o+rw /dev/i2c*



    Pins are numbered from 0-15 where 0-7 is register A and 8-15 is register B

    var MCP23017 = require('node-mcp23017');
    var mcp = new MCP23017({
      address: 0x20,//default: 0x20
      device: 1,    // 1 for '/dev/i2c-1' on model B | 0 for '/dev/i2c-0' on model A
                    // 'ls /dev/i2c*' to find which device file / number you should use
      debug: true   //default: false
      By default all GPIOs are defined as INPUTS.
      You can set them all the be OUTPUTs by using the pinMode-Methode (see below),
      You can also disable the debug option by simply not passing it to the constructor
      or by setting it to false
    //set all GPIOS to be OUTPUTS
    for (var i = 0; i < 16; i++) {
      mcp.pinMode(i, mcp.OUTPUT);
      //mcp.pinMode(i, mcp.INPUT); //if you want them to be inputs
      //mcp.pinMode(i, mcp.INPUT_PULLUP); //if you want them to be pullup inputs
    mcp.digitalWrite(0, mcp.HIGH); //set GPIO A Pin 0 to state HIGH
    mcp.digitalWrite(0, mcp.LOW); //set GPIO A Pin 0 to state LOW
      to read an input use the following code-block.
      This reads pin Nr. 0 (GPIO A Pin 0)
      value is either false or true
    mcp.digitalRead(0, function (pin, err, value) {
      console.log('Pin 0', value);

    Example (Blink 16 LEDs)

    see examples folder

    var MCP23017 = require('node-mcp23017');
    var mcp = new MCP23017({
      address: 0x20, //all address pins pulled low
      device: 1, // Model B
      debug: false
      This function blinks 16 LED, each hooked up to an port of the MCP23017
    var pin = 0;
    var max = 16;
    var state = false;
    var blink = function() {
      if (pin >= max) {
        pin = 0; //reset the pin counter if we reach the end
      if (state) {
        mcp.digitalWrite(pin, mcp.LOW); //turn off the current LED
        pin++; //increase counter
      } else {
        mcp.digitalWrite(pin, mcp.HIGH); //turn on the current LED
        console.log('blinking pin', pin);
      state = !state; //invert the state of this LED
    //define all gpios as outputs
    for (var i = 0; i < 16; i++) {
      mcp.pinMode(i, mcp.OUTPUT);
    setInterval(blink, 100); //blink all LED's with a delay of 100ms


    some parts are derived from the module by x3itsolutions (Fabian Behnke)




    npm i node-mcp23017

    DownloadsWeekly Downloads






    Unpacked Size

    26 kB

    Total Files


    Last publish


    • kaihenzler