概要
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
別のサンプルスクリプトを試してみる
- cd work/bluetooth
- git clone https://github.com/switchdoclabs/iBeacon-Scanner-.git
- cd iBeacon-Scanner-
- sudo python testblescan.py
で 10個 BLE情報を受信すると情報を出力しつづけてくれます
こちらはあっさり動きました
pybluez と一緒にインストールされる bluetooth というライブラリを使っていますがこっちのほうが簡単に扱えるかもしれません
最後に
BlueZ をインストールして BLE デバイスを検知してみました
最後は Python スクリプトから検知してみました
正直 hcitool
がよく出来ているので難しいソースコードを見て自分スクリプトを組まなくてもいいかもしれません
また pybluez の BLE サポートライブラリをインストールするのに libbluetooth-dev が 4.101 以上のバージョンでないと gattlib のインストールに失敗するのはハマりました
今回は BlueZ をコンパイルしてできた bluetooth ディレクトリをコピーして最新にすることで対応しましたが、どこを探してもなかったので結構大変でした
2つ目のサンプルは gattlib を使っていないので BLE サポートのライブラリも入れる必要がないので 2 つ目を素直に使うのがいいと思います
0 件のコメント:
コメントを投稿