如何使用 Microchip 的 RN487x 蓝牙模块构建数字输入和数字控制
了解如何使用 Microchip 模块制作数字输入和数字控制外设原型。
在本文中,作为 Microchip RN487x 蓝牙模块的三部分系列文章的第二部分,我将向您展示如何创建数字输入(开关)和数字控制(LED)。
有关如何配置 RN487x 模块的背景和说明,请返回我的第一篇文章。
项目 1:RN478x 数字输入开关
我们的设计模式需要提供三个组件:
- 硬件: 用于生成数字信号的特定于任务的硬件
- 配置: RN487x 模块命令在数据库中分配变量,并将信号映射到变量
- 应用: 工作站上的脚本,用于接受数据库值
接下来是组件分解。
数字输入硬件
“数字输入”的作用简单地由一个开关提供; SW1.
RN487x 模块在引脚上具有内部上拉电阻,因此在闭合时连接到地的常开开关将为我们提供必要的二态控制。
由于我们只管理一个信号并且不使用 PWM,因此我们选择了 RN4871。该电路可以由一对 AAA 电池甚至纽扣电池供电。
其余的电路元件是;
- C1: 稳定电源的旁路电容
- R1、C2: 处理器在开机时复位的延迟
- J1: 一个用于配置的串口
数字输入配置
在为此示例创建配置之前,请确保模块处于已知状态。这在关于常见初始化的附录部分中进行了描述。不要跳过这一步!
我们只需要数据库中的一个特征来表示我们的传感器状态。因此,我们创建了一项服务,并在该服务中创建了一个特征。两个对应的命令是:
PS,59c88760536411e7b114b2f933d5fe66 PC,59c889e0536411e7b114b2f933d5fe66,10,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: 处理器在开机时复位的延迟
- J1: 一个用于配置的串口
数字控制配置
在为此示例创建配置之前,请确保模块处于已知状态。这在关于常见初始化的附录部分中进行了描述。
不要跳过这一步!
我们只需要数据库中的一个特征来表示我们的传感器状态。因此,我们创建了一项服务,并在该服务中创建了一个特征。
两个对应的命令是:
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 部分将遵循相同的设计模式来创建模拟传感器和模拟控件。它还将包括一些适用于所有示例项目的进一步研究的主题。
物联网技术