追記:npmにしたり、firmata作った
—
Mac OSXで動かしてるNode.jsとBluetoothで通信できるようになった。無線でArduino制御するの超簡単になっちゃった。
もうXBeeとか無くていいと思う。ミニ四駆とかに乗せるのに良さそう。
試したのはちゃんとコネクションはって双方向通信するやつ。次はAdvertisementパケットにセンサーの値でも乗せて垂れ流すのをやってみたい。
ソースコードとかはgithubにおいてある
https://github.com/shokai/blendmicro-study
ArduinoMicroにBLE(Bluetooth Low Energy)を追加したBlend Microというボードが先月末に出たので、買って試した。
1枚$36なので、2枚買った。注文して1週間ぐらいで届いた。
普通のArduinoMicroより1000円高いだけなので、(各言語から通信できるライブラリが揃ってくれば)とても良いと思う。
Blend Micro
Blend Micro — RedBearLab
ほぼArduino Microなマイコン基板に、BLEのチップ(
Nordic nRF8001)が追加されている。
ATMegaからはACIというSPIに似たプロトコルで通信して制御する。その部分は
Arduinoライブラリになっている。
Arduino Microと比べて少し小さい。小さいのはnRF8001の制御にピンを使っているからその分をIOピンに引き出していないからだと思う。多分。
VCCが5Vではなく3.3Vになっている。nRF8001の動作のためにUSB 5Vを3.3Vに落としている。
セットアップ
チュートリアルをよく読んで、ライブラリを追加したり、Arduino IDEの中のファイルを置き換えたりとかする必要がある。ちょっと面倒。
Getting Started – Blend Micro — RedBearLab
Arduino IDE側の環境が整ったら、サンプルスケッチのBLEControllSketchをBlendMicroに書き込んで、
Androidアプリや
iOSアプリから操作してみるといい。
やってみた
Node.jsと通信する
nodeからBLEでデバイス見つけて、文字列を書き込んで、BlendMicroが受信して、nodeにエコーする、というのを作ってみた。
Bluetoothの仕様全然知らないし、ドキュメントとか無かったけどソース読んでたら理解できてきてnodeで書けた。
通信しているところ。「かずどん」「ざんまい」などの文字列を送ると、
「echo>」が頭に付いて返ってくる。日本語が普通に通ってしまった。
nodeでのBLEは
noble npmを使った。
通信方法はドキュメントが無いので、
AndroidアプリのChatサンプルのコードと、
BlendMicro内で使ってる
NordicSemiconductor/ble-sdk-arduinoや
RedBearLab/nRF8001などのライブラリを読んだ。
ペリフェラル(デバイス)は名前で探して、その中のserviceリストとservice内のcharacteristicsリストから、nRF8001のRX/TXになってる奴をUUIDで識別すればいいだけだった。
複数のデバイスを接続する場合はarduino側でble_set_nameメソッドで名前を個別に変えて、それをnode側でperipheral.advertisement.localNameで探すとよさそう。