- 概要
- Go言語 + GOBOT がBLE経由でmicro:bitを入出力デバイスとして利用できると知りRaspberry Pi配下で実験して見たがBLEがリンクしない(…BLEリンクして制御できるようになりました 2018.01.25)
- 上記1でmicro:bitを入出力デバイスとして利用するためのファームウェアはmicro:bitをNode.jsの入力デバイスとして使うためのファームの流用だった。
- Node.js + Johnny-five から入出力デバイス化micro:bitにBLE接続する実験は2017年8月に実験してBLEリンクはするもののデータの送受ができなかったので放置していた。
- これを機にもう一度 Raspberry Pi + Node.js + Johnny-five からBLE接続で入出力デバイス化micro:bitを使う実験をやってみたら簡単にリンクしデータの送受ができた。
2017年8月の段階と同じ手順で環境をセットアップしてできたので8月の実験で何が悪かったのか不明 - Raspberry Pi だけでなくmac でもうまく動いた。
- セットアップ手順を備忘として残す
- nodeモジュール bbc-microbit-io をインストールする。
- 実験環境のNode.jsのバージョン
$ node -v v8.9.4
-
/node-bbc-microbit-ioに従ってインストールする。
$ npm install bbc-microbit-io johnny-five (Johnny-fiveが未インストールのとき) >インストール経過が表示される >エラーが多数表示されるが無視 $
- micro:bitへのファームウェア書き込み
(Go言語を使った連携のためにmicro:bitにファームウェアを書き込んでいる場合はそのファームウェアがそのまま使えます)- micro:bitをRaspberry Pi にUSB接続する。
- リムーバブルストレージとしてマウントするか聞いてくるのでマウントする。
- ~/node_modules/bbc-microbit-io/node_modules/bbc-microbit/firmware/ に収容されている node-bbc-microbit-v0.1.0.hex をリムーバブルストレージ /media/pi/MICROBIT にコピーすることで書き込みを行う。
- サンプルの実行
- 当該ファームウェアはペアリングなしでBLEリンクできる設定になっている模様。このため事前のペアリングの操作は不要。
- ~/node_modules/bbc-microbit-io/examples/に移動
- led_matrix.jsを実行
$ sudo node led-matrix.js 1516667927765 Available BBC micro:bit 1516667930689 Connected BBC micro:bit 1516667930782 Repl Initialized >> clearing matrix drawing: 5 drawing: ! drawing: square LED Matrixに 5 ! □ が表示されれば動作OK sudo を付けず実行したい場合は次を1回実行しておけばよい。 (https://github.com/sandeepmistry/noble#running-on-linux を参照) $ sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
- 自前のプログラムで動かしたい
- /node-bbc-microbit-ioのBoilerplateプログラムを下敷きにして
- /node-bbc-microbit-ioのAPIとJohnny-fiveのAPIを併用してプログラムを書けば良い
- I2CデバイスをコネクタのPin19,Pin20に接続して制御することはできない。
- micro:bitには2系統のI2Cライン(0と1)があってI2C0はmicro:bit内蔵センサー接続用に使われI2C1がコネクタに出ている。
- bbc-microbit-ioとjohnny-fiveはI2C0を制御対象としI2C1は単なるデジタル入出力ピン(Pin19,Pin20)としてしか利用できない。
- このため,I2C1(Pin19,Pin20)にI2CデバイスをつないでもNode.jsで制御することができない。
- 複数のmicro:bitをコントロールしたい(実験途上)
サンプルのソースコードを見るとmicro:bitのID又はアドレスを指定してリンクできるようだが,うまく行っていない。var board = new five.Board({ io: new microbitio({ // id: '<id of micro:bit>', // optional // address: '<address of microbit>' // optional }) }); address: 'FD:3E:2C:36:AF:3F' のようにmicro:bitのアドレスを指定したがリンクしなかった。 idとaddressの両方を設定しなければならないのかも知れない。
- 実験環境のNode.jsのバージョン
- 今後
- nRF51系用のFirmataBLEをビルドし,Node.jsとmicro:bitをダイレクトに(/node-bbc-microbit-ioを使わないで)接続して連携させたい。