雷竞技注册
项目

如何使用Microchip的RN487X蓝牙模块构建数字输入和数字控制

2019年10月13日经过亚伦•汉森

学习如何使用微芯片模块原型数字输入和数字控制外设。

在本文中,三部分系列中的第二个Microchip的RN487x蓝牙模块,我将告诉你如何创建一个数字输入(一个开关)和一个数字控制(一个LED)。

有关背景和说明,请参阅我的第一篇文章如何配置RN487x模块

项目一:RN478x数字输入开关

我们的设计模式有三个组件,我们需要提供:

  1. 硬件:特定任务的硬件来产生数字信号
  2. 配置:RN487X模块命令在数据库中分配变量,并将信号映射到变量
  3. 应用:脚本,以接受数据库值

下面是组件的分解。

数字输入硬件

“数字输入”的作用只是由一个开关提供;SW1。

RN487X模块在引脚上具有内部上拉,因此封闭件上的正常开关将为我们提供必要的2状态控制。

RN487X数字输入设计的原理图

因为我们只管理一个信号,我们没有使用PWM,我们选择了RN4871。该电路可以由一对AAA电池供电,甚至是一个硬币电池。

剩余的电路元件是;

  • C1:一种稳定功率的旁路电容器
  • R1,C2:处理器在电源上重置的延迟
  • j - 1:配置串行端口

数字输入配置

在为本例创建配置之前,请确保模块处于已知状态。这在常见初始化的附录部分中描述。不要跳过此步骤!

我们只需要一个特征在数据库中代表传感器状态。所以我们在该服务中创建一个服务和一个特征。两个相应的命令是:

PS, 59 c88760536411e7b114b2f933d5fe66 PC, 59 c889e0536411e7b114b2f933d5fe66, 01

第一个命令PS创建服务。第二个命令,PC,创建特性。在这两个命令中,第一个参数是标识符,它允许我们的外设存在于其他蓝牙外设中,并且仍然可以惟一地访问。该参数必须符合UUID标准。您可以使用显示的示例值。这也很容易创建任意数量的标准UUID

在PC命令中,第二个参数告诉蓝牙图层值的更改应该如何到达客户端。在这种情况下,参数(10)表示,对该值的更改可能导致立即通知客户端。这是我们为此示例意图的重要组成部分。最后,在PC命令中,第三个参数定义了以字节为单位的大小;在这种情况下只有一个(01)。

配置的脚本部分如下所示:

@pw_on sw,0a,09 @ pio1h shw,0072,01 @ pio1l shw,0072,00

该脚本中有三个方法,每个都以“@”为前缀。每个方法都在特定的系统事件上运行。

  • PW_ON:在接通电源的运行。该方法将感兴趣的引脚(P1_2)配置为“触发”数字输入信号。
  • pio1h:只要触发信号过渡到高电平就会运行。该方法将“1”写入数据库。
  • pio1l:每当触发器信号转换到低时运行。该方法向数据库中写入一个“0”。

数字输入应用程序

python脚本是switch.py​​,可以找到在这里。编辑脚本并将样本MAC地址替换为您的设备的MAC地址。然后,为了练习这个示例,只需将电源应用到外设,然后在具有适当蓝牙功能的系统上运行脚本。有关Linux中此设置的帮助,请参阅附录。当连接到外设时,脚本将发出消息来指示进度。外设连接好后,按下松开开关几次。开关的每一个打开/关闭事件都将被记录,并从运行脚本中得到一条消息。

脚本很短,包括所有功能块和GATT API调用的注释。

我们使用的BLE功能对于此示例是唯一的通知。

  • 我们使用回调方法来处理来自外设的信号更改。我们不需要轮询外围设备来了解信号的状态。
  • 我们必须通过写入系统特征来告诉外围设备我们想要这些通知。

项目2:RN487X数字控制

我们的设计模式有三个组件,我们需要提供:

  • 硬件:特定于任务的硬件来表示数字输出
  • 配置:RN487x模块命令在数据库中分配一个变量,并将该变量映射到信号
  • 应用:在工作站上的脚本,编写数据库值

下面是组件的分解。

数字控制硬件

“数字输出”的作用只是由一个LED提供;D1。

RN487x模块参考电路建议开集电极GPIO,因此我们通过下沉电流来照亮LED。

因为我们只管理一个信号,我们没有使用PWM,我们选择了RN4871。该电路可以由一对AAA电池供电,甚至是一个硬币电池。

剩余的电路元件是;

  • C1:一种稳定功率的旁路电容器
  • R1,C2:处理器在电源上重置的延迟
  • j - 1:配置串行端口

数字控制配置

在为本例创建配置之前,请确保模块处于已知状态。这在常见初始化的附录部分中描述。

不要跳过此步骤!

我们只需要一个特征在数据库中代表传感器状态。所以我们在该服务中创建一个服务和一个特征。

两个相应的命令是:

PS,59C88760536411E7B114B2F933D5FE66 PC,59C889E0536411E7B114B2F933D5FE66,08,01

第一个命令PS创建服务。第二个命令,PC,创建特性。在这两个命令中,第一个参数是标识符,它允许我们的外设存在于其他蓝牙外设中,并且仍然可以惟一地访问。该参数必须符合UUID标准。您可以使用显示的示例值。这也很容易创建任意数量的标准UUID

在PC命令中,第二个参数告诉蓝牙图层值的变化应该如何到外围设备。在这种情况下,参数(08)表示,外围设备必须在更改值时向客户端发送确认。最后,在PC命令中,第三个参数定义了以字节为单位的大小;在这种情况下只有一个(01)。

配置的脚本部分如下所示:

@CONN | O, 08年,72年

在这个脚本中只有一个方法' @CONN '。每当客户端连接到外设时,它就会运行。

单个脚本行是一个“句柄关联”命令,具有非常强大的结果。它将数据库变量与数字引脚输出命令相关联。“08”参数是一个位掩码,指定我们的LED连接到的引脚。'72'参数是我们在数据库中创建的特性的唯一和永久句柄。因此,在客户端连接后,每次客户端都将新值写入数据库变量,我们的LED将相应地继续或关闭。

数字控制应用程序

Python脚本是light.py,可以找到它在这里。编辑脚本并将样本MAC地址替换为您的设备的MAC地址。然后,为了练习这个示例,只需将电源应用到外设,然后在具有适当蓝牙功能的系统上运行脚本。有关Linux中此设置的帮助,请参阅附录。当连接到外设时,脚本将发出消息来指示进度。连接外设后,脚本将每秒钟向外设发送一个新命令。命令将打开和关闭LED。

脚本很短,包括所有功能块和GATT API调用的注释。我们使用的BLE功能对于此示例是唯一的,是句柄关联。

您可以在随附的项目视频中看到这一整个示例。

下一步

这是我们在RN487X模块上的三部分系列的第2部分。

第3部分将遵循相同的设计模式来创建模拟传感器和模拟控制器。它还将包括一些适用于所有示例项目的进一步研究的主题。