ラズパイとM5StickCでBLE通信してみる

M5StickCのBLE BeaconのサンプルコードでBLE送信してラズパイで検知してみました。
ラズパイでpythonを使ってBLEを通信する際の基本的なメモです。

ラズパイでBLEデバイスをスキャンする

ラズパイ3以降はBluetoothが標準で使用可能です。

ラズパイでBLEを使用する準備

hciconfig でラズパイでBLEが使用可能になっていることを確認します。
UP RUNNIG になっていればBluetoothが使用可能です。

pi@raspi3:~ $ sudo hciconfig
hci0:   Type: Primary  Bus: UART
        BD Address: B8:27:EB:67:BA:**  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING
        RX bytes:4306 acl:0 sco:0 events:169 errors:0
        TX bytes:2550 acl:0 sco:0 commands:55 errors:0

DOWNの場合は以下コマンドでUPにします。

$ sudo hciconfig hci0 up

hcitool lescan でBLEデバイスをスキャンします。 Bluettothデバイスの場合は hcitool scan で

pi@raspi3:~ $ sudo hcitool lescan
LE Scan ...
75:1E:04:65:C1:** (unknown)
5D:99:90:66:03:** (unknown)
50:02:91:87:2B:C* M5Stick
...

RF-killされているBLEを使用可能にする場合

電波を出さない状態のラズパイでBLEを使用可能にするには rfkill ublock bluetooth コマンドでブロックを解除します。

pi@raspi3-85:~ $ rfkill list
0: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no
1: hci0: Bluetooth
        Soft blocked: yes
        Hard blocked: no
pi@raspi3-85:~ $ sudo rfkill unblock bluetooth
pi@raspi3-85:~ $ rfkill list
0: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no
1: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no
pi@raspi3-85:~ $ sudo hciconfig hci0 reset
pi@raspi3-85:~ $ sudo hciconfig
hci0:   Type: Primary  Bus: UART
        BD Address: B8:27:EB:67:BA:**  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING
        RX bytes:2067 acl:0 sco:0 events:114 errors:0
        TX bytes:1955 acl:0 sco:0 commands:114 errors:0

pi@raspi3-85:~ $ sudo hcitool lescan
LE Scan ...
2C:6C:C1:7B:AE:** (unknown)
3D:64:70:3C:B5:** (unknown)
...

PyBluez を使ってpythonでBLE通信

pythonにはBLEのライブラリがいくつかありますが、PyBluezを使ってみました。

PyBluez: https://pybluez.readthedocs.io/en/latest/
PyBluez GitHub: https://github.com/pybluez/pybluez

PyBluezのインストール

pybluez をインストール
$ sudo apt-get install python3-dev libbluetooth3-dev
$ sudo pip3 install pybluez

gattlib をインストール
$ sudo apt install libglib2.0 libboost-python-dev libboost-thread-dev
$ sudo pip3 install gattlib

PyBluezのBeaconサンプルをラズパイのコマンドでスキャン

pybluez BLEサンプル: https://github.com/pybluez/pybluez/tree/master/examples/ble

ラズパイからbeacn.pyを実行してBLE Beacon送信します。

pi@raspi4-84:~/beacon $ sudo python3 beacon.py
Done.

もう1台のラズパイでスキャンしてみます。

pi@raspi3-85:~/beacon $ sudo hcitool lescan
LE Scan ...

DC:A6:32:97:4F:** (unknown)
DC:A6:32:97:4F:** raspi4-84
03:C8:54:C6:C8:** (unknown)

ラズパイraspi4-84のBLE信号を検出しました。

M5StickCのBeaconサンプルをラズパイで受信

M5StickCのBLEサンプルを試してみます。
スケッチ例 – M5StickC用のスケッチ例 – ESP32 BLE Arduino にBLE通信用のサンプルがあります。
BLE_iBeacon がビーコンとしてBLEでブロードキャストするコードです。
https://github.com/nkolban/ESP32_BLE_Arduino/blob/master/examples/BLE_iBeacon/BLE_iBeacon.ino
こちらをM5StickCで動作させます。

ラズパイ側はpybluezのサンプル beacon_scan.py でスキャンします。

pi@raspi4-84:~/beacon $ sudo python3 beacon_scan.py
Beacon: address:D8:A0:1D:49:60:** uuid:4d6fc88b-be75-6698-da48-6866a36ec78e major:0 minor:17152 txpower:0 rssi:-90
Done.

無事に受信できました。

コメントを残す

メールアドレスが公開されることはありません。

eighteen − 13 =