controla hardware con Node.js y

Johnny-Five.

Julio César Castellanos

NodebotsMonteria

@juliocesar_io

Mi primer Nodebots

1. Node.js

2. Firmata

3. Node-serialport

4. Johnny five

5. Johnny five abstractions

6. Demos

Node.js

  • JavaScript del lado 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!

 

@Juliocesar_io

Nodebots Monteria P.1

By Julio César

Nodebots Monteria P.1

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

  • 848