Star Wars BB-8 meets Texas Instruments SensorTag

My first tests in the Internet of Things world. Using node.js to communicate with a TI sensortag and a sphero BB-8. Just reading the luxometer from the sensortag and if it goes dark, switch bb-8 color to red.

Sure, this is not really an impressive demo, but to start with a new topic, I always prefer small and easy examples. Those examples can be implemented from scratch by myself, instead of using rather complex examples, I don’t understand in detail.

var sphero = require("sphero");
var util = require('util');
var async = require('async');
var SensorTag = require('sensortag');

console.log("Searching for BB-8...");
bb8 = sphero("b1c5974fe1634c8ebd08f575cd3fc9e7"); // change BLE address accordingly

bb8.connect(function () {
 console.log("--> connected to BB-8");

 //The Ping command verifies that BB8 is awake and receiving commands.
 bb8.ping(function(err, data) {
 console.log(err || data);
 console.log("Searching for sensor tag...");
 SensorTag.discover(function (sensorTag) {
 console.log('--> discovered: ' + sensorTag);

 sensorTag.on('disconnect', function () {
 console.log('--> disconnected!');
 process.exit(0);
 });

 async.series([
 function (callback) {
 sensorTag.connectAndSetup(function (err) {
 console.log("--> Sensortag setup successfull!");
 callback();
 });
 },
 function (callback) {
 sensorTag.enableLuxometer(function () {
 console.log("-> Luxometer enabled");
 callback();
 });
 },
 function (callback) {
 sensorTag.enableAccelerometer(function () {
 console.log("-> Accelerometer enabled");
 callback();
 });
 },
 function (callback) {
 sensorTag.enableGyroscope(function () {
 console.log("-> Gyroscope enabled");
 callback();
 });
 }
 ],
 function (err) {
 if (err) {
 console.log("something went wrong: " + err);
 throw err;
 }
 console.log("==> Init complete, start reading sensors...");

 //start reading sensors in loop
 var interval = setInterval(function () {
 readSensor(sensorTag);
 }, 1000);
 });
 });
 });
});

function changeColor(color) {
 console.log("--> change BB-8 color to " + color);
 bb8.color(color);
}

function readSensor(sensorTag) {
 var localdata = {
 lux: 0,
 accelerometer: { x: 0, y: 0, z: 0 },
 gyroscope: { x: 0, y: 0, z: 0 }
 };
 async.parallel([
 function (callback) {
 sensorTag.readLuxometer(function (error, lux) {
 localdata.lux = lux.toFixed(1);
 callback();
 });
 },
 function (callback) {
 sensorTag.readAccelerometer(function (error, x, y, z) {
 localdata.accelerometer.x = x.toFixed(1);
 localdata.accelerometer.y = y.toFixed(1);
 localdata.accelerometer.z = z.toFixed(1);
 callback();
 });
 },
 function (callback) {
 sensorTag.readGyroscope(function (error, x, y, z) {
 localdata.gyroscope.x = x.toFixed(1);
 localdata.gyroscope.y = y.toFixed(1);
 localdata.gyroscope.z = z.toFixed(1);
 callback();
 });
 }
 ], function (err) {
 if (err) {
 console.log("Something went wrong: " + err);
 throw err;
 } else {
 //print collected sensor data
 printData(localdata);
 console.log(localdata.lux.toString());
 if (localdata.lux < 0.5) {
 changeColor("red");
 } else {
 changeColor("green");
 }
 }
 });
}

function printData(data) {
 console.log("lux=%d \t acc(x/y/z)=(%d/%d/%d) \t gyro(x/y/z)=(%d/%d/%d)", data.lux, data.accelerometer.x, data.accelerometer.y, data.accelerometer.z, data.gyroscope.x, data.gyroscope.y, data.gyroscope.z);
}
Advertisements
Aside | This entry was posted in Development, Internet of Things and tagged , , , . Bookmark the permalink.