秋月の外のレジの下の棚にある350円のソーラーパネル2枚でBlendMicroが起動し、BLEが動いた。
Macからble-firmataでanalogReadとかもできた。
何しよう。
7月012014
0
6月142014
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
6月142014
前:blendmicro npm 作った
作った
https://github.com/shokai/node-ble-firmata
https://www.npmjs.org/package/ble-firmata
node.jsからBLE上のfirmataプロトコルでarduinoを操作できるのを作った。
firmataはarduino側にあらかじめファームウェアを書き込んでおいて、PCからリモコンするというもの。プログラムがPC側だけで完結するのでシンプルになって良い。
既存のfirmata(Arduino IDEのスケッチ例に入ってるやつ)はシリアル通信だけど、BLEが使えるBlendMicroというArduinoMicro派生ボードと通信できるようになった。
あと試してないけど、同じRedBearLabが出してるBLE Shieldとも通信できると思う。
スクリプト言語でハードウェアやるのは、最近はnodeが一番色々と揃ってたり、やってる人が多かったりする感じある。
インストール
node側
% npm install ble-firmata
arduino側
sketch exampleに入っているBLEFirmataSketchは動かないので、 firmwareディレクトリの下に置いておいたファームウェアを書き込む必要がある。
詳しくはInstallの項目を読むといいと思う。
一応プルリクだしておいたので、そのうち取り込まれるかもしれない。
使う
こんな感じで接続して使う。
digitalRead、servoWriteやanalogWrite、sysexもある。
BLEFirmata = require 'ble-firmata'
arduino = new BLEFirmata().connect()
arduino.on 'connect', ->
console.log "connect!"
console.log arduino.boardVersion
digitalWrite 13, true
console.log analogRead 0
複数使う
arduinoに書き込むファームウェアの上の方に#define BLE_NAME "BlendMicro"というのがあって、これが名前になっている。最大10文字まで。
new BLEFirmata().connect(“shokai1”) みたいな感じで、指定したBlendMicroに接続できる。
デフォルト値は”BlendMicro”。
Macbook Airで試したところ、1つのnodeプロセス内で2つのBlendMicroに接続はできた。しかし2つnodeプロセスを立ててそれぞれでBLEを使おうとすると、BLEのラッパーがエラーだして落ちた。どうやらMacの中にハードウェア的に1つしかBluetoothモジュールが無いのが、複数プロセスで共有できないらしい。