在此树莓派 iBeacon 教程中,我们将向您展示如何设置 Pi 以作为 iBeacon 进行操作。
要使本教程正常工作,您将需要一个支持置于广告模式的蓝牙适配器。
iBeacon 是由 Apple 开发的协议,并于 2013 年推出,用于通过蓝牙协议广播数据。它还为设备提供了一种方法来计算其与信标的距离。
您可能需要 iBeacon 设置的原因有很多,原因多种多样。一个示例是通过 iBeacon 协议为您的商店做广告。另一个是要跟踪您与某些物品 (例如车钥匙等) 之间的距离。
有很多树莓派的项目,该协议将派上用场。如果您有想要分享的示例,请确保在本页底部给我们留言。
在本教程中,我们将向您展示如何从树莓派广播数据,并说明 iBeacon 协议期望的数据包格式。
设备清单
以下是此树莓派 ibeacon 教程所需的所有设备。
推荐的
树莓派 2、 3 或 4
Micro SD 卡
电源
支持广告模式的 * 蓝牙适配器
可选的
树莓派外壳
以太网网络连接或 * Wifi 加密狗 (Pi 3 具有 WiFi 内置的)
设置我们的 Eddystone 信标
1 在继续进行操作并重新配置树莓派的蓝牙以充当 iBeacon 之前,我们应该首先更新所有当前安装的软件包。
我们可以通过运行以下命令来更新树莓派上运行的所有软件。
sudo apt-get update
sudo apt-get upgrade
2 更新完树莓派的软件后,请打开树莓派的蓝牙设备的电源。此蓝牙设备应位于 ** hci0 ** 接口上。
为了给蓝牙设备加电,我们需要在 Pi 上运行以下命令。
sudo hciconfig hci0向上
3 现在我们已经打开了蓝牙模块,我们需要将其操作模式更改为” 低能耗广告 “,并将其设置为”* 不可连接的无向广告模式 “。 *”。
这个过程非常简单,需要再次使用 hciconfig 工具。在树莓派中输入以下命令以更改蓝牙设备的模式。
sudo hciconfig hci0 leadv 3
4 将树莓派的蓝牙模式更改为” 低功耗广告 “后,我们现在可以继续设置 Pi 的蓝牙以广播 iBeacon 有效载荷数据。
要测试 iBeacon 是否在树莓派上正常运行,请在终端中输入以下命令。
在本指南的后面,我们将解释我们正在广播的数据包数据,但是现在,我们将确保广播正在正常进行。
sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 06 1A FF 4C 00 02 15 15 C7 C1 A1 BF BB 00 4C AD 87 04 9F 2D 29 17 DE D2 00 00 00 00 C8 00
5 现在,在您的设备上安装” 信标扫描器 “应用程序。在 Android 上,我们使用了 ** Nicolas Bridoux ** 的 Beacon Scanner app。
使用此应用程序,我们可以运行扫描以查找刚刚设置的 iBeacon 。一旦您看到树莓派 iBeacon,就可以进行下一步。
既然我们已经验证了我们已经在树莓派上正确配置了 iBeacon ,那么我们继续深入研究有效载荷数据。
进一步修补
1 绝大多数有效载荷数据都不应修改,因为 Apple 的 iBeacon 协议需要这些数据。您可以更改的两个数据块是 UUID ,主要,次要字节和信号功率。
下表将显示您发送给蓝牙设备的每个比特是什么。
字节值 | 描述 |
---|---|
0x08 | 将 OGF 定义为 Bluetooth 命令组 0x08 |
0x0008 | 定义 OCF ,以便我们设置蓝牙广告数据 |
** 1F ** | 定义整个有效负载的数据长度 |
02 | 下一节的数据长度,2 个字节 |
01 | 数据类型,定义此部分为标志数据 |
FF | 数据类型,定义此部分为制造商特定数据 |
4C | 定义制造商 ID ,在这种情况下为 apple (0x4c00) |
00 | 第二部分制造商 ID |
02 | 定义子类型,在我们的例子中是 iBeacon |
16 | 定义以下数据为 eddystone |
15 | 子类型有效负载的数据长度,应为 21 个字节 |
** C7 ** | 邻近 UUID ,第一个字节 |
** C1 ** | 邻近 UUID ,第二个字节 |
** A1 ** | 邻近 UUID ,第 3 个字节 |
** BF ** | 邻近 UUID ,第 4 个字节 |
** BB ** | 接近 UUID ,第 5 个字节 |
** 00 ** | 邻近 UUID ,第 6 个字节 |
** 4C ** | 邻近 UUID ,第 7 个字节 |
** AD ** | 接近 UUID ,第 8 个字节 |
** 87 ** | 接近 UUID ,第 9 个字节 |
** 04 ** | 接近 UUID ,第 10 个字节 |
** 9F ** | 临近 UUID ,第 11 个字节 |
** 2D ** | 临近 UUID ,第 12 个字节 |
** 29 ** | 邻近 UUID ,第 13 个字节 |
** 17 ** | 接近 UUID ,第 14 个字节 |
** DE ** | 接近 UUID ,第 15 个字节 |
** D2 ** | 接近 UUID ,第 16 个字节 |
** 00 ** | 主要的第一个字节–区分使用相同 UUID 的设备 |
** 00 ** | 主要的第二个字节 - 区分使用相同 UUID 的设备 |
** 00 ** | 较小的第一个字节–区分使用相同 UUID 的设备 |
** 00 ** | 主要的第二个字节–区分使用相同 UUID 的设备 |
C8 | 信号功率–用于优化距离计算。 |
2 现在,我们可以向您展示如何为 Pi iBeacon 使用新的 UUID ,开始之前,我们需要创建一个新的 UUID 。
为了快速生成新的 UUID ,我们将使用一个名为在线 UUID 生成器的网站。
生成 UUID 的方法要好得多,但是对于本教程,我们将针对最简单的过程。
3 拥有 UUID 后,请从中删除连字符,并在每两个字母后添加一个空格。下面我们提供了一个示例,说明了我们的意思。
修改后的 UUID 将具有相同的字节数,以替换我们在本教程前面的命令中使用的字节数。
从:
98374d0a-fa8f-43ab-968b-88eaf83c6e4c
至:
98 37 4d 0a fa 8f 43 ab 96 8b 88 ea f8 3c 6e 4c
4 现在要替换命令中的 UUID ,请在命令的”** 15 **” 部分中指定有效负载长度。
从这里开始,您需要交换接下来的 16 个字节,我们在下面提供了一个示例。本示例向您展示该命令的修改后的版本应是什么样子,包括将被替换的部分加粗。
sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 06 1A FF 4C 00 02 15 98 37 4D 0A FA 8F 43 AB 96 8B 88 EA F8 3C 6E 4C 0000 00 00 C8 00
希望在这一点上,您现在已经启动并运行了树莓派 iBeacon。您还应该了解您的蓝牙设备将发送哪种数据。以及知道如何为自己生成的 UUID 替换 UUID 。
如果您对本教程有任何反馈,请不要在下面发表评论。