前: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モジュールが無いのが、複数プロセスで共有できないらしい。
socket.ioと一緒に使う
他にもサンプルには
socket.ioでブラウザからarduino(サーバーとはBLEでつながっている)を操作できるのも入っているので、サンプル見るとだいたいわかると思う。