Python Bleak BLE无法获取UUID

问题描述 投票:0回答:1

我有一个都用python实现的reaspberry服务器和Windows客户端,该服务器传输BLE信号,如iBeacon信号,这是服务器的代码:

import time

from bluetooth.ble import BeaconService

service = BeaconService()

uuid = "11111111-2222-3333-4444-555555555555"
major = 2   # 1 - 65535
minor = 1   # 1 - 65535
txpower = 1
interval = 200

service.start_advertising(uuid, major, minor, txpower, interval)

try:
    time.sleep(300)
    service.stop_advertising()

except KeyboardInterrupt:
    print("cancelled")

finally:
    service.stop_advertising()

print("Done.")

此代码运行正常,我通过安装一个android应用程序进行了检查,可以找到包含该信息的设备:

现在,我需要在Windows客户端中获取该信息,在我正在使用荒凉库的Windows客户端中,我具有以下代码来扫描信标设备,

import asyncio
from bleak import discover

async def run():
    devices = await discover()
    for d in devices:
        #if d.address == "B8:27:EB:03:5A:D6":
        print(d.address, d.name, d.metadata, d.rssi)            

loop = asyncio.get_event_loop()
loop.run_until_complete(run())

问题是,当我检查控制台时,我看不到主要,次要和UUID信息:

显示了其他设备,我可以在其中一个设备中看到UUID是可读的。我在这里做错了什么?无法获得想要的信息吗? (次要,主要)还是我发送的方式有误?我不认为是因为该移动应用程序阅读正常。 Windows是否可以使用另一个库来获取此信息?谢谢您的帮助。祝你有美好的一天。

bluetooth-lowenergy python-3.7 ibeacon
1个回答
0
投票

不要将bleak返回的GATT服务UUID列表与所需的iBeacon ProximityUUID混淆。它们是两个完全不同的标识符。 iBeacon ProximityUUID编码为bleak返回的制造商数据中。它不会为您解析它,但是您可以自己编写一个解析器。如果将制造商数据字节打印为十六进制,则会看到该模式。

我写了一个Windows Beacon Library,可以完成您想要的。它是Windows 10的Android Beacon库的端口。但是非常缺乏该文档。如果您卡住了,我可以帮助您使用它。

© www.soinside.com 2019 - 2024. All rights reserved.