node.jsからBluetooth Low EnergyでArduinoをリモートコントロールできるble-firmata npmに、v0.1.1から自動再接続機能がついた。
BLEは有線のシリアル通信よりも接続切断は頻繁におこる。
見通し20メートルぐらいまで問題なく通信できるけど、家のドアなど金属製の遮蔽物があると切断される。そういう場合でも自動再接続されて、回線を意識せずロジックのプログラミングに集中できるようにした。
https://www.npmjs.org/package/ble-firmata
インストール
% npm install ble-firmata
注意
on ‘connect’イベントはデバイスが再接続される毎に呼ばれるので、その中でsetIntervalとかすると良くない。
once ‘connect’を使うとかすると良い。
BLEの切断
切断を検知するとarduino.on ‘disconnect’をemitするようにしておいた。
切断は色々な要因で起こる。
- BlendMicroの電源が落ちる
- BlendMicroが遠く離れて、電波が届かなくなる
- BlendMicro側からnRF8001を切断する
- node側でarduino.close()する
- Macのbluetoothメニューで、[デバイス名]→[接続解除]を選択する
- Macのbluetoothメニューで、bluetoothを「切」にする
いずれの場合も自動再接続が働く。
自動再接続を無効にする
reconnect = falseすれば自動再接続しない。一瞬接続して、切断して、しばらくしたらまた接続するような用途の場合は無効にすればいい。
arduino = new BLEFirmata().connect()
arduino.reconnect = false