Raspberry Pi を Bluetooth Low Energy (BLE) の Peripheral として動作させる
Raspberry Pi に Bluetooth ドングルを接続し、BLE の Peripheral として動作させてみました。
Raspberry Pi のモデルは、Model B+ V1.2 、Bluetooth ドングルは Planex の BT-Micro4 を利用しています。
BlueZ のインストール
BlueZ はオープンソースの Bluetooth プロトコルスタックです。
Linux 等で利用されており Android でも、 4.1 まで BlueZ が利用されていました。
ライブラリのインストール
RPi Bluetooth LE を参考に、必要なライブラリをインストールします。
$ sudo apt-get update $ sudo apt-get install libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libical-dev libreadline-dev libudev-dev libusb-dev make
BlueZ のダウンロード
BlueZ のソースコードをダウンロードします。
$ mkdir ble $ cd ble $ wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.4.tar.xz $ xz -d bluez-5.4.tar.xz $ tar xvf bluez-5.4.tar
BlueZ のインストール
ソースコードをビルドします。
ビルドには少し時間がかかります。
$ cd bluez-5.4 $ ./configure --disable-systemd $ make
ビルドが完了したらインストール。
$ sudo make install
動作の確認
Bluetooth ドングルのチェック
Raspberry Pi に Bluetooth ドングルを接続し、以下のコマンドを実行。
$ lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) Bus 001 Device 004: ID 0789:0168 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter
Device 005 が接続した Bluetooth ドングルです。
Bluetooth ドングルの詳細を表示。
$ sudo lsusb -v -d 0a12:
hcitool を使ってみる
Bluetooth の状態を確認。
$ hciconfig hci0: Type: BR/EDR Bus: USB BD Address: 00:1B:DC:05:XX:XX ACL MTU: 310:10 SCO MTU: 64:8 DOWN RX bytes:547 acl:0 sco:0 events:27 errors:0 TX bytes:384 acl:0 sco:0 commands:27 errors:0
Bluetooth を起動。
$ sudo hciconfig hci0 up $ hciconfig hci0: Type: BR/EDR Bus: USB BD Address: 00:1B:DC:05:XX:XX ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING RX bytes:1094 acl:0 sco:0 events:54 errors:0 TX bytes:768 acl:0 sco:0 commands:54 errors:0
3行目が UP RUNNING に変わり、Bluetooth が起動しました。
Bluetooth デバイスのスキャン
$ sudo hcitool lescan LE Scan ...
周囲にある Bluetooth デバイスのリストが表示されます。
特に問題なく Bluetooth ドングルは動作しているようです。
node.js で Bluetooth を利用する
node.js の bleno を利用します。
nodebrew で node.jsをインストール
bleno を利用するために、まずは node.js をインストールします。
node のバージョン管理を行う nodebrew を利用してインストールします。
$ curl -L git.io/nodebrew | perl - setup
インストールが完了したら.bashrc
に PATH を追加。
export PATH=$HOME/.nodebrew/current/bin:$PATH
設定を読み込みます。
$ source .bashrc
PATH が通ったかどうかを確認。
$ nodebrew help
node をインストール。
Raspbian で動作するバイナリの最新バージョンは v0.10.28 のようなので、そのバージョンを指定してインストール。
$ nodebrew install-binary v0.10.28
インストールできたことを確認。
$ nodebrew list v0.10.28 current: none
インストールしたバージョンを利用するように設定します。
$ nodebrew use v0.10.28
nodeのバージョンを確認
$ node -v v0.10.28
bleno のインストール
bleno をインストールするまえに、必要なライブラリをインストール。
sudo apt-get install bluetooth bluez-utils libbluetooth-dev
作業ディレクトリを作成し、ローカルに bleno をインストール。
$ cd workspace $ mkdir ble $ cd ble $ mkdir GATT $ cd GATT $ npm install bleno
root/sudo を使わなくても実行できるようにします。
$ sudo apt-get install libcap2-bin
setcap を実行するためのライブラリをインストール後、npm install
を実行したディレクトリで以下のコマンドを実行します。
$ find -path '*bleno*Release/hci-ble' -exec sudo setcap cap_net_raw+eip '{}' \;
GATT ディレクトリにindex.js
ファイルを作成し、sandeepmistry/bleno を参考に GATT のサービスを構築しました。
実行して、Apple の Bluetooth Explorer で、動作を確認します。
$ node index
Service UUID がアドバタイズされ、接続して設定した Characteristic の値を読み出すことができました。