ST 的 Sensor tile.box 是一个完整的蓝牙传感器套件,旨在为所有经验水平的开发人员设计。该板具有许多用于环境数据的传感器,例如温度、湿度、压力以及加速度计、陀螺仪、磁力计,甚至麦克风。本指南逐步介绍了一种将 SensorTile.box 连接到云的方法,而无需使用 ST 的预制功能包之一编写任何固件。Raspberry Pi 将充当网关,通过互联网从蓝牙连接发送数据。目标是将 SensorTile.box 中的数据保存到云数据库中,以便稍后使用并从任何支持 Internet 的设备访问。AWS 是此示例的首选云提供商,其中使用了 DynamoDB、Lambda 和 IoT Greengrass 服务。
图片784 × 643 122 KB
硬件要求STEVAL-MKSBOX1V1 1 - ST SensorTile.box ST-LINK/V2 2 - ST 链接编程器 树莓派 3 型号 B+ 1 - 树莓派 3 或 4 软件要求和文档蓝思软件开发工具包 2 - 用于 BLE 通信的 Python 库 FP-SNS-ALLMEMS1 2 – 具有 BLE 连接、数字麦克风、环境和运动传感器的 IoT 节点的 SensorTile.box 固件 (v4.0.0+) STSW-LINK004 – 用于编程的 ST Link 实用程序 AWS Greengrass 入门 2 – 用于在 Raspberry Pi 上配置 Greengrass 的 AWS 文档 固件设置该演示使用 ST 的 FP-SNS-ALLMEMS1 功能包从以下 SensorTile.box 传感器读取数据:温度、湿度、压力、磁力计、陀螺仪、加速度计和麦克风。它还跟踪两个附加功能:活动识别(步行、静止等)和手势识别。ST 在功能包中包含一个脚本,可使用固件轻松刷新 电路板,如下所示。 - 将功能包解压缩到方便的位置,并确保安装了 ST Link 实用程序。
- 将 ST-LINK/V2 编程器连接到 SensorTile.box 板。
- 在提取的函数包中,导航到 STM32CubeFunctionPack_ALLMEMS1_Vx.xxProjectsSTM32L4R9ZI-SensorTile.boxApplicationsALLMEMS1STM32CubeIDE
- 创建CleanALLMEMS2_STM32CubeIDE_ST.box.bat的副本并按所示修改它以使用预构建的二进制文件而不是项目构建结果。无需编译。仅更改了应用程序二进制文件NAMEALLMEMS1的路径。确保它与您下载的版本匹配。
修改CleanALLMEMS2_STM32CubeIDE_ST.box.bat- 运行 ModifiedCleanALLMEMS2_STM32CubeIDE_ST.box.bat 以使用 ST Link Utility 将引导加载程序和固件映像闪存到板上。
编程结果测试蓝牙连接在网关设备(本例中为 Raspberry Pi)上完成以下步骤。 - 按照GitHub上的说明安装Python BlueST SDK
sudo pip3 install bluepysudo pip3 install futuressudo pip3 install blue-st-sdkgit clone https://github.com/STMicroelectronics/BlueSTSDK_Python.git- 运行 example_ble_1.py 以验证可以通过 BLE 检索数据。
图片633 × 871 166 KB
将麦克风功能添加到 BlueST SDK在撰写本文时,尽管 BLE 数据中存在这样做的特征,但 BlueST SDK 中没有仅读取麦克风电平的特征类。本节演示了一种向 SDK 添加自定义功能的简单方法。 - 使用以下内容创建一个名为 feature_microphone.py 的新 Python 文件:
feature_microphone.py mic_test.py- 验证它是否有效。
图片461 × 573 63.6 KB
此时,所有基本传感器数据都可以通过 Python 脚本访问。下一步是将数据记录到 AWS 并最终找到一些有用的东西来处理它。 在 Raspberry Pi 上设置 AWS Greengrass Core在此示例中,Raspberry Pi 托管 AWS IoT Greengrass Core。这允许 Pi 充当通往云的网关并简化与 AWS 的通信。它还支持在本地级别执行 Lambda 代码、消息传递和其他功能,以便物联网设备可以在没有云连接的情况下继续运行和交互。AWS 已经为初始设置提供了一个很好的指南,如下所示。 - 从使用下列方法之一入门指南建立的树莓派:
一。自动快速启动脚本或
b。模块 1(Greengrass 环境设置)和模块 2(安装 Greengrass 核心软件)
c. 配置 Greengrass 守护程序以在加电时启动。
在继续之前,请确保您获得以下结果: - AWS IoT 中的新 Greengrass 组
- Raspberry Pi 的安全资源(证书、密钥、配置)
- 在 Raspberry Pi 上运行的 Greengrass 守护进程
创建 SensorTile.box AWS 设备接下来,将创建一个设备来唯一标识 SensorTile.box。 - 在上一步的 Greengrass 组中,创建一个新设备。
- 下载安全资源并将它们复制到 Raspberry Pi 上方便的位置。对于此示例,假设项目目录中有一个名为 aws 的目录来保存凭据。
- 根据上面的示例创建一个 SensorTile.box 类,并添加麦克风功能。
sensortile_box.py- 创建一个充当 Greengrass“设备”的脚本。确保根据需要调整蓝牙 MAC 地址、AWS 主机 URL 和证书/密钥路径以匹配您的设置。
gg_sensortile_box.py配置 AWS 服务AWS Lambda 和 DynamoDB 是用于该项目的主要服务。Lambda 函数在 Raspberry Pi 上本地运行,并在将传入数据写入 DynamoDB 之前对其进行格式化。 拉姆达此项目中的 Lambda 函数使用 AWS Python SDK (boto3) 轻松连接到 DynamoDB。通常 boto3 包含在 Lambda 执行环境中,但在 Greengrass 中并非如此。因此,必须创建一个部署包,其中包含 Lambda 函数可能具有的其他依赖项。这样做的缺点是对 Lambda 代码的任何更改都需要重新上传整个部署包。 - 创建一个新目录来保存依赖项和 Lambda 代码。
- pip 安装 boto3 依赖到新目录。
pip3 install boto3 -t - 添加 Lambda 函数的源代码。根据需要调整区域。
lambda_function.py- 使用合适的名称创建一个新的 Python 3.7 Lambda 函数并将压缩目录上传到其中。
图片1717 × 475 71.2 KB
- 从顶部的Actions下拉菜单中,选择Publish new version。如果需要,添加描述。Greengrass 只能使用已发布版本的 Lambda 函数。
- (可选)从顶部的Actions下拉菜单中,选择Create an alias。别名在 Greengrass Lambda 设置中可见,并且在某些情况下可能比版本号更容易引用。这是 Amazon 建议的,但不用于本教程。
此 Lambda 函数现在可供 Greengrass Core 设备使用。 动态数据库接下来,使用数据的时间戳作为分区(散列)键和功能名称作为排序键创建 DynamoDB 表。这允许多个特征存在于具有相同时间戳的数据库中。如果没有排序键,则只会保存具有特定时间戳的最新数据点。创建表后,必须向 Greengrass 组授予权限以允许访问该表。 创建一个新表,如下所示。如果现在不这样做,Lambda 将在第一次运行时创建一个,但您将无法在随后的权限策略中指定特定表。
图片1202 × 741 102 KB
导航到 AWS IAM 控制台并从侧栏中选择策略。 选择创建策略并使用下面的 JSON 填充它,该 JSON 仅为名为“SensorTileBoxData”的表提供对 Greengrass 的 CreateTable、PutItem 和 DescribeTable 权限。
策略 JSON- 选择查看策略。为策略命名,例如greengrass_SensorBox_Table,然后完成策略的创建。
- 导航回 IAM 控制台并从侧边栏中选择角色。
- 选择创建角色。
- 选择Greengrass作为 Amazon 服务。按下一步:权限。
- 从上面找到要附加到角色的新策略。
- 选择Next两次以前进到查看屏幕。将角色命名为Greengrass_SensorTile_Group_Role 之类的名称,然后完成角色的创建。
配置和部署 Greengrass 组最后一步是将上面创建的所有内容分配给 Greengrass 组并将其部署在 Raspberry Pi 上。 - 在 AWS IoT 控制台中,导航到Greengrass部分并选择之前创建的组。
- 在 Greengrass 组页面上,从侧栏中选择Settings,然后在Group Role 下选择Add Role。选择上面创建的角色。结果应如下所示。
图片985 × 329 58.3 KB
- 从组的侧栏中选择Lambdas,然后选择Add Lambda。
- 从上面添加日志记录 Lambda 函数。您应该只有一个版本和/或别名可供选择。
- 返回 Lambdas 页面,选择新添加函数上的省略号 (...)按钮。选择编辑配置。
图片994 × 524 38.5 KB
- 在Lambda 生命周期下,选择Make this function long-lived and keep it running in infantry。然后选择更新以保存更改。
- 从组的侧栏中,选择订阅,然后选择添加订阅。
- 对于Source,选择Devices → SensorTile-box。对于Target,选择Lambda → GG_CloudLog(或您的函数名称)。按下一步。
- 输入/device/test作为主题过滤器。按Next然后Finish。
图片988 × 484 93.4 KB
- 重复上述步骤以添加另一个订阅,但将目标更改为Services → IoT Cloud。这对于演示来说不是必需的,但允许在 AWS 控制台中查看 MQTT 消息,这对调试很有用。
图片987 × 484 87.5 KB
- 返回到组的部署选项卡。从操作菜单中,选择部署。
图片993 × 236 71.1 KB
如果一切顺利,您将看到带有“成功完成”的绿点。 衡量事物配置到云的路径后,最后一步是使用它。本节提供了一个简单的示例,用于使用上面创建的设备脚本测量数据并通过 AWS 访问该数据。 - 选择要测量的特征。上面的gg_sensortile_box.py脚本中提供了所有基本传感器。可以根据需要对它们进行注释或注释。默认情况下,脚本测量公寓中吉他放大器的温度和声级。为了保持在 DynamoDB 的默认写入容量 5 次写入/秒内,这两个功能都被缩减了 6 倍。
- 根据需要运行gg_sensortile_box.py。使用 Ctrl+C 终止脚本。如果在 10 秒内未从 SensorTIle.box 检测到 BLE 通知,脚本也会停止。
运行设备脚本- 使用 DynamoDB 控制台验证条目是否已添加到数据库中。
图片700 × 897 108 KB
- 在用于访问数据的计算机上,安装绘图脚本的依赖项。
pip3 install boto3 matplotlib pandas stbgraphy.py- 检查结果图。
上图的数据是通过将 SensorTile.box 放置在放大器的通风口附近而放大器开始处于待机状态而生成的。初始数据显示典型的房间噪音为 40dB,并在播放时上升到大致恒定的 87dB。向下的尖峰显示播放中的短暂停顿。在最后一分钟,SensorTile.box 被移出包含放大器的房间,并在继续播放时关上门,将房间外的音量降低到合理的 55dB。温度测量结果表明,随着管子在离开房间时在脱落之前预热,温度会从室温稳步上升。 结论本教程演示了一种使用 AWS Greengrass 将 SensorTile.box 连接到云的方法。它利用 SensorTile.box 的即插即用特性,以最少的开销和无需固件开发访问各种传感器。添加云服务需要比本地方法更复杂的设置,但提供了更多的灵活性和可扩展性。可以方便地添加或删除其他设备(例如多个 SensorTile.boxes)以进行更多测量。设备通过 MQTT 订阅相互安全通信。使用额外的 Lambda 进行额外的数据处理或连接到其他服务。
|