BLE接続のArduinoマイコンボードBlendMicroと簡単に通信できるnodeライブラリをアップデートした。
https://www.npmjs.com/package/blendmicro
v0.2.3になった。
普通BLEで通信しようとすると、PeripheralをScanしてServiceを探してTXとRXを探して……とかなり面倒な実装をしなければならないのだが、このライブラリを使うとマイコン側のble_set_name関数で指定した名前で探して接続まで全部やってくれるのでとても簡単に通信ができる。
自動再接続
BlendMicroと距離が離れて電波が通らなくなったり、太陽電池で動かしていて電源が落ちたりした時に、自動的に再scanしてちゃんと再接続できるようになった。この機能はデフォルトで有効になっている。
というかもともと再接続は実装していたんだけどバグがあったのでちゃんと直した。3日ぐらい動かしっぱなしにしていて調子が良かったのでリリースした。
blendmicro.reconnect = false;を指定すると無効にできる。
複数のBlendMicroへの同時接続
今までは1つのNodeプロセスから1つのBlendMicroにしか接続できなかったんだけど、うまくイベント管理したら複数同時接続できるようになった。
これはblendmicro npmを内部で使っているble-firmataでも使えるので、例えばこういう風に複数のBlendMicroに接続してそれぞれアナログ入出力させたりが簡単に書ける。
var BLEFirmata = require('ble-firmata');
var devices = [ "BlendMicro", "device2", "device3" ];
devices.map(function(device_name){
return new BLEFirmata().connect(device_name);
}).forEach(function(arduino){
arduino.on('connect', function(){
console.log("connect!!" + arduino.peripheralName);
console.log("board version: "+arduino.boardVersion);
});
arduino.once('connect', function(){
setInterval(function(){
var an = Math.random()*255;
arduino.analogWrite(13, an);
console.log(arduino.peripheralName + " -> " + arduino.analogRead(0));
}, 100);
});
});
もちろん複数台でも切断時再接続される。
BLENanoと通信できるようになった
BlendMicroと同じRedBearLabが作っているBLENanoという、もうひと回り小さいボードと通信できた。俺はBLENanoを持っていないんだけど、hiraku君がBLENanoのサンプルコードの一つであるSimpleChatを書き込んだBLENanoを持っていてそれと通信させてもらったら通った。
SimpleChatの上の方に書いてあるService/TX/RXのUUIDがBlendMicroと同じなので、特に何も変更せずに動くことが確認できた。
なおBLENanoが手元にないのでble-firmataのBLENano版ファームウェアが書けないのだが、たぶんBLEFirmataSketch.inoを少し修正すれば動くと思うので誰か作って欲しい
add BLENano Firmata firmware · Issue #6 · shokai/node-ble-firmata
add BLENano sample code · Issue #7 · shokai/blendmicro-node