This is a basic Javascript implementation of the Root Robot Bluetooth Low Energy (BLE) protocol documentation.
The protocol was shared by Root Robotics, the creators of the Root robot.
You can just inclide the minified Javascript file and then you're ready to so.
<script type="text/javascript" src="js/root.min.js"></script>
Works in all browsers supporting navigator.bluetooth.requestDevice
(e.g. Chrome).
This is the minimum code to access the Javascript protocol implementation.
You need to trigger the Bluetooth Low energy device coupling by a user event.
That's a limitation of the browsers access to BLE devices.
As a result of this code snippet, you'll have a root Object,
which offers all documented protocol functions as of version 1.1
var bleDevice = new BleDevice(Root.identifier, Root.services);
bleDevice.addEventListener('connected', function(e) {
var root = new Root(bleDevice);
root.setup(function (root) {
root.device.sound.sayPhrase('Hello world!', console.log);
console.log('start using root', root);
window.root = root;
});
});
// ble device coupling needs a user event to be triggered
document.addEventListener('pointerup', function() {
bleDevice.scanAndConnect();
});
See our API documentation, what methods, evemts and properties are offered by this Root Robot protocol implementation.
Some very basic examples, how to use the protocol implementation (API).
function runQueue(arr) {
var fnc = arr.shift();
var next = function () { runQueue(arr); };
if (arr.length<=0) {
next = function () { console.log('done'); }
}
fnc(next);
}
Drive along a 15 centimeters square rectangle.
var go15cm = function (next) {
root.device.motors.driveDistance(150, next);
}
var turn90deg = function (next) {
root.device.motors.rotateAngel(900, next);
}
runQueue([go15cm, turn90deg, go15cm, turn90deg, go15cm, turn90deg, go15cm, turn90deg]);
Play notes of a scale.
var notes = {
'C4': 261,
'D4': 293,
'E4': 329,
'F4': 349,
'G4': 392,
'A4': 440,
'B4': 493,
'C5': 523
}
var playNote = function (note) {
return function (next) {
root.device.sound.playNote(notes[note], 400, next);
}
}
runQueue([playNote('C4'), playNote('D4'), playNote('E4'), playNote('F4'), playNote('G4'), playNote('A4'), playNote('B4'), playNote('C5')]);
Play different sounds, when touching the four quadrant touch areas on top of root.
root.device.touchSensors.addEventListener('touch', function (e) {
if (e.frontLeft) { playNote('A4')(); }
if (e.frontRight) { playNote('B4')(); }
if (e.rearLeft) { playNote('D4')(); }
if (e.rearRight) { playNote('E4')(); }
});
window.LOG = 1; // enable logging