目的
Raspberry Pi 4を用いて、BleAdvertiseのScanを行うまで
見つけた問題点
hcitool lescanを用いるようだが、
コマンドを実施すると、下記のエラーが出た
$ sudo hcitool lescan Set scan parameters failed: Input/output errorScanning for BLE devices on Raspberry Pi 4 Model Bを参照すると、
解決方法でデバイスのdown/upをするとあるが、投稿者同等直らなかった
ライブラリとPythonスクリプト
おそらく下記はやらなくてもいいが、上を解決しようと試行錯誤した後。。
Raspberry Pi4はデフォルトではbluezは5.50 (2020/06/19時点)
$ bluetoothctl version Version 5.50
bluezのアップデート
BlueZ 5.54に置き換える
$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.54.tar.xz $ tar xvf bluez-5.54.tar.xz $ cd bluez-5.54 $ ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var $ make $ make install一応再起動した方が良い?
バージョンの確認とお試しとしてtestフォルダにあるble advertiseを実行してみる
$ bluetoothctl version Version 5.54 $ python3 example-advertisement example-advertisement:201: PyGIDeprecationWarning: GObject.MainLoop is deprecated; use GLib.MainLoop instead mainloop = GObject.MainLoop() Advertising forever... GetAll returning props Advertisement registered
他の端末(例としてMac上のXcode付属のBluetooth Explorerから見ると以下のように出る
Manufacturer Data : {length = 7, bytes = 0xffff0001020304} kCBAdvDataChannel : 37 Service UUIDs : ( "Heart Rate", Battery ) Service Data : { 9999 = {length = 5, bytes = 0x0001020304}; } Local Name : TestAdvertisement kCBAdvDataIsConnectable : 0
C言語などや他のライブラリが使うことを考えて
BlueZ 5.50のdev用ヘッダファイルたちを5.54に置き換えておく
バックアップも取っておく
$ sudo cp -ipr lib/ /usr/include/bluetooth.5.54 $ cd /usr/include $ sudo mv bluetooth bluetooth.5.50 $ sudo ln -s bluetooth.5.54/ bluetooth
bluepyのインストール
bluepyを参照
なお、本ライブラリはルート権限が必要 (デバイスの操作がルートのみ)
$cat ble_rpi.py from bluepy import btle scanner = btle.Scanner(0) devices = scanner.scan(3.0) for device in devices: print("Macアドレス:" + device.addr) print("アドレスタイプ:" + device.addrType) print("RSSI:" + str(device.rssi)) print("アドバタイシングデータ:") for adTypeCode, description, valueText in device.getScanData(): print(" " + description + ":" + valueText) $ sudo python3 ble_rpi.py Macアドレス:2f:05:xx:xx:xx:xx アドレスタイプ:random RSSI:-47 アドバタイシングデータ: Flags:1a Complete 16b Services:0000fd6f-0000-1000-8000-00805f9b34fb 16b Service Data:6ffd341691188f76e34f8635f1177c1cadaf86eb405f Macアドレス:4d:xx:xx:xx:xx:xx アドレスタイプ:random RSSI:-52 アドバタイシングデータ: Flags:1a Tx Power:0c Manufacturer:4c001005021cf71772
という感じで表示される。