Una manera sencilla de controlar hardware con Node.js y

Johnny-Five.

Julio César Rodríguez Domínguez

Organizador de @NodeBotsMx

@_JuraseC

1. Node.js

2. Firmata

3. Node-serialport

4. Johnny five

5. Johnny five abstractions

6. Demos

Node.js

  • JavaScript de la del servidor
  • Aplicaciones web en tiempo real escalables 
  • Non-blocking
  • Asíncrono
  • Orientado a eventos
  • NPM

Non-blocking, Asíncrono y Orientado a Eventos

NPM

1. Node.js

2. Firmata

3. Node-serialport

6. Demos

4. Johnny five

5. Johnny five abstractions

Firmata

Firmata, es un protocolo que permite comunicar microcontraladores con una aplicación que esta siendo ejecutada desde una computadora (host)

010101101110

https://github.com/firmata/protocol

Host

Implementaciones

1. Node.js

2. Firmata

3. Node-serialport

6. Demos

4. Johnny five

5. Johnny five abstractions

Node-seriaport

http://www.voodootikigod.com/nodebots-the-rise-of-js-robotics/    -  by   Chris Williams

1. Node.js

2. Firmata

3. Node-serialport

6. Demos

4. Johnny five

5. Johnny five abstractions

Johnny five

https://github.com/rwaldron/johnny-five   -  by  Rick Waldron

$( document ).ready(function() {
    $( "button" ).on( "mousedown", function() {
      console.log( "button down" );
    });
});

IoT and Robotics programming framework

five.Board().on("ready", function() {

  button = new five.Button({
    pin: 2,
    isPullup: true
  });

  button.on("down", function(value) {
    console.log("down");
  });
});
var five = require("johnny-five"),
    button, led;

five.Board().on("ready", function() {

  button = new five.Button({
    pin: 2,
    isPullup: true
  });

  button.on("down", function(value) {
    console.log("down");
  });
});
$ npm i johnny-five
$ node button.js

button.js

Button.js

var keypress = require('keypress');
var five = require("johnny-five"),
    board;

// Johnny-Five will try its hardest to detect the port for you,
// however you may also explicitly specify the port by passing
// it as an optional property to the Board constructor:
board = new five.Board({
  // port: "/dev/tty.itead-DevB"
  port: "/dev/cu.itead-DevB"
});

// board = new five.Board();
board.on("ready", function() {
  var speed = 80;

  console.log("Repl instance auto-initialized ready!!!");
  
  motor1 = new five.Motor([10, 8]);
  motor2 = new five.Motor([9, 7]);

  // motor1 = new five.Motor({
  //   pins:{
  //     pwm: 10,
  //     dir: 8
  //   }
  // });

  // motor2 = new five.Motor({
  //   pins:{
  //     pwm: 9,
  //     dir: 7 
  //   }
  // });

  board.repl.inject({
  	lmotor: motor1,
  	rmotor: motor2,
  });

  // make `process.stdin` begin emitting "keypress" events
  keypress(process.stdin);

  // listen for the "keypress" event
  process.stdin.on('keypress', function (ch, key) {
    if (key && key.ctrl && key.name == 'c') {
      process.exit(0);
    }

    if ( key ){
      switch ( key.name ){
        case 'up':
          speed+=20;
          console.log(' => Up: ' + speed);
          motor1.rev( speed );
          motor2.rev( speed );
          break;
        case 'down':          
          speed+=20;
          console.log(' => Down: ' + speed);
          motor1.fwd( speed );
          motor2.fwd( speed );
          break;
        case 'left':
          console.log(' => Left: ');
          motor1.fwd( speed * 0.5 );
          motor2.rev( speed * 0.5 );
          break;
        case 'right':
          console.log('right');
          motor1.rev( speed * 0.5 );
          motor2.fwd( speed * 0.5 );
          break;
        case 'space':
          console.log(' => Stoping...');
          motor1.stop();
          motor2.stop();
          break;
        case 'r':
          console.log(' => Speed to 80');
          speed = 80;
          break;  
        default:
          console.log('Ignoring key: ' + key.name);
      }
    }

  });

  process.stdin.setRawMode(true);
  process.stdin.resume();
 
});
https://github.com/jurasec/johnny-five-guide/blob/master/example/WirelessNodeBotZumoArrows.js
$ node WirelessNodeBotZumoArrows.js

button.js

WirelessNodeBotZumoArrows.js

https://github.com/rwaldron/johnny-five   -  by  Rick Waldron

1. Node.js

2. Firmata

3. Node-serialport

6. Demos

4. Johnny five

5. Johnny five abstractions

Johnny five abstractions

https://github.com/rwaldron/johnny-five/blob/master/lib/johnny-five.js

module.exports = {
  // extract-start:apinames
  Accelerometer: require("./accelerometer"),
  Animation: require("./animation"),
  Altimeter: require("./altimeter"),
  Barometer: require("./barometer"),
  Board: require("./board"),
  Button: require("./button"),
  Color: require("./color"),
  Compass: require("./compass"),
  Distance: require("./distance"),
  ESC: require("./esc"),
  Expander: require("./expander"),
  Fn: require("./fn"),
  GPS: require("./gps"),
  Gripper: require("./gripper"),
  Gyro: require("./gyro"),
  Hygrometer: require("./hygrometer"),
  IMU: require("./imu"),
  IR: require("./ir"),
  Keypad: require("./keypad"),
  LCD: require("./lcd"),
  Led: require("./led"),
  LedControl: require("./led/ledcontrol"),
  Light: require("./light"),
  Joystick: require("./joystick"),
  Motion: require("./motion"),
  Motor: require("./motor"),
  Nodebot: require("./nodebot"),
  Piezo: require("./piezo"),
  Ping: require("./ping"),
  Pir: require("./pir"),
  Pin: require("./pin"),
  Proximity: require("./proximity"),
  Relay: require("./relay"),
  Repl: require("./repl"),
  Sensor: require("./sensor"),
  Servo: require("./servo"),
  ShiftRegister: require("./shiftregister"),
  Sonar: require("./sonar"),
  Stepper: require("./stepper"),
  Switch: require("./switch"),
  Thermometer: require("./thermometer"),
  Wii: require("./wii")
  // extract-end:apinames
};

Demo time!

Gracias!

 

@_JuraseC

Nodebots

By Julio César

Nodebots

Una manera sencilla de controlar hardware con Node.js y Johnny-Five.

  • 1,542