首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Bleak BLE未获取UUID

Python Bleak BLE未获取UUID
EN

Stack Overflow用户
提问于 2019-12-05 00:58:28
回答 1查看 2.9K关注 0票数 0

我有一个respberry服务器和一个windows客户端,它们都是用Python实现的。服务器发送类似于iBeacon信号的BLE信号。

以下是服务器的代码:

代码语言:javascript
运行
复制
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.")

这段代码运行良好。我通过安装一个安卓应用程序进行了检查,我可以找到包含这些信息的设备。

现在,我需要在windows客户端中获取该信息。在windows客户端中,我使用的是bleak库。

我有以下代码来扫描信标设备:

代码语言:javascript
运行
复制
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是可读的。我到底做错了什么?bleak不可能得到我想要的信息吗?(小调、大调)还是我的传输方式有误?我不这么认为,因为这款手机应用程序的阅读效果很好。是否有其他库可用于windows来获取此信息?谢谢你的帮助。祝你今天愉快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-05 01:42:12

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

我写了一个Windows Beacon Library,它可以做你想做的事情。它是Android Beacon Library for Windows10的一个移植,但是它的文档非常缺乏。如果您遇到困难,我可以帮助您使用它,但它是为Visual Studio语言设计的,而不是Python。

使用该库,您可以在C#中解析来自BluetoothLEAdvertisementReceivedEventArgs的C#帧,如下所示:

代码语言:javascript
运行
复制
var beaconParser = new BeaconParser();
beaconParser.SetBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");
Beacon beacon = beaconParser.FromAdvertisement(args.Advertisement, args.RawSignalStrengthInDBm, args.BluetoothAddress);
if (beacon != null)
{
    OLogger.Debug("Found iBeacon: UUID=" + beacon.Id1 + " major=" + beacon.Id2 + " minor=" + beacon.Id3 + " rssi: " + beacon.Rssi);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59181158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档