アルプスのセンサネットワークモジュールは、Bluetooth Low Energy(BLE)を用いて、気圧、温度・湿度などの環境データの他に、モーションデータを取得できます。今回は、Raspberry Pi 3で、アルプスのセンサネットワークモジュールをPython言語を使ってアクセスする環境を構築してみました。なお、C言語からのアクセスについては「アルプスのセンサネットワークモジュールをラズパイ3と3GPIで使ってみる(其の2 C言語によるBLEソフト)」を参考にしてください。
BlueZ のインストール
Rasbian 上で BlueZ をインストールする際に apt-get を使うと バージョン5.23 がインストールされてしまうのでソースからコンパイルしてインストールします。インストールの方法は、「C言語によりRaspberry Pi 3とSensorTag間をBLEで接続 」を参照してください。
pybluezインストール
Python からBLEを用いて操作するためのライブラリを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 デバイスが検知できるか確認します。
from __future__ import print_function from gattlib import DiscoveryService class DiscoverDevice(): def GetDeviceList(self): service = DiscoveryService("hci0") device = service.discover(2) return device if __name__ == '__main__': devList = DiscoverDevice().GetDeviceList() for address, name in devList.items(): print("name: {}, address: {}".format(name, address))
実行すると、次のエラー「RuntimeError: Set scan parameters failed (are you root?)」が表示される場合があります。
Traceback (most recent call last): File "scan_ble.py", line 17, indevList = DiscoverDevice().GetDeviceList() File "scan_ble.py", line 13, in GetDeviceList device = service.discover(2) RuntimeError: Set scan parameters failed (are you root?)
この場合、「hcitool lescan」コマンドでも「Set scan parameters failed: Input/output error」のエラーが出ており、次のように一度BLEをダウンさせて再度アップすれば、正常に接続できるようになります。
$ sudo hcitool lescan Set scan parameters failed: Input/output error $ sudo hciconfig hci0 down $ sudo hciconfig hci0 up $ sudo hcitool lescan LE Scan … 28:A1:83:E1:58:96 SNM00 28:A1:83:E1:58:96 (unknown)
正常に実行されると次の表示があります。
$ sudo python scan_ble.py name: , address: 28:A1:83:E1:58:96
これで、Pythonからアルプスのセンサネットワークモジュールをアクセスする準備が整いました。
python3での動作(2020/12/27追加)
python3で動作させるために、次の手順でpybluezをインストールします。
$ sudo apt-get install python-dev libbluetooth-dev libboost-all-dev $ sudo apt-get install libglib2.0 libboost-python-dev libboost-thread-dev $ sudo pip3 install gattlib $ sudo python3 -m pip install pyblueZ
次の手順でPythonサンプルスクリプトを実行します。
$ sudo python3 scan_ble.py name: , address: 45:D0:E0:29:5B:BA name: , address: 44:BB:5D:41:A0:CA name: , address: D9:B7:FE:D9:08:BA name: , address: 70:56:81:F3:98:3D