新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > 在nRF52DK上广播定制广告数据:蓝牙LE教程

在nRF52DK上广播定制广告数据:蓝牙LE教程

作者: 时间:2024-09-09 来源:EEPW编译 收藏

了解如何将nRF52开发工具包转变为可广播静态或动态自定义数据的蓝牙低能量信标。

本文引用地址:https://www.eepw.com.cn/article/202409/462784.htm

正如我们在上一篇文章中了解到的那样,蓝牙低能量(LE)数据传输可以分为两类:

•面向连接。

•无连接。

让我们来研究一个无连接通信的情况,也就是说,一个广播定制数据的设备。

这在现实世界中并不少见。例如,信标被用于商店、博物馆和机场,以提供基于位置的服务。它们的功能是将包含唯一代码的静态自定义数据广播到附近的设备,例如我们的手机。

还有动态定制数据,这是环境传感器可以用来报告农业设施湿度水平的实时变化。嵌入式定制数据提供了一个平台,用于交流标准数据类型未处理的专有信息或不同功能。

在本教程中,我们将使用 Semiconductor的(开发工具包)和VS Code的nRFConnect软件开发工具包来创建广播自定义数据的信标。和许多其他工程师和爱好者一样,我发现nRF52系列能够相对方便地设计和测试蓝牙LE应用程序。

首先,我们的信标将广播静态定制数据。然后,我们将对它进行调整,以便它广播自定义数据。然而,在我们做任何这一切之前,我们需要简单地回顾一下我们的数据是如何结构化的。

广告数据结构和类型

当蓝牙LE设备正在广播时,它发送广告数据包(有时还扫描响应数据包)。每个数据包中的信息都以特定的方式进行组织。图1展示了该组织的视觉表现。

蓝牙低能量传统广告包中的数据组织。

 

1.png

•图1。图像由MDPI提供

顺便说一下,这个图中给出的最大字节数是用于传统的,而不是扩展的,广告模式。这对于我们的目的来说没问题——我们将在全文中使用传统的广告模式。

在图1的底部两个部分中,我们可以看到每个广告数据(AD)数据包都包含一个或多个AD结构。每个结构依次包括以下字段:

长度:这占1个字节,并指定后续数据字段的长度,包括AD类型,但不包括其本身。

AD类型:也占1个字节。确定以下数据类型。

AD数据:这是与AD类型关联的实际数据内容。此字段的长度是可变的,但可以从“长度”字节中推断出来。

AD类型必须来自蓝牙核心规范中定义的AD类型列表。我们将使用指定为0xFF的制造商特定数据类型。顾名思义,这种AD类型使制造商能够在其广告中嵌入自定义数据。

对于制造商特定数据类型,AD数据的最初两个字节表示公司ID。公司ID是蓝牙SIG根据请求分配给成员公司的唯一编号。指定公司标识后,制造商会以其选择的任何格式附加自定义数据。

回想一下,整个传统广告数据包的最大长度为31个字节。使用制造商特定数据时,数据包要求:

1个字节用于指定长度。

公司编号为2个字节。

这样每个数据包就有27个字节用于定制数据。

随着这一切,我们准备继续前进,并将我们的知识投入使用!

静态数据用例:广播设备状态和消息

想象一下,你想要使用作为一个房间或工作站的基本状态信标。可指示工作站是否被占用或空闲。我们将通过简短的自定义消息来做到这一点:当有人时,“会议正在进行”,而当没有人时,“免费使用”。

第1步:申报公司ID

由于我们使用 Semiconductor的板进行教育,我们可以使用他们的公司标识符

第2步:声明自定义数据的结构

在本项目中,我们的定制数据结构将包括:

公司ID(2字节):我们以 Semiconductor公司ID开始播出数据。

状态(1个字节):这可以指示房间是否被占用(1)或空闲(0)。

消息(最多24个字节):自定义消息,如“正在进行会议”或“免费使用”

下面的代码片段显示了结构。

 2.png

第3步:在扫描响应广告包中包括制造商特定数据

使用nRF Connect SDK,可以使用BT_data()宏将这个自定义数据包括在广告数据包中。

 3.png

完整的代码包括在本条款的结尾,作为代码附录A。

动态数据用例:实时广播状态变化

在前面的示例中,我们展示了广播静态定制数据,特别是房间的状态及其相关消息。但如果我们的应用程序要求我们广播正在变化的数据,又会怎样呢?这就是发送动态数据的便利之处。当开发能够反映即时状态变化的传感器广播器或设备时,它尤为有用。

为了进行演示,让我们升级我们的基本房间状态信标,以便它使用nRF52板上的内置按钮。按下按钮,设备显示“正在开会”。放开,它会切换到“免费使用”。nRF52内置的LED会亮起显示“会议进行中”,然后熄灭显示“免费使用”

要使用nRF Connect SDK广播动态数据,我们使用bt_le_adv_update_data()函数,它允许我们在广告进行时更新广告数据。这使得广播数据能够实时反映变化。

 4.png

您可以在代码附录B中查看该版本信标的所有代码。

查看结果

最后,是时候检查代码是否有效了。图2显示了用于VS代码的nRF连接的输出。

显示信标已成功开始广播的VS代码输出。

 5.png

•图2。信标开始工作。图片由恩塔蒂西•赫拉皮西提供

如您所见,信标已成功开始广播。

图3和4是我的nRF Connect移动应用程序中的图像。图3显示了当按下并释放nRF52上的按钮时,我的手机收到的消息是如何变化的。

按下nRF52DK按钮(左)和松开(右)时,范围内电话接收到的消息。

 6.png

•图3。按下nRF52DK按钮(左)和释放(右)时,房间信标广播的消息。图片由恩塔蒂西•赫拉皮西提供

在图4中,我们看到的是数据而不是自定义文本。请注意,从Nordic Semiconductor的公司ID开始,右侧图像中的类型0xFF(制造商特定数据)值如何与左侧图像中的值匹配。

说明信标广播的定制数据的屏幕截图。

 7.png

•图4。说明信标广播的定制数据的屏幕截图。图片由恩塔蒂西•赫拉皮西提供

这只是一个简单的例子,说明自定义数据可以用于什么。。如果您想要构建这个项目的自己版本,所有必要的代码都包含在下面的两个附录中。




关键词: nRF52DK 蓝牙LE Nordic

评论


相关推荐

技术专区

关闭