nobleでお手軽BLE通信(構築編)
nobleというNode.jsのパッケージがある。
公式のGithubページは以下です。
これをいれれば、自分のパソコンをBLEの発信機にすることができるすごいパッケージなのです。
今回はGithubのサンプルを試して見ようと思います。
ですが、久しぶりにNode.jsを触ったのでインストールに手こずりました。。
RubyとかNodeとか、環境構築に一番時間がかかる気がする。。
Gemとかnpmが一発でインストールできた例がない。。
では行きます!
実行環境
今回は、以下の環境で試しました
- OS X El Capitan 10.11.6
- ✗Node.js v6.9.1 -> ◯v4.7.2
最初一番新しい安定バージョンv6.9.1で試したら動かずv4.7.2で試したら動いたというのが今回のあらましです。
Githubのサンプルを試す
最初node.jsのバージョンはバージョンv6.9.1で試しました。
Githubのリポジトリーを見る限りexamplesディレクトリがあり、色々試せそうな感じでした。
なので何も考えずgit cloneをしましょう。
git clone git@github.com:sandeepmistry/bleno.git
一番カンタンそうなサンプル、battery-serviceを試してみたいと思います。
説明のページはここです。
https://github.com/sandeepmistry/bleno/tree/master/examples/battery-service
battery-serviceのディレクトリまで移動します。
cd bleno/examples/battery-service/
npmをインストールしてみます。
npm install
すると何やらgyp ERR! configure error
というエラーがでてしまっていました。
依存のパッケージがインストール&ビルドできていない状況みたいでした。
こちらを確認して
npm installで起こるnode-gypのエラーの対処方法
python2.7をインストールしました。
でも失敗する。。
あれ?もしかして、Nodeのバージョンが悪いのかな?
Node.jsのバージョンを下げる
v6.9.1バージョンに対応していないことを疑って、Node.jsのバージョンを下げることにしました。
Node.jsのバージョン管理にnodebrewをつかってた気もしたのですが、直接インストールしたかもしれないので、一度Node.jsをアンインストールすることにしました。
こちらの記事を参考にしました。
node.jsのversionを管理するためにnodebrewを利用する
まず、nodeが生きているかを確認します。
node -v
バージョンが出てきたら、生きているので削除します。
$ curl -o uninstall-node.sh https://gist.githubusercontent.com/nicerobot/2697848/raw/uninstall-node.sh
$ chmod u+x uninstall-node.sh
$ ./uninstall-node.sh
$ rm uninstall-node.sh
$ sudo rm -rf /usr/local/include/node
$ sudo rm -rf /usr/local/lib/dtrace
$ rm -rf ~/.node-gyp
$ rm -rf ~/.npm
$ rm -rf ~/.sourcemint
nodebrewをインストールします。
$ curl -L git.io/nodebrew | perl - setup
...
========================================
Add path:
export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
インストールの出力に出ていたようにexport PATH=$HOME/.nodebrew/current/bin:$PATH
のパスを通します。
~/.bash_profile
に追加します。
vim ~/.bash_profile
#export PATH=$HOME/.nodebrew/current/bin:$PATH追加
$ source ~/.bash_profile
$ nodebrew help
nodebrewを使えるようになりました。
バージョンを変えます。
まず利用できるバージョンを確認します。
nodebrew ls-remote
その中でv4.7.2をインストールします。
$nodebrew install-binary v4.7.2
Fetching: https://nodejs.org/dist/v4.7.2/node-v4.7.2-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully
ローカルで使用可能なバージョンを確認します。
$nodebrew ls
v4.4.7
v4.7.2
v6.9.1
current: v6.9.1
使用するバージョンをv4.7.2に変更します。
$nodebrew use v4.7.2
use v4.7.2
nodeコマンドでバージョンを確認します。
$ node -v
v4.7.2
あらためてbattery-serviceを試す!
これで上手く行くはず!
battery-serviceのディレクトリに移動してnpm install
です
$ cd battery-service/
$ npm install
...
上手くいけばエラーなく完了します。
サンプルをnodeコマンドで実行してみます。
$ node main.js
on -> stateChange: poweredOn
on -> advertisingStart: success
setServices: error Error: failed to set service 180F, UUID not allowed!
なんかエラーがでました。failed to set service 180F, UUID not allowed!
とあるのでUUIDが180Fだと桁が少なくて認められていないとあります。
UUIDを作成します。
uuidgen
DA211EFD-156D-437E-9120-0815F5B4FCB4
この値をbattery-service.jsのuuidへ書き換えます。
//battery-service.js
function BatteryService() {
BatteryService.super_.call(this, {
uuid: 'DA211EFD-156D-437E-9120-0815F5B4FCB4',
characteristics: [
new BatteryLevelCharacteristic()
]
});
}
もう一度実行
$ node main.js
on -> stateChange: poweredOn
on -> advertisingStart: success
setServices: success
上手くいっているようです。
スマフォで確認してみます。
iOSでBLEの通信を受信できるアプリLightBlueで確認してみます。
どうやらこのtkrというものみたいです。
とりあえず、動いたので、良しとします。
最後に
今度は自分のMacをiBeaconにしたいと思います。
もっとドキュメント読み込もう。
最後まで読んでいただいてありがとうございました。