Raspberry Pi + BLEで、konashi/SBBLEを動かしてみたのでその手順を紹介します。
使用したもの:
・Raspberry Pi B
・USB Bluetoothドングル(I-O DATA Bluetooth4.0+EDR/LE準拠 USBアダプター USB-BT40LE)
手順1:
ここを参考にnode.js をインストールする。v0.10.24を使用した。
・Raspberry Piにnodejsをインストール - fukajun - DeepValley -
最初にnodebrewをインストールすると、PATHを追加しろというメッセージが出るので”.bashrc”に追加しておく。
手順2:
ここを参考にBlueZ 4.101 と nobleをインストールする。bluez-5.4ではNGだった。
・Getting started · sandeepmistry-noble Wiki · GitHub
手順3:
ここの、”2. 環境変数を引き継ぐ場合”を参考に、visudo コマンド使用してsudoに環境変数を引き継ぐように sudoers を設定する。
・sudo「コマンドが見つかりません」PATHが初期化されているときの対処法 - シングスブログ
nobleをインストールするとカレントディレクトリにnode_modules/nobleというディレクトリ作られる。
そこにnobleのサンプル等が有るので動作確認に使える。
動かない時は、”sudo hciconfig hci0 up” を実行してみる。
手順4:
node_modules/nobleに、ここのプログラムを適当な名前を付けて保存する(例えばkn.js)。
・14/11/12: Node.js+nobleでkonashiをつつく
実行は sudo node kn.js
うまくいけば、konashi/SBBLEのPIO0-PIO7につないだLEDが点灯するはず。(SBBLEで動作確認した。)
UUIDを変更すればkoshianでも動いた。koshianのUUIDはここを見ればわかる。
koshianのUUIDはハイフン無しの16進小文字で指定する。
koshianはシリアル受信のNotifyがデフォルトでONになっているようでゴミを受信するようだ。(2014.11.30時点でのファーム)
PIO0のLチカとAIO0リードの例:
//------------------------------------------------------------------------------
var noble = require('./index');
noble.on('stateChange', function(state) {
if (state === 'poweredOn') noble.startScanning();
else noble.stopScanning();
});
noble.on('discover', function(peripheral) {
noble.stopScanning();
console.log('peripheral with UUID ' + peripheral.uuid + ' found');
var advertisement = peripheral.advertisement;
var localName = advertisement.localName;
if (localName) {
console.log('Local Name = ' + localName);
}
peripheral.connect(function(error){
if(error) console.log('connect error: ' + error);
console.log('connected to ' + peripheral.uuid);
peripheral.discoverServices(['ff00'], function (error, services){ // 0xff00=KONASHI_SERVICE_UUID
if(error) console.log('discoverServices error: ' + error);
console.log('services.length: ' + services.length);
var konashiService = services[0];
konashiService.discoverCharacteristics(['3000','3002','3008'], function(error, characteristics){
if(error) console.log('discoverCharacteristics error: ' + error);
console.log('characteristics.length: ' + characteristics.length);
characteristics[0].write(new Buffer([1]), true); // 0x3000=KONASHI_PIO_SETTING_UUID
var toggle = false;
setInterval(function(){
characteristics[2].read(function(error, data) { //0x3008=KONASHI_ANALOG_READ_0_UUID
if (data) {
console.log( 'value:' + (data[1] + data[0]*256)/1000 );
}
});
if(toggle){
// LED ON
characteristics[1].write(new Buffer([1]), true); // 0x3002=KONASHI_PIO_OUTPUT_UUID
} else {
// LED OFF
characteristics[1].write(new Buffer([0]), true); // 0x3002=KONASHI_PIO_OUTPUT_UUID
}
toggle = !toggle;
}, 1000);
});
});
});
});
//------------------------------------------------------------------------------
補足:
konashi/SBBLEを動かすときはキャラクタリスティックスにどういう値を読み書きすれば良いか知る必要がある。
その時はランニングエレクトロニクスさんが公開して下さっているSBBLEのソースが参考になる。
ー以上ー
参考リンク
・14/11/12: Node.js+nobleでkonashiをつつく
・Getting started · sandeepmistry-noble
・Bluetoothが載ってるArduino派生ボード「BlendMicro」とNode.jsでBLEした