記事一覧

Node.jsとblenoでRaspberry PiとiPhoneをBLEでつなげてみる

Node.jsとblenoでRaspberry PiとiPhoneをBLEでつなげてみる



RoboTakaoです。ようこそ「極力ローコスト ロボット製作 ブログ」にお越しくださいました。

さて、今までRaspberry Pi Zero WとMacをBluetooth経由でシリアル通信してみたりしたのですが、iPhoneからRaspberry PiをBLE経由で制御することにトライしたいと思います。

nodejs04.jpg

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

nodejs01.png
nodejs02.png

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をインストール

nodejs03.jpg

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

nodejs05.jpg

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

nodejs04.jpg

それでは今回はこの辺で失礼します!ありがとうございます。

スポンサードリンク

コメント

コメントの投稿

非公開コメント

プロフィール

RoboTakao

Author:RoboTakao
みなさんご訪問ありがとうございます。ロボット作りたいけどお小遣いそんなにないし、簡単でローコストでロボットを作るための私のプロジェクトを紹介します。

ウェブサイトもありますのでそちらもよろしくお願いします。
http://robotakao.jp/

スポンサーリンク