我们的设计模式需要提供三个组件:
硬件:用于生成数字信号的特定于任务的硬件
配置: RN487x 模块命令在数据库中分配变量,并将信号映射到变量
应用程序:工作站上的脚本,用于接受数据库值
接下来是组件分解。
数字输入硬件
“数字输入”的作用只是由一个
开关提供;SW1。
RN487x 模块的引脚上有内部上拉电阻,因此闭合时连接到地的常开开关将为我们提供必要的二态控制。
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 功能是本示例独有的,即通知。
我们使用回调方法来处理来自外设的信号变化发生时的情况。我们不需要轮询外设来了解信号的状态。
我们必须通过写入系统特征来告诉外设我们想要这些通知。