もみあげあしめ

組み込みとかIoTとか、いろいろ

Fitbit Charge HRとBLEで通信したい

Fitbit Charge HR はアプリを使えば現在計測中の心拍数を取得できます。
これをRaspberry Piから取得できれば、面白いことができそうですよね!

f:id:shima_nigoro:20160603222927p:plain:w300

この記事はRaspberry Pi(OSがrapbian wheezy)で Bluetooth Low Energy(BLE)
を使えるようにしようとして、通信できなかったことを書いたものです。

経緯はいいから、通信に成功した版を読ませろという方は下記の記事へ

BlueZ をソースからコンパイルする方法が知りたければ続きをどうぞ。
Control Bluetooth LE Devices From A Raspberry Pi を参考に BlueZ をインストールします。

1. 最新版の BlueZ のインストール

1.1. apt でインストールした BlueZ の削除

aptitude(apt) で入る BlueZ には消えてもらう。

sudo apt-get --purge remove bluez


1.2. BlueZ のダウンロード

https://www.kernel.org/pub/linux/bluetooth/ から最新版の BlueZ を探してダウンロード
※2016年6月3日時点ではbluez-5.40.tar.xzが最新

wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.40.tar.xz


1.3. BlueZ のインストール

・ダウンロードした BlueZ を展開する

tar xvf bluez-5.40.tar.xz

bluetooth の動作に必要なその他のライブラリをインストール

sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev

環境変数設定

export LDFLAGS=-lrt

#LDFLAGS=-lrtってなんだろ

・展開したディレクトリで configure して make ファイル生成

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-library -disable-systemd

・ビルドする(Raspberry Pi 2 上で約10分くらい)

make

・ビルドに成功したならばインストール

sudo make install

・なぜか gattool だけインストールされないので自分でコピーする

sudo cp attrib/gatttool /usr/bin/


2. BLEのUSBドングルを確認する

今回はどのご家庭にもある、これを使ってみました。

・ドングルを差し込んで lsusb で認識するか確認

lsusb

繋がっていれば下記のような感じの結果が表示される

Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

・繋げただけだと通信できないので、通信可能な状態にする

sudo hciconfig hci0 up

・下記コマンドで「UP RUNNING PSCAN」が表示されればOK

hciconfig


3. BLEデバイスを探してみる

BLEで通信できるデバイスは、Advertising パケットと呼ばれるパケットを
一定周期で飛ばしているので、下記コマンドでそれを拾って表示する。

sudo hcitool lescan

Fitbit Charge HR は BLE を使っているので次のように表示される
MAC はとりあえず伏字にしておく

LE Scan ...
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX Charge HR
:


4. BLEデバイスに接続する

・スキャンした時のMACアドレスを使って接続する(-Iで対話モード)

sudo gatttool -b XX:XX:XX:XX:XX:XX -I

※gatttool の対話モードが始まると「[XX:XX:XX:XX:XX:XX][LE]>」が表示されます。

・下記コマンドで接続

[XX:XX:XX:XX:XX:XX][LE]>connect

・下記のような表示が出て無事、接続できませんでした!

Attempting to connect to D8:2A:FC:43:0E:2F
Error: connect: Connection refused (111)

めでたしめでたし


…ではなくてですね。続きの解決編はこちら