前: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が一番色々と揃ってたり、やってる人が多かったりする感じある。


BlendMicro


インストール


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でつながっている)を操作できるのも入っているので、サンプル見るとだいたいわかると思う。