Punchthrough LightBlue Bean IO

Usage no npm install needed!

<script type="module">
  import beanIo from '';



Bean-io is a Firmata-compatibility IO class for writing node programs that interact with LightBlue Bean devices. Bean-io was built at IcedDev


npm install bean-io

Getting Started

In order to use the bean-io library, you will need to load a special version of Firmata onto your Bean device. Bean Firmata

We recommend you review Punchthrough's Getting Started guide before continuing.

Linux Instructions

Make sure that libbluetooth-dev and bluez libraries are installed before installing bean-io.

Blink an Led

The "Hello World" of microcontroller programming:

var beanio = require("bean-io");
var board = new beanio.Board({
  timeout: 30000 //optional - defaults to 30 seconds
  // uuid: 'myUuid' //optional - will use first bean found

board.on("ready", function() {
  this.pinMode(13, this.MODES.OUTPUT);

  var byte = 0;

  // This will "blink" the on board led
  setInterval(function() {
    this.digitalWrite(13, (byte ^= 1));
  }.bind(this), 500);

Johnny-Five IO Plugin

Bean-IO can be used as an IO Plugin for Johnny-Five:

var five = require("johnny-five");
var beanio = require("bean-io");
var board = new five.Board({
  io: new beanio.Board()

board.on("ready", function() {
  var led = new five.Led({pin: 13});

Use ble-bean and Johnny-Five Api Together

var five = require("johnny-five");
var beanio = require("bean-io");
var boardIO = new beanio.Board({
//    name: "ZAPP" // optional: you can specify a localName otherwise defaults to nearby bean

var board = new five.Board({
  io: boardIO

board.on("ready", function() {

  var button = new five.Button(12); // button on pin 4

  button.on("down", function() {
    boardIO.connectedBean.setColor(new Buffer([0, 64, 64]), function(err){
      console.log('set color on', err);

  button.on("hold", function() {
    boardIO.connectedBean.setColor(new Buffer([0, 0, 0]), function(err){
      console.log('set color off', err);

  button.on("up", function() {



Bean-IO subclasses firmata.js and provides the same API.

Pin Mappings

Bean to Arduino UNO

Bean Port Arduino Pin Type
A0 18 Analog/Digital
A1 19 AnalogDigital
0 6 Digital — Unavailable right now from firmata
1 9 Digital — Unavailable right now from firmata
2 10 Digital
3 11 Digital
4 12 Digital
5 13 Digital