Cylon
JavaScript framework for robotics, drones, and the Internet of Things (IoT)
Install / Use
/learn @hybridgroup/CylonREADME
Cylon.js is a JavaScript framework for robotics, physical computing, and the Internet of Things (IoT).
It provides a simple, but powerful way to create solutions that incorporate multiple, different hardware devices concurrently.
Want to use Node.js for robots, drones, and IoT devices? You are in the right place.
Want to use Ruby on robots? Check out our sister project, Artoo.
Want to use Golang to power your robots? Check out our sister project, Gobot.
Build Status:
Getting Started
Installation
All you need to get started on a new robot is the cylon module:
npm install cylon
With the core module installed, now install the modules for whatever hardware
support you need. For the Arduino + LED blink example, we'll need the firmata, gpio, and i2c modules:
npm install cylon-firmata cylon-gpio cylon-i2c
Examples
Arduino + LED
The below example connects to an Arduino over a serial connection, and blinks an LED once per second.
The example requires that the Arduino have the Firmata sketch installed; which
can be obtained either through the Ardunio IDE or the gort arduino upload firmata command available in gort.
var Cylon = require('cylon');
// define the robot
var robot = Cylon.robot({
// change the port to the correct one for your Arduino
connections: {
arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }
},
devices: {
led: { driver: 'led', pin: 13 }
},
work: function(my) {
every((1).second(), my.led.toggle);
}
});
// connect to the Arduino and start working
robot.start();
Parrot ARDrone 2.0
var Cylon = require('cylon');
Cylon.robot({
connections: {
ardrone: { adaptor: 'ardrone', port: '192.168.1.1' }
},
devices: {
drone: { driver: 'ardrone' }
},
work: function(my) {
my.drone.takeoff();
after((10).seconds(), my.drone.land);
after((15).seconds(), my.drone.stop);
}
}).start();
Cat Toy (Leap Motion + Digispark + Servos)
var Cylon = require('cylon');
Cylon.robot({
connections: {
digispark: { adaptor: 'digispark' },
leapmotion: { adaptor: 'leapmotion' }
},
devices: {
servo1: { driver: 'servo', pin: 0, connection: 'digispark' },
servo2: { driver: 'servo', pin: 1, connection: 'digispark' },
leapmotion: { driver: 'leapmotion', connection: 'leapmotion' }
},
work: function(my) {
my.x = 90;
my.z = 90;
my.leapmotion.on('hand', function(hand) {
my.x = hand.palmX.fromScale(-300, 300).toScale(30, 150);
my.z = hand.palmZ.fromScale(-300, 300).toScale(30, 150);
});
every(100, function() {
my.servo1.angle(my.x);
my.servo2.angle(my.z);
console.log(my.servo1.currentAngle() + ", " + my.servo2.currentAngle());
});
}
}).start();
Multiple Spheros + HTTP API Plugin
To use the HTTP API plugin, first install it's NPM module:
$ npm install cylon-api-http
Then it can be used in scripts:
var Cylon = require('cylon');
// tell the HTTP API plugin to listen for requests at https://localhost:4000
Cylon.api("http", { port: 4000 });
var bots = [
{ port: '/dev/rfcomm0', name: 'Thelma' },
{ port: '/dev/rfcomm1', name: 'Louise' }
];
bots.forEach(function(bot) {
Cylon.robot({
name: bot.name,
connections: {
sphero: { adaptor: "sphero", port: bot.port }
},
devices: {
sphero: { driver: "sphero" }
},
work: function(my) {
every((1).second(), function() {
console.log(my.name);
my.sphero.setRandomColor();
my.sphero.roll(60, Math.floor(Math.random() * 360));
});
}
});
});
// start up all robots at once
Cylon.start();
Fluent Syntax
For those more familiar with jQuery, D3, or other fluent-style JavaScript libraries, Cylon.JS also supports a chainable syntax:
var Cylon = require('cylon');
Cylon
.robot()
.connection('arduino', { adaptor: 'firmata', port: '/dev/ttyACM0' })
.device('led', { driver: 'led', pin: 13 })
.on('ready', function(bot) {
setInterval(function() {
bot.led.toggle();
}, 1000);
});
Cylon.start();
Hardware Support
Cylon.js has an extensible syntax for connecting to multiple, different hardware devices. The following 36 platforms are currently supported:
Platform | Support -------- | ------- ARDrone | cylon-ardrone Arduino | cylon-firmata Arduino YUN | cylon-firmata AT&T M2X | cylon-m2x Audio | cylon-audio Beaglebone Black | cylon-beaglebone Bebop | cylon-bebop Bluetooth LE | cylon-ble Crazyflie | cylon-crazyflie Digispark | cylon-digispark Electric Imp | cylon-imp Intel Edison | cylon-intel-iot Intel Galileo | cylon-intel-iot Intel IoT Analytics | cylon-intel-iot-analytics Joystick | cylon-joystick Keyboard | cylon-keyboard Leap Motion | cylon-leapmotion MiP | cylon-mip MQTT | cylon-mqtt Nest | cylon-nest Neurosky | cylon-neurosky OpenCV | cylon-opencv Phillips Hue | cylon-hue Pebble | cylon-pebble Pinoccio | cylon-pinoccio PowerUp 3.0 | cylon-powerup Rapiro | cylon-rapiro Raspberry Pi | cylon-raspi Salesforce | cylon-force Skynet | cylon-skynet Spark | [cylon-spark](https:




