Raspberry Pi2にBluetoothのドングルを指して、Broadcom WICED SenseとTI SensorTagに同時にBluetooth経由でNodeJSでアクセスする方法について、備忘録で残しておく。
– 現物
右 : Broadcom WICED Sense
左 : TI Sensor Tag
– Broadcom WICED Sense
搭載されているセンサーとしては、加速度、ジャイロ、電子コンパス、気圧、温度、湿度が取れますね。BluetoothはBCM20737S。スイッチサイエンスさん、マクニカオンラインさんとかでゲットできるですね。
– TI Sensor Tag
こちらは、CC2650が搭載された激しめの端末。加速度、ジャイロ、3軸磁力計(というかMPU 9250)、照度、湿度、気圧、磁気、IRサーモパイルセンサといった感じで盛り積み。
– Raspberry PI2上での作業
NodeJSとbluezを入れるだけ。
uname -a
# nodejsとbluezのインストール
# Linux raspberrypi 4.1.7-v7+ #817 SMP PREEMPT Sat Sep 19 15:32:00 BST 2015 armv7l GNU/Linux
# RASPBIAN JESSIEを使っています。
#
sudo wget http://node-arm.herokuapp.com/node_latest_armhf.deb
sudo dpkg -i node_latest_armhf.deb
node -v
npm -v
sudo apt-get install bluez
– WICED Senseにつなぐ
npm install cylon
npm install cylon-ble
npm install cylon-wiced-sense
test.js
var Cylon = require('cylon');
// UUIDはhcitool lescanで見れるMacアドレス
// 00:10:18:01:4A:FA WICED Sense Kit
// こんな感じで
Cylon.robot({
connections: {
bluetooth: { adaptor: 'ble', uuid: '001018014afa' }
},
devices: [
{name : 'wiced', driver: 'wiced-sense' },
],
display: function(err, data) {
if (err) {
console.log("Error:", err);
} else {
console.log("Data:", data);
}
},
work: function(my) {
my.wiced.getData(function(err, data) {
if (!!err) {
console.log("Error: ", err);
return;
}
console.log("Data: ", data);
});
}
}).start();
結果
sudo node test.js
2015-10-15T07:22:39.092Z : [Robot 1] - Starting connections.
2015-10-15T07:22:39.152Z : [Robot 1] - Starting connection 'bluetooth'.
2015-10-15T07:22:43.960Z : [Robot 1] - Starting devices.
2015-10-15T07:22:43.963Z : [Robot 1] - Starting device 'wiced'.
2015-10-15T07:22:43.963Z : [Robot 1] - Working.
Data: { accelerometer: { x: 0, y: 0, z: 89 },
gyroscope: { x: -50, y: -247, z: -222 },
magnetometer: { x: 548, y: 653, z: -1464 } }
Data: { accelerometer: { x: 1, y: 0, z: 88 },
gyroscope: { x: 6, y: -249, z: -220 },
magnetometer: { x: 535, y: 656, z: -1463 } }
Data: { accelerometer: { x: 0, y: 0, z: 89 },
gyroscope: { x: -19, y: -219, z: -217 },
magnetometer: { x: 553, y: 651, z: -1460 } }
Data: { accelerometer: { x: 0, y: 0, z: 88 },
gyroscope: { x: 24, y: -250, z: -208 },
magnetometer: { x: 558, y: 643, z: -1451 } }
Data: { accelerometer: { x: 1, y: 0, z: 89 },
gyroscope: { x: 30, y: -243, z: -215 },
magnetometer: { x: 558, y: 648, z: -1448 } }
Data: { accelerometer: { x: 0, y: 0, z: 89 },
gyroscope: { x: -11, y: -243, z: -204 },
magnetometer: { x: 565, y: 671, z: -1460 } }
Data: { accelerometer: { x: 1, y: 0, z: 90 },
gyroscope: { x: 9, y: -246, z: -225 },
magnetometer: { x: 562, y: 646, z: -1440 } }
Data: { accelerometer: { x: 0, y: 0, z: 89 },
gyroscope: { x: 10, y: -227, z: -206 },
magnetometer: { x: 557, y: 651, z: -1462 } }
Data: { accelerometer: { x: 0, y: 0, z: 89 },
gyroscope: { x: -12, y: -251, z: -223 },
magnetometer: { x: 556, y: 642, z: -1451 } }
Data: { humidity: 701, pressure: 10120, temperature: 285 }
Data: { accelerometer: { x: 0, y: 0, z: 89 },
gyroscope: { x: 3, y: -248, z: -196 },
magnetometer: { x: 554, y: 655, z: -1455 } }
– Sensortagにつなぐ
npm install async
npm install bluebird
npm install sensortag
test.js
var SensorTag = require('sensortag');
// UUIDはhcitool lescanで見れるMacアドレス
// 68:C9:0B:06:E4:8D CC2650 SensorTag
// こんな感じで
SensorTag.discoverByAddress("68:C9:0B:06:E4:8D", function(tag) {
tag.on('disconnect', function() {
console.log('disconnected!');
process.exit(0);
});
function connectAndSetUpMe() {
console.log('connectAndSetUp');
tag.connectAndSetUp(enableTempMe);
}
function enableTempMe() {
console.log('enableSensor');
tag.enableHumidity(notifyMe);
tag.enableLuxometer(notifyLux);
}
function notifyLux() {
}
function notifyMe() {
tag.notifyHumidity(listenForHumidity);
tag.setHumidityPeriod(10000, function(error) {
if (error != null)
console.log(error);
});
}
function listenForHumidity() {
tag.on('humidityChange', function(temperature, humidity) {
tag.readLuxometer(function(error, lux) {
console.log('\tlux = %d', lux.toFixed(1));
console.log('\thumidity Temp = %d deg. C', temperature.toFixed(1));
console.log('\tthumidity = %d', humidity.toFixed(1));
});
});
}
connectAndSetUpMe();
});
結果
sudo node test.js
connectAndSetUp
enableSensor
lux = 134185
humidity Temp = 27.2 deg. C
thumidity = 64.9
lux = 140.2
humidity Temp = 27.2 deg. C
thumidity = 64.9
lux = 140.6
humidity Temp = 27.2 deg. C
thumidity = 64.9
めちゃ簡単。