Node.jsとblenoでRaspberry PiとiPhoneをBLEでつなげてみる
- 2018/02/23
- 22:23
Node.jsとblenoでRaspberry PiとiPhoneをBLEでつなげてみる
RoboTakaoです。ようこそ「極力ローコスト ロボット製作 ブログ」にお越しくださいました。
さて、今までRaspberry Pi Zero WとMacをBluetooth経由でシリアル通信してみたりしたのですが、iPhoneからRaspberry PiをBLE経由で制御することにトライしたいと思います。

BLEって何か
そもそもBLEって何か?Bluetooth Low Energyの略ですが、Bluetooth 4.0からBluetoothに統合されたプロトコルで従来のBluetoothより大幅に省電力化されたものです。残念ながらBluetooth3.0以前とは互換性がありません。
なぜBLEを使う?
とても単純でiOSではBLEしか使えないためです。(実際には従来のBluetoothも使用可能だが、特別にAppleと契約が必要らしく、個人では難しいらしい。)
セントラルとペリフェル
セントラル : BLE機器を利用するもの。今回はiPhoneを想定
ペリフェル : BLE機器側。今回はRaspberry Pi(その先のサーボ)を想定
Raspberry Pi側をペリフェルとして使うには、node.jsとblenoを使うのが良いらしいです。
Node.js サーバーサイドのJavaScript https://nodejs.org/
Bleno BLEを使用するためのNode.jpライブラリ https://github.com/noble/bleno
Node.jsのバージョンを確認
Raspbianにも一応node.jsがインストールされているようですが、かなり古いものなので最新にします。まずは現状確認。
pi@raspberrypi:~ $ node -v
v0.10.29
2018.2.23現在では推奨版LTSが8.9.4、最新版Currentが9.6.1


Node.jpインストール
同時にバージョン管理ソフトのnpmもインストールします。
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install -y nodejs npm
pi@raspberrypi:~ $ sudo npm cache clean
pi@raspberrypi:~ $ sudo npm install n –g
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
n@2.1.8 /usr/local/lib/node_modules/n
pi@raspberrypi:~ $ sudo n stable
install : node-v9.6.1
mkdir : /usr/local/n/versions/node/9.6.1
fetch : https://nodejs.org/dist/v9.6.1/node-v9.6.1-linux-armv6l.tar.gz
######################################################################## 100.0%
installed : v9.6.1
再起動して確認するとちゃんと最新版になっています。
pi@raspberrypi:~ $ node -v
v9.6.1
pi@raspberrypi:~ $ npm -v
5.6.0
bleno
githubに見に行ってみます。
https://github.com/noble/bleno
READMEを確認
Linux
Kernel version 3.6 or above
libbluetooth-dev
bluetoothd disabled, if BlueZ 5.14 or later is installed. Use sudo hciconfig hci0 up to power Bluetooth adapter up after stopping or disabling bluetoothd.
System V:
sudo service bluetooth stop (once)
sudo update-rc.d bluetooth remove (persist on reboot)
systemd
sudo systemctl stop bluetooth (once)
sudo systemctl disable bluetooth (persist on reboot)
BlueZをインストールしているならば一旦停止させよと書いてあるのでそうする。
pi@raspberrypi:~ $ sudo systemctl stop Bluetooth
ライブラリーのインストール
pi@raspberrypi:~ $ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
blenoのインストール
pi@raspberrypi:~ $ npm install bleno
Bluetoothの起動
pi@raspberrypi:~ $ sudo hciconfig hci0 up
サンプルファイル
サンプルファイルをダウンロードする。
pi@raspberrypi:~ $ git clone https://github.com/sandeepmistry/bleno.git
この中でバッテリーサービスを動かしてみる。
$ cd bleno/examples/battery-service/
pi@raspberrypi:~/bleno/examples/battery-service $ npm install
pi@raspberrypi:~/bleno/examples/battery-service $ sudo node main.js
on -> stateChange: poweredOn
on -> advertisingStart: success
setServices: success
iPhone側
App StoreでLightBlue Explorerをインストール

raspberrypiと言う名前で見えるようになっています。

接続してみるとBattery Serviceとして接続できていることが確認できました。

それでは今回はこの辺で失礼します!ありがとうございます。
pyhon版のblenoであるpyblenoでRaspberry PiとiPhoneをBLEでつなげてみる ホーム
Raspberry Pi Zero WでPCA9685 16チャネルPWMサーボモータドライバを使ってみた(python)。