亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 物联网技术

带有 Microchip RN487x 蓝牙模块的传感器和控件

了解 RN487x 系列蓝牙模块以及如何为您的低功耗外设项目配置它们。

如果您正在开发小型、低功耗的外围设备,那么您很有可能将蓝牙视为您的通信层。

随着标准的发展,蓝牙连接设备激增。引入了硬件模块,可为几乎所有外围设计提供完整的 SoC(片上系统)。 Nordic nrf52840 就是一个很好的例子。系统核心是一个 32 位处理器和多协议蓝牙无线电。这个核心被你可能需要的每个接口所包围; GPIO、PWM、USB、SPI、I 2 S,还有更多。

这种强大的 SoC 以及其他方面的缺点是复杂。为这些 SoC 创建和集成必要的嵌入式软件需要很长的学习曲线和开发时间。

然而,对于一些最常见的外围设备类型,有更简单的替代方案。如果您的外设主要是远程传感器或遥控器,通道数量有限(模拟和数字),您可能可以使用 Microchip 制造的 RN487x 模块来实现您的目标。

这两个蓝牙模块系列提供了多个并发双向数字和模拟通道。该模块仅通过在模块 NVRAM 中存储一些配置来针对特定设计进行定制。尽管简单,但该模块仍符合 BLE(低功耗蓝牙)标准,因此兼容最新的蓝牙客户端,例如现代智能手机。

在本系列中,我们将演示使用 RN487x 模块。我们将为四个任务中的每一个创建一个功能强大的蓝牙连接外设;数字传感器、数字控制、模拟传感器和模拟控制。每个示例都包含一个标称电路,以及 RN487x 上所需的配置。还提供了一个用于运行外设的简单应用程序脚本。应用程序脚本中的接口点有很好的文档记录;最大限度地将这些外围设备作为子系统纳入更大的设计中。

设计概述

让我们看一下“模拟传感器”示例的图形细分,其中关键接口为红色。

Linux 系统与外围设备通信的表示

我们将创建三个系统元素。对于外设,我们必须创建提供传感器信号的硬件;本例中的换能器。它产生变化的模拟电压。对于用户,我们将创建一个应用程序来呈现数据;本例中的 Python 脚本。

该脚本必须使用 GATT API 与外设之间传输信息。我们还需要在 RN487x 模块中创建一些配置。此配置将控制应用程序和硬件之间的数据流。

组件选择

RN487x 系列有两个模块; RN4870 和 RN4871。它们在为 I/O 提供的引脚数量和类型上有所不同。您可以在数据表和用户指南中找到这些约束条件,但它有些分散。下面是对两款芯片的引脚预算的重组。这种安排应该可以更容易地看出您的外设需要哪种芯片。

c 模块上提供了三种 I/O 引脚类型:

类型 说明
ADC 模拟输入:将输入信号电平转换为数值范围。
PWM 模拟输出:一对数字转换为方波。数字控制方波的频率和占空比。
DIO 数字输入或输出:对于数字输入,高低信号电平分别代表1或0。数字输出反之亦然。

这是两个模块的引脚预算:

RN4870

来自 RN487x 数据表的图像

引脚名称/功能 P1_0 P1_1 P1_2 P1_3 P2_2 P2_3 P2_4 P2_5
ADC x x x x
PWM x x
DIO x x x x x

RN4871

来自 RN487x 数据表的图像

引脚名称/功能 P1_2 P1_3
ADC x
PWM
DIO x x

这些表应该清楚,如果你不需要PWM,只需要管理一两个信号,就用4871。这样可以节省资源。如果您需要 PWM,或者如果您想管理两个以上的信号,那么您需要 4870。对于我们的模拟传感器,我们只有一个模拟输入,因此 4871 就足够了。我们将信号连接到模块的 P1_2 引脚。

BLE 协议栈的 GATT(通用属性)配置文件层

我们几乎准备好实现一些真实的例子。但是为了编写用户应用程序,我们需要更精确地理解我们在与外设交谈时将使用的 api。

所有低功耗蓝牙设备都使用通用属性 (GATT) 配置文件来交换结构化数据。在这个模型中,外围设备被组织成一个拥有简单数据库的服务器。数据库又包含许多代表有用数据的变量。我们的 Python 脚本等应用程序被组织成客户端,这些客户端使用 GATT API 对数据库进行基于名称的查询。 API 可用于从数据库读取值,并将值写入数据库。

作为预览,这里有两个有用的 Python 中的 GATT API 方法调用:

gatt_rq.connect() gatt_rq.write_by_handle(vh_light, str(bytearray([8]))

第一个用于建立到外围设备的连接。第二个将一些值写入数据库;这些值立即表示为外围设备上的数字输出。 ‘write’方法的第一个参数是一个特定于我们想要控制的数字输出或输出的句柄。功能完整的示例只需要多几行。

此 API 作为蓝牙服务的一部分在 iOS、Android、Windows 和 Linux 中公开。本文中的示例是用 Python 编写的,可以在许多常见的 Linux 发行版中运行。

模块配置

上面脚本方法中的“vh_handle”参数将我们引向此设计模式中的最后一个元素。该参数是软件中外围设备上特定物理电平信号的参考。但是这个数据路径是如何完成的呢? RN487x 的 NVRAM 中有两个配置可以执行此操作;特征定义和引脚绑定。

RN487x 配置使用自定义命令语言加载到模块中。有关与模块建立控制台连接和发出配置命令的一般指南,请参阅附录。

在我们发出这些命令后,RN487x 内的非易失性配置将如下所示:

请注意,所有数据值都存在于“服务”和“特征”的两级层次结构中。这种组织方式超出了我们的需要,但对于在逻辑上独立的服务中存在多个传感器和控件的复杂系统非常有用。


我们关于 RN487x 模块的三部分系列的第一部分到此结束。第 2 部分和第 3 部分将使用相同的设计模式来创建数字输入、数字控制、模拟传感器和模拟控制。

第 4 部分还包括一些适用于所有示例的进一步研究的主题。

在下面的其他文章中的每个项目描述之前,您将找到配置模块和使用它们的信息的附录。

使用控制台连接配置 RN487x

要配置 RN487x,首先要为模块供电,并在模块和工作站之间建立串行连接。我们的每个演示电路都有一个 3 针“prog”跳线,用于暴露必要的 RX、TX 和 GND 信号。如果您不确定如何与您的工作站建立这种连接,可在此处获得出色的指南。

在您的工作站上启动终端模拟器。一种特别适合且广泛使用的模拟器是大多数 Python 环境中包含的“miniterm”实用程序。在工作站 shell 中,它可以这样启动:

python -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200

此示例显示适用于 Linux 系统的端口名称 (/dev/ttyUSB0)。对于其他操作系统,端口名称的形式会有所不同。模块默认波特率为115200,无需更改。

RN487x 模块默认处于数据模式。我们需要命令模式。通过在终端仿真器应用程序中键入三个美元符号字符 (‘$$$’) 来激活此模式。你不会在终端窗口看到字符,但结果应该是RN4871返回的命令提示符:

CMD>

尝试按“d”键,然后按“回车”键。结果应该是这样的:

CMD> BTA=D88039F80080 名称=RN_BLE 已连接=否 验证=2 特征=0000 服务=00 CMD>

这是模块状态的最小描述。请注意,命令解释器没有显示您键入的字符 ('d')。你应该打开'echo'来解决这个问题。通过按“+”键,然后按“回车”键来执行此操作。设备应该像这样响应:

CMD> ECHO ON CMD>

您现在可以完成本项目其余部分中描述的各种配置任务。例如,创建服务只需在一行中键入完整的“PS”命令,然后按“回车”键即可完成。例如:

CMD> PS,59c88760536411e7b114b2f933d5fe66 好

每个项目配置还要求将多行脚本提交给模块 NVRAM。这种类型的多行命令需要更多的解释。您使用“WW”命令开始脚本输入,然后是“enter”。然后键入每个脚本行。每个脚本行,包括最后一行,也以“回车”键终止。

最后,按“esc”键提交脚本。例如:

CMD> ww @CONN |O,08,72 一个OK CMD>

模块的通用初始化

如果您在本项目中的一个示例中使用了 RN487x 模块,或者如果您将该模块用于某些完全不同的目的,并且您准备为另一个示例配置该模块,则该模块可能有一些配置这将与下一个预期用途发生冲突。

在此项目中的每个示例之前,应采取以下步骤:

使用前面的附录部分来访问模块命令外壳。然后使用以下命令序列完成必要的初始化:

CMD> WC 一个OK CMD> SR,0040 一个OK CMD> PZ 一个OK CMD> SW,0A,00 一个OK CMD> R,1 重新启动

运行示例 Python 脚本所需的 Linux 设置

硬件

运行这些脚本的系统当然需要支持低功耗蓝牙 (BLE) 的硬件。 BLE 是在第 4 版中引入的,因此如果您的蓝牙硬件指定的版本低于此版本,则它可能不适用于这些示例。

如果您想为工作站购买 USB 适配器以尝试这些示例,我建议使用任何采用 Qualcomm CSR8510 的适配器。可以在此处购买一个实例。

软件

此设置已针对 Debian 10 进行了验证。它应该适用于基于 Debian 的发行版,例如 Ubuntu。这些示例直接访问的两个组件在 Debian 10 中默认没有安装;

“gattlib”的“pip”安装构建了一个 ELF 库。这个过程也需要一些工具和库。

将所有这些放在一起,必须从系统包管理器请求包列表,然后是对“pip”的单个模块请求。此处提供了用于完成这些操作的脚本。如果您选择运行该脚本,则需要在下载后为其授予“执行”权限。

参考资料

查看本项目系列的下一部分,我们将在其中创建完整的示例。

跳转到项目 1 和 2:构建数字输入和数字控制。


物联网技术

  1. 蜂窝物联网和蓝牙 LE 的协同作用
  2. 使用蓝牙网状网络进行设计:芯片还是模块?
  3. Contrinex:云就绪智能传感器和带蓝牙接口的安全光幕
  4. 凌华科技:利用 Edge AI Solutions 和 NVIDIA EGX 平台将 AI 从边缘部署到云端
  5. Raspberry Pi 上没有模拟输入的模拟传感器
  6. 使用 Raspberry Pi 和 Zabbix Supervisor 读取模拟传感器
  7. 如何处理数据?!
  8. 利用从边缘到云端再返回的物联网数据
  9. 数字化和食品饮料行业
  10. 边缘和物联网:来自物联网世界 2019 的见解
  11. 数字化制造和工业物联网——单一平台的成功
  12. 制造业可以从金属和采矿业中学到什么 - 第 3 部分 - 与 Axora