

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 演示使用 AWS IoT 设备客户端发布消息
<a name="iot-dc-testconn-publish"></a>

本节中的过程演示 AWS IoT 设备客户端如何发送默认和自定义 MQTT 消息。

在上一步中为这些练习创建的策略中的以下策略声明授予 Raspberry Pi 执行以下操作的权限：
+ 

**`iot:Connect`**  
让名`PubSubTestThing`为的客户端（运行 AWS IoT 设备客户端的 Raspberry Pi）进行连接。

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing"
        ]
      }
  ```
+ 

**`iot:Publish`**  
授予 Raspberry Pi 用 `test/dc/pubtopic` MQTT 主题发布消息的全效。

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Publish"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic"
        ]
      }
  ```

  `iot:Publish` 操作提供发布到资源数组中列出的 MQTT 主题权限。那些消息的*内容*不受策略声明的控制。

## 使用 AWS IoT 设备客户端发布默认消息
<a name="iot-dc-testconn-publish-default"></a>

此过程运行 AWS IoT 设备客户端，以便它发布一条默认 MQTT 消息，MQT **T 测试客户端**会收到并显示该消息。

**从 AWS IoT 设备客户端发送默认 MQTT 消息**

1. 执行此过程时，请确保连接到 Raspberry Pi 的本地主机上的终端窗口和使用 **MQTT测试客户端**的窗口都可见。

1. 在终端窗口中，输入这些命令以使用中创建的配置文件运行 AWS IoT 设备客户端[创建配置文件](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1)。

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-config.json
   ```

   在终端窗口中， AWS IoT 设备客户端显示信息消息以及运行时出现的任何错误。

   如果终端窗口中没有显示错误，请查看 **MQTT 测试客户端**。

1. 在 **MQTT 测试客户端**的**订阅**窗口中，查看发送到 `test/dc/pubtopic` 消息主题的 *Hello World\$1* 消息。

1. 如果 AWS IoT 设备客户端没有显示任何错误并且你看到 *Hello World！* 发送到 **MQTT 测试客户端**中的`test/dc/pubtopic`消息时，您已演示连接成功。

1. 在终端窗口中，输入 **^C** (Ctrl-C) 以停止 AWS IoT 设备客户端。

在您演示 AWS IoT 设备客户端发布了默认 MQTT 消息之后，您可以继续。[使用 AWS IoT 设备客户端发布自定义消息](#iot-dc-testconn-publish-custom)

## 使用 AWS IoT 设备客户端发布自定义消息
<a name="iot-dc-testconn-publish-custom"></a>

本节中的步骤创建一条自定义 MQTT 消息，然后运行 AWS IoT Device Client，以便将自定义 MQTT 消息发布一次，以便 **MQTT 测试客户端**接收和显示。

### 为 AWS IoT 设备客户端创建自定义 MQTT 消息
<a name="iot-dc-testconn-publish-custom-create"></a>

在连接到 Raspberry Pi 的本地主机上的终端窗口中执行以下步骤。

**创建自定义消息供 AWS IoT 设备客户端发布**

1. 在终端窗口中，打开文本编辑器，例如 `nano`。

1. 在文本编辑器中，复制并粘贴以下 JSON 文档。这将是 AWS IoT 设备客户端发布的 MQTT 消息有效负载。

   ```
   {
     "temperature": 28,
     "humidity": 80,
     "barometer": 1013,
     "wind": {
       "velocity": 22,
       "bearing": 255
     }
   }
   ```

1. 将文本编辑器的内容另存为 **\$1/messages/sample-ws-message.json**。

1. 输入以下命令设置刚才创建的消息文件的权限。

   ```
   chmod 600 ~/messages/*
   ```

**为 AWS IoT 设备客户端创建用于发送自定义消息的配置文件**

1. 在终端窗口中，在文本编辑器（例如）中`nano`，打开现有的 AWS IoT 设备客户端配置文件：**\$1/dc-configs/dc-pubsub-config.json**。

1. 编辑 `samples` 对象如下所示。此文件的其他部分不需要更改。

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/subtopic",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

1. 将文本编辑器的内容另存为 **\$1/dc-configs/dc-pubsub-custom-config.json**。

1. 运行这个命令在新文件上设置权限

   ```
   chmod 644 ~/dc-configs/dc-pubsub-custom-config.json
   ```

### 使用 AWS IoT 设备客户端发布自定义 MQTT 消息
<a name="iot-dc-testconn-publish-custom-publish"></a>

此更改仅影响 MQTT 消息有效载荷的*内容*，因此当前策略将继续工作。但是，如果*MQTT 主题*（由 `~/dc-configs/dc-pubsub-custom-config.json` 红的 `publish-topic` 值定义) 已更改，还需要修改策略语句 `iot::Publish`，允许 Raspberry Pi 发布到新的 MQTT 主题。

**从 AWS IoT 设备客户端发送 MQTT 消息**

1. 在执行此过程时，确保终端窗口和窗口都有 **MQTT 测试客户端**可见。此外，请确保 **MQTT 测试客户端**仍订阅为**\$1**主题筛选条件。如果没有订阅，请再次订阅**\$1**筛选条件主题。

1. 在终端窗口中，输入这些命令以使用在 AWS IoT 中创建的配置文件运行 [创建配置文件](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1)Device Client。

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
   ```

   在终端窗口中， AWS IoT 设备客户端显示信息消息以及运行时出现的任何错误。

   如果终端窗口中没有显示错误，请查看 MQTT 测试客户端。

1. 在 **MQTT 测试客户端**中，在**订阅窗口**中，请参阅发送到 `test/dc/pubtopic` 消息主题的自定义消息有效载荷。

1. 如果 AWS IoT 设备客户端未显示任何错误，并且您看到在 **MQTT 测试客户端**中发布到`test/dc/pubtopic`消息的自定义消息负载，则表示您已成功发布自定义消息。

1. 在终端窗口中，输入 **^C** (Ctrl-C) 以停止 AWS IoT 设备客户端。

在您证明 AWS IoT 设备客户端发布了自定义消息负载之后，您可以继续[演示使用 AWS IoT 设备客户端订阅消息](iot-dc-testconn-subscribe.md)。