2015年10月9日金曜日

RaspberryPi に BlueZ をインストールして BLE を検知してみた

概要

BlueZ は Linux 上で Bluetooth を扱うためのプロジェクトです
RaspberryPi で Bluetooth や Bluetooth Low Energy を扱う場合にも BlueZ が必要になります
今回は BlueZ のインストール方法と BlueZ を使った簡単な Python スクリプトのサンプルを動作させてみました

環境

  • Raspberry Pi Type B Single Board Computer 512MB
  • Raspbian 7.8
  • Python 2.7
  • BlueZ 5.32
  • pybluez 0.22
  • Boost 1.49

BlueZ 5.32 のインストール

Rasbian 上で BlueZ をインストールする際に apt-get を使うと 4.99 というバージョンがインストールされてしまうのでソースからコンパイルしてインストールします

  • sudo apt-get install libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libical-dev libreadline-dev libudev-dev libusb-dev make
  • mkdir -p work/bluetooth
  • cd work/bluetooth
  • wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.32.tar.xz
  • tar xvf bluez-5.32.tar.xz
  • cd bluez-5.32
  • ./configure --disable-systemd --enable-library
  • make
  • sudo make install

make から make install にかけてやや時間がかかります
続けて make でインストールされないものを手動でインストールします

  • sudo cp attrib/gatttool /usr/local/bin/

あと、libbluetooth-dev の各種ヘッダファイルをビルドしたもので置き換えます

  • sudo cp -ipr lib/ /usr/include/bluetooth.5.32
  • cd /usr/include
  • sudo mv bluetooth bluetooth.4.99
  • sudo ln -s bluetooth.5.32/ bluetooth

BLE 検知テスト

hcitool という検知用の簡易ツールがあるのでそれを使ってみます

  • sudo hcitool lescan

とすることで BLE の信号を検知することができます
近くに BLE の端末がある場合は近づけると Mac アドレスとデバイス名を表示してくれます
hcitool のバージョンは hcitool と入力して表示されるヘルプの先頭に表示されています

より詳細な情報 (Advertising パケットの中身など) をみたい場合はあらかじめ sudo hcidump & としてバックグランド実行した状態で lescan をかけましょう

pybluez インストール

Python から操作するためのライブラリをインストールします
pip を使うのでインストールしています

  • sudo apt-get -y install python-pip
  • sudo apt-get install python-dev libbluetooth-dev libboost-all-dev
  • sudo pip install pybluez
  • sudo pip install pybluez[ble]

Python スクリプトから検知してみる

サンプルスクリプトを作成してスクリプトで BLE デバイスが検知できるか確認してみましょう

  • cd work/bluetooth
  • touch scan_ble.py
  • vim scan_ble.py
# bluetooth low energy scan
from bluetooth.ble import DiscoveryService

service = DiscoveryService()
devices = service.discover(2)

for address, name in devices.items():
    print("name: {}, address: {}".format(name, address))
  • sudo python scan_ble.py

でエラーにはならいのですが、BLE をうまく検知してくれず、、、

P.S 20151015
以下を対応してから実施したら上記でもうまく検知できました
http://kakakikikeke.blogspot.com/2015/10/raspberrypi-error-connect-connection.html

別のサンプルスクリプトを試してみる

で 10個 BLE情報を受信すると情報を出力しつづけてくれます
こちらはあっさり動きました
pybluez と一緒にインストールされる bluetooth というライブラリを使っていますがこっちのほうが簡単に扱えるかもしれません

最後に

BlueZ をインストールして BLE デバイスを検知してみました
最後は Python スクリプトから検知してみました
正直 hcitool がよく出来ているので難しいソースコードを見て自分スクリプトを組まなくてもいいかもしれません

また pybluez の BLE サポートライブラリをインストールするのに libbluetooth-dev が 4.101 以上のバージョンでないと gattlib のインストールに失敗するのはハマりました
今回は BlueZ をコンパイルしてできた bluetooth ディレクトリをコピーして最新にすることで対応しましたが、どこを探してもなかったので結構大変でした
2つ目のサンプルは gattlib を使っていないので BLE サポートのライブラリも入れる必要がないので 2 つ目を素直に使うのがいいと思います

参考サイト

0 件のコメント:

コメントを投稿