bleをプログラミングで-py
bleak
bleakというライブラリが誰でも簡単に触れるらしいので試してみる
docs: https://bleak.readthedocs.io/en/latest/
ble uuid assigned-numbers: https://www.bluetooth.com/specifications/assigned-numbers/
BLE
UUID
BLEデバイスをスキャンして、対象デバイスのMACアドレスを取得。
実行するコード
from bleak import BleakScanner
async def run():
devices = await BleakScanner.discover()
for d in devices:
print(d)
import asyncio
asyncio.run(run())
出力
// macOS
(venv) ┌───(hitto@hot)-[~/hoge][main*]
└─$ python scan.py
*******4-***4-***2-***9-***********9: None
...
*******A-***E-***4-***1-***********3: None
*******9-***B-***1-***3-***********3: None
*******9-***F-***4-***E-***********2: None
*******7-***2-***9-***8-***********E: None
*******C-***4-***7-***6-***********1: iPhone-hitto
// macOS以外のOS
$ python scan.py
D0:8B:7F:12:34:56: iPhone-hitto
B0:52:22:33:44:5A: Unknown
Mac address,UUIDは適当です
なぜmacOSだけ出力が違うのか
https://bleak.readthedocs.io/en/latest/backends/macos.html
macOSはBLEデバイスのMACアドレスをセキュリティやプライバシー保護の観点から、MACアドレスの代替となるmacOSが独自に生成して付与しているUUIDを使用している
↑ ???????日本語難しすぎる
OSごとのBLEデバイスの表現方法の違いによるもの
macOSとLinuxでは、BLEデバイスの識別子(MACアドレスやUUID)の扱いが異なる。
macOS:
macOSでは、BLEデバイスの識別子としてUUIDを使用します。これは、macOSがBLEデバイスに対してセキュリティやプライバシーを強化するため、MACアドレスの代わりにランダムなUUIDを割り当てているためです。そのため、243E23AE-4A99-406C-B317-18F1BD7B4CBEのようなUUIDが表示されます。
Linux:
一方、Linuxでは従来通り、BLEデバイスの識別子としてMACアドレスが使用されます。そのため、D0:8B:7F:12:34:56のようなMACアドレスが表示されます。
解決策:
この動作は、OSの設計による違いなので、特定のBLEデバイスを一意に識別する場合、UUIDとMACアドレスの両方に対応する必要があります。必要に応じて適切な処理を行うことが必要です。
どちらの識別子でも問題なくデバイスを認識したい場合は、環境ごとに処理を分けて扱うもあり。
← Go home