AWS IoT Greengrass 入门-模块4:在 AWS IoT Greengrass 组中与设备交互
AWS IoT Greengrass 入门-模块4:在 AWS IoT Greengrass 组中与设备交互
在此模块中,一个 Greengrass 设备将向 Greengrass 组中的另一个设备发送“Hello World”消息 。
在 AWS IoT Greengrass 组中创建 AWS IoT 设备
-
在 AWS IoT 控制台中,依次选择 (Greengrass)、(组),然后选择您的组。
-
在组配置页面中,选择(设备),然后选择(添加第一个设备)。
-
选择(创建新设备)。
-
将此设备注册为
HelloWorld_Publisher
,然后选择下一步。 -
对于(一键式操作),选择(使用默认设置)。此选项生成一个具有附加 AWS IoT 策略以及公有密钥和私有密钥的设备证书。
-
解压缩
hash-setup.tar.gz
文件 -
选择 (添加设备),重复步骤 \(3 - 7\) 以向组中添加新设备。
将此设备命名为
HelloWorld_Subscriber
。将设备的证书和密钥下载到您的计算机中。将它们保存并解压缩到您为 HelloWorld_Publisher 创建的同一文件夹中。同样,记下 HelloWorld_Subscriber 设备的文件名中的常见
hash
组分。现在,您的 AWS IoT Greengrass 组 中应该有两个设备:
-
下载 Amazon Root CA 1 ATS 根 CA 证书 ,将根 CA 证书作为
root-ca-cert.pem
保存到两个设备的证书和密钥所在的同一文件夹中。所有这些文件应位于计算机(而非 AWS IoT Greengrass Core 设备)上的某个文件夹中。
配置订阅
在本步骤中,您将使 HelloWorld_Publisher 设备能够向 HelloWorld_Subscriber 设备发送 MQTT 消息。
-
在组配置页面中,选择 (订阅),然后选择 (添加订阅)。
-
配置订阅。
- 在 (选择源) 下面,选择 (设备),然后选择 HelloWorld_Publisher。
- 在 (选择目标) 下面,选择 (设备),然后选择 HelloWorld_Subscriber。
- 选择 (下一步)。
-
对于 (主题筛选条件),输入
hello/world/pubsub
,选择 Next (下一步),然后选择 Finish (完成)。注意
您可以删除前面的模块中的订阅。在组的 Subscriptions (订阅) 页面上,选择与订阅关联的省略号 (…),然后选择 Delete (删除)。
-
确保 AWS IoT Greengrass 守护程序正在运行。
-
在组配置页面上,从 (操作) 中选择 (部署)。
安装 适用于 Python 的 AWS IoT 设备开发工具包
AWS IoT 设备可以使用 适用于 Python 的 AWS IoT 设备开发工具包 来与 AWS IoT 和 AWS IoT Greengrass Core 设备通信(使用 Python 编程语言)。
-
要将开发工具包与所有必需的组件一起安装到您的计算机上。
-
打开命令终端并运行以下命令:
python --version
如果没有返回版本信息,或者 Python 2 的版本号小于 2.7 或 Python 3 的版本号小于 3.3,则按照下载 Python 中的说明安装 Python 2.7+ 或 Python 3.3+。
-
将 适用于 Python 的 AWS IoT 设备开发工具包 下载为
zip
文件并将其解压缩到您计算机上的适当位置。 并解压。 -
请记下其中包含
setup.py
文件的文件夹的文件路径:在下一个步骤中,此文件路径将由path-to-SDK-folder
指示。 -
从命令终端中运行以下命令:
cd 'path-to-SDK-folder' python setup.py install
-
-
安装适用于 Python 的 AWS IoT 设备开发工具包后,导航到
samples
文件夹,打开greengrass
文件夹,然后将basicDiscovery.py
文件复制到包含 HelloWorld_Publisher 和 HelloWorld_Subscriber 设备证书的文件夹中,如以下示例中所示。
测试通信
-
确保您的计算机和 AWS IoT Greengrass Core 设备已使用同一个网络连接到 Internet。
-
在 AWS IoT Greengrass Core 设备上,运行以下命令以查找其 IP 地址。
hostname -I
-
在自己计算机的命令终端上,使用核心的 IP 地址运行以下命令。可以使用 Ctrl + C 停止 ping 命令。
ping 'IP-address'
类似于下面的输出指示了计算机与 AWS IoT Greengrass Core设备之间的通信成功(数据包丢失为 0%):
-
-
获取您的 AWS IoT 终端节点。
-
(AWS IoT 控制台)的导航窗格中,选择 (设置)。
-
在设置 下方,记录终端节点的值。您可以使用此值在以下步骤中替换命令中的
AWS_IOT_ENDPOINT
占位符。
注意
确保您的终端节点与证书类型对应。
-
-
在您的计算机(不是 AWS IoT Greengrass Core 设备)上,打开两个 (终端或命令提示符)窗口。一个窗口代表 HelloWorld_Publisher 设备,另一个窗口代表 HelloWorld_Subscriber 设备。
执行时,
basicDiscovery.py
尝试在其终端节点处 AWS IoT Greengrass Core 的位置上收集信息。在设备发现并成功连接到核心后,将会存储此信息。这将允许未来的消息收发和操作可以在本地执行(无需 Internet 连接)。注意
您可以从包含
basicDiscovery.py
文件的文件夹运行以下命令,以查看详细的脚本使用信息:python basicDiscovery.py --help
-
从 HelloWorld_Publisher 设备窗口运行以下命令。
- 将
path-to-certs-folder
替换为包含证书、密钥和basicDiscovery.py
的文件夹的路径。 - 将
AWS_IOT_ENDPOINT
替换为您的终端节点。 - 将两个
publisher
实例替换为 HelloWorld_Publisher 设备的文件名中的哈希值。
cd 'path-to-certs-folder' python basicDiscovery.py --endpoint 'AWS_IOT_ENDPOINT' --rootCA root-ca-cert.pem --cert 'publisher'.cert.pem --key 'publisher'.private.key --thingName HelloWorld_Publisher --topic 'hello/world/pubsub' --mode publish --message 'Hello, World! Sent from HelloWorld_Publisher'
您应该看到类似于以下内容的输出:
注意
如果脚本返回
error: unrecognized arguments
消息,请针对--topic
和--message
参数将单引号更改为双引号,并再次运行该命令。如果连接出错,尝试以下步骤:
手动输入终端节点
- 依次选择 Greengrass、组和您的组。
- 选择 (设置)。
- 对于 (本地连接检测),选择 (手动管理连接信息),然后选择 (查看核心的特定终端节点信息)。
- 选择您的核心,然后选择(连接)。
- 选择(编辑),确保只有一个终端节点值。该值必须是 AWS IoT Greengrass Core 设备的端口 8883 的 IP 地址终端节点(例如,
192.168.1.4
)。 - 选择 (更新)。
- 将
-
从 HelloWorld_Subscriber 设备窗口运行以下命令。
- 将
path-to-certs-folder
替换为包含证书、密钥和basicDiscovery.py
的文件夹的路径。 - 将
AWS_IOT_ENDPOINT
替换为您的终端节点。 - 将两个
subscriber
实例替换为 HelloWorld_Subscriber 设备的文件名中的哈希值。
cd path-to-certs-folder python basicDiscovery.py --endpoint 'AWS_IOT_ENDPOINT' --rootCA root-ca-cert.pem --cert 'subscriber'.cert.pem --key 'subscriber'.private.key --thingName HelloWorld_Subscriber --topic 'hello/world/pubsub' --mode subscribe
您应该看到以下输出:
- 将