Using a MUXSHIELD2 Expander as a Virtual Board. Displays pin state in console graph. (npm install barcli)
Breadboard for "Expander - MUXSHIELD2, Digital Input and Output"

Fritzing diagram: expander-MUXSHIELD2-mixed.fzz
Run this example from the command line with:
node eg/expander-MUXSHIELD2-mixed.js
const Barcli = require("barcli");
const {Board, Button, Expander, Led, Leds, Sensor } = require("johnny-five");
const board = new Board({
  repl: false,
  debug: false
});
board.on("ready", () => {
  const activeLed = {
    last: -1,
    next: -1,
  };
  const virtual = new Board.Virtual(
    new Expander("MUXSHIELD2")
  );
  const leds = new Leds(
    Array.from({ length: 16 }, (_, index) => {
      const bar = new Barcli({ label: `IO3-${index}`, range: [0, 1] });
      const lit = new Sensor({
        type: "digital",
        pin: `IO3-${index}`,
        board: virtual,
      });
      const led = new Led({
        pin: `IO1-${index}`,
        board: virtual,
      });
      lit.on("data", () => {
        if (index === activeLed.last ||
            index === activeLed.next) {
          bar.update(lit.value);
        }
      });
      return led;
    })
  );
  const button = new Button(9);
  button.on("press", () => {
    activeLed.last = activeLed.next;
    if (activeLed.last !== -1) {
      leds[activeLed.last].off();
    }
    activeLed.next++;
    if (activeLed.next > 15) {
      activeLed.last = 15;
      activeLed.next = 0;
    }
    leds.off();
    leds[activeLed.next].on();
  });
});
Illustrations / Photos
Example output
