在iBeacon BLE中选择特定的广告通道是否会导致传输速度降低?

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

我实际上尝试使用命令参数Advertising_Channel_Map选择特定频道,它的值是0x01(频道37)、0x02(频道38)、0x04(频道39)和0x07(默认,所有频道启用)。

修改它的我的代码(Python)行是:

cmd_pkt = struct.pack("<HHBBBBBBBBBBB", 0x00A0, 0x00A0, ADV_NONCONN_IND, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, advertising_channel_map, 0x00)

如您所见,我的Python代码中的变量advertising_channel_map,根据我要发送包裹的频道,它的值为0x01、0x02和0x04。

前面的代码行与使用此 HCI 命令相同:

sudo hcitool -i hci0 cmd 0x08 0x0006 A0 00 A0 00 03 00 00 00 00 00 00 00 00 07 00

正如我之前所说,在这种情况下,07 代表默认的广告频道映射,但它也可以采用值 0x01、0x02 和 0x04。

我使用移动应用程序向我拥有的嗅探器发送广告数据包,传输速度非常好。然而,当我实现自己的代码并选择通道 37、38 和 39 时,速度明显下降。只有当我为advertising_channel_map设置值0x07时,它的表现才与移动应用程序类似。

当我在特定通道上发送时,发送 100 个包大约需要 30-32 秒,同时在默认模式(0x07)下只需要 10-12 秒。

此外,我还使用我正在使用的通道编号配置了主要值和次要值,以便在解包数据包时可以在任何给定时刻识别正在使用哪个通道。我不知道这是否会导致错误。

有什么方法可以提高特定通道(37、38和39)上的传输速度,还是我在代码中遗漏了一些东西?

python-3.x bluetooth-lowenergy ibeacon bluez
1个回答
0
投票

如果广告商在多个通道上发送数据包,通常会按顺序在所有通道上发送,通道切换周期非常短。完成后,它会休眠大约一个广告间隔,然后重新启动。

BLE 设备通常只有一根天线和一个无线电,这意味着它一次只能执行一项操作,包括一次调谐到特定频道。因此,扫描仪通常在三个广告渠道之间循环。一个通道每次花费的时间通常是在 hci 上设置的扫描间隔。这意味着,如果广告商仅在一个通道上传输数据包,则扫描仪检测到数据包的机会只有 1/3。看来这与你的结果相符。改进扫描仪的唯一方法是将其硬件升级为具有三个无线电(因此它可以并行扫描三个通道),但这不是大多数(任何?)蓝牙芯片的工作方式。

在三个频道上发送的基本原理是避免隐藏所有广告的特定频道受到干扰的风险。如果您想通过仅在一个通道上发送来节省电量,请考虑在所有三个通道上发送,但广告间隔要长 3 倍。

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