- Notifications
You must be signed in to change notification settings - Fork362
JavaScript framework for robotics, drones, and the Internet of Things (IoT)
License
hybridgroup/cylon
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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 incorporatemultiple, 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.
All you need to get started on a new robot is thecylon
module:
npm install cylon
With the core module installed, now install the modules for whatever hardwaresupport you need. For the Arduino + LED blink example, we'll need thefirmata
,gpio
, andi2c
modules:
npm install cylon-firmata cylon-gpio cylon-i2c
The below example connects to an Arduino over a serial connection, and blinks anLED once per second.
The example requires that the Arduino have the Firmata sketch installed; whichcan be obtained either through the Ardunio IDE or thegort arduino upload firmata
command available ingort.
varCylon=require('cylon');// define the robotvarrobot=Cylon.robot({// change the port to the correct one for your Arduinoconnections:{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 workingrobot.start();
varCylon=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();
varCylon=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();
To use the HTTP API plugin, first install it's NPM module:
$ npm install cylon-api-http
Then it can be used in scripts:
varCylon=require('cylon');// tell the HTTP API plugin to listen for requests at https://localhost:4000Cylon.api("http",{port:4000});varbots=[{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 onceCylon.start();
For those more familiar with jQuery, D3, or other fluent-style JavaScriptlibraries, Cylon.JS also supports a chainable syntax:
varCylon=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();
Cylon.js has an extensible syntax for connecting to multiple, different hardwaredevices. The following 36 platforms are currently supported:
Our implementation of GPIO (General Purpose Input/Output) allows for a sharedset of drivers supporting 14 different devices:
- GPIO <=>Drivers
- Analog Sensor
- Button
- Continuous Servo
- Direct Pin
- IR Range Sensor
- LED
- Makey Button (high-resistance button like theMakeyMakey)
- Maxbotix Ultrasonic Range Finder
- Motor
- Relay
- RGB LED
- Servo
- Temperature Sensor
- TP401 Gas Sensor
We also support 14 different I2C (Inter-Integrated Circuit) devicesthrough a sharedcylon-i2c
module:
- I2C <=>Drivers
- BlinkM RGB LED
- BMP180 Barometric Pressure + Temperature sensor
- Direct I2C
- HMC6352 Digital Compass
- JHD1313M1 LCD with RGB Backlight
- LCD
- LIDAR-Lite
- LSM9DS0G 9 Degrees of Freedom IMU
- LSM9DS0XM 9 Degrees of Freedom IMU
- MAG3110 3-Axis Digital Magnetometer
- MPL115A2 Digital Barometer & Thermometer
- MPU6050 Triple Axis Accelerometer and Gyro
- PCA9544a 4-Channel I2C Mux
- PCA9685 16-Channel 12-bit PWM/Servo Driver
In addition to our officially supported platforms, we have the following 8 user contributed platforms:
Platform | Support |
---|---|
APC UPS | cylon-apcupsd |
iBeacon | cylon-beacon |
Myo | cylon-myo |
One-Wire | cylon-one-wire |
Parrot Rolling Spider | cylon-rolling-spider |
PCDuino | cylon-pcduino |
Telegram | cylon-telegram |
WeMo | cylon-wemo |
We'll also have many more platforms and drivers coming soon,follow us on Twitter for updates.
Cylon.js can be run directly in-browser, using thebrowserify
NPM module.You can also run it from withing a Chrome connected app, or a PhoneGap mobile app.
For more info on browser support, and for help with different configurations, you can find more infoin our docs.
Cylon.js has support for different API plugins that can be used to interact with your robots remotely.At this time we have support forhttp/https,mqtt, andsocket.io with more coming in the near future.
To use an API plugin, install it alongside Cylon:
$ npm install cylon-api-http cylon-api-socketio
Then, all you need to do is callCylon#api
in your robot's script:
varCylon=require("cylon");// For httpCylon.api('http');// Or for Socket.ioCylon.api('socketio');
Then visithttps://localhost:3000/
and you are ready to control your robots from a web browser!
You can check out more information on the Cylon API in the docshere.
Cylon uses the Gorthttp://gort.io Command Line Interface (CLI) so you can access important features right from the command line. We call it "RobotOps", aka "DevOps For Robotics". You can scan, connect, update device firmware, and more!
Cylon also has its own CLI to generate new robots, adaptors, and drivers. You can check it out athttps://github.com/hybridgroup/cylon-cli.
We're busy adding documentation to our website, check it out atcylonjs.com/documentation.
If you want to help with documentation, you can find the code for our website at on thehttps://github.com/hybridgroup/cylon-site.
For our contribution guidelines, please go toCONTRIBUTING.md.
For the release history, please go toRELEASES.md.
Copyright (c) 2013-2016 The Hybrid Group. Licensed under the Apache 2.0 license.
About
JavaScript framework for robotics, drones, and the Internet of Things (IoT)