Raspberry Pi 3には標準でBLEが搭載されているので、AndroidアプリからBluetooth LEでラズパイと情報のやり取りをしてみたく、調べた結果を備忘録として記載しています。
3以外のBleutoothを搭載していないラズパイの場合は、別途、USBのBluetoothドングルを用意することによって、利用可能できます。私は、以下のドングルをラズパイ2で使っています。
今回は、Android側をセントラル(Central)、ラズパイ側をペリフェラル(Peripheral)とします。(ペリフェラルとは、周辺機器側みたいです)
ラズパイでnodejsを利用してペリフェラルを実現するサンプルをよく見かけるので、今回は、nodejsで実現してみます。
必要なものは、
nodejs(アプリの実行環境)
bleno(nodejsでBLEのペリフェラルを実現するライブラリ)
https://github.com/sandeepmistry/bleno
BlueZ(LinuxでBluetoothを利用するプロトコルスタック)
の3つになるかと思います。
以下の手順で行います。
1.nodejsのインストール
nodejsのインストールは、こちらを参考にできるかもです。
2.blenoが利用するBluetoothのプロトコルスタックのBlueZのインストール
$ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev |
3.npmを利用してblenoをインストール
$ npm install bleno |
4.blenoのサンプルプログラムをgitからダウンロード
$ git clone https://github.com/sandeepmistry/bleno.git |
5.サンプルプログラムの中のbattery-serviceを実行
$ cd bleno/examples/battery-service/ $ npm install $ node main.js on -> stateChange: poweredOn on -> advertisingStart: success setServices: success |
特にエラーが発生しなければ、無事実行されています。
次にAndroid側ですが、マーケットにセントラル側の確認アプリがありますので、今回は、それを利用します。
BLE Scanner: Read,Write,Notify
インストール後にアプリを起動し、周辺のBLEデバイス一覧に「Battery」が表示されますが、これがnodejsで実行したペリフェラルになります。
次に一覧から「Battery」デバイスの「CONNECT」を選択して接続をしてみます。接続されると、サービスが持っているサービス一覧が表示されます。
表示されたサービスから「BATTERY SERVICE」を選択し、サービスの持っている、「BATTERY LEVEL」キャラクティクス(characteristic)の値をリード(右側のRアイコン)すると、98%と取得できます。
以上です。