MQTT - 设置 MQTT 客户端与 Broker 通信
材料准备
范例说明
介绍
MQTT (Message Queuing Telemetry Transport),它是为IBM和Eurotech共同制定出来的protocol,在MQTT的官网可以看到它对MQTT的介绍:
MQTT is a machine-to-machine (M2M)/”Internet of Things” connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport.
所以它是为了IOT而设计的protocol,它是基于TCP/IP的协定,并且透过publish/subscribe的方式做资料传送与接收。
它的架构如下图:
在MQTT的运行中,有以下几个角色:
- Publisher: 通常Publisher是配有感测器的设备(例如 Ameba)。 Publisher将感测器的数据上传到MQTT-Broker,MQTT-Broker作为MQTT服务的资料库。
- Subscriber: Subscriber是指接收和分析消息的设备,例如笔电或手机。
- Topic: 使用Topic来对消息进行分类,例如消息的Topic可以是“PM2.5”或“温度”。 Subscriber可以选择他们想要接收主题的消息。
在此有 3 个将 Ameba 连接到 MQTT-Broker 的范例。然后作为Publisher发送消息并作为Subscriber接收来自 MQTT-Broker 的消息。
- 1.MQTT_Basic
- 2.MQTT_Auth
- 3.MQTT_Publish_In_Callback
流程
MQTT_Basic 范例
打开 MQTT 范例 “File”->“Examples”->“AmebaMQTTClient”->“MQTT_Basic”
请修改一些WiFi相关的参数以及MQTT相关的一些资讯:
- “ssid”是用于连接网路的SSID。
- “pass”是用于连接网路的密码。
- “mqttServer”是指MQTT-Broker,有免费的MQTT “test.mosquitto.org”可用于测试。
- “clientId”是 MQTT-Broker 识别连接设备的id。
- “publishTopic”是已发布消息的主题,在范例中为“outTopic”。订阅“outTopic”的设备将会收到该消息。
- “publishPayload”是要发布的内容。
- “subscribeTopic”是告诉MQTT-broker要订阅哪个主题。
接下来,编译代码并将其上传到Ameba。按重置按钮,然后打开serial monitor。
Ameba 连接到 MQTT 服务器后,向“outTopic”发送消息“hello world”。要查看消息,需要设置另一个 MQTT 客户端。
“MQTT Explore”是一款适用于全部平台的应用程序,可设置为MQTT客户端。请参阅网站 http://mqtt-explorer.com/。
单击左上角的“Connections”开始新的设置连接。 “Name”可以自定义。将“Host”设置为“test.mosquitto.org”。
单击底部的“ADVANCED”进行主题设置。使用与开发板上“publishTopic”相同的“outTopic”。单击“ADD”,然后单击“BACK”。
单击“CONNECT”。 “hello world”消息则显示在左侧。在右侧的“Publish”下,使用与开发板上“sucribeTopic”相同的“inTopic”。选择“raw”并输入“Text hello Ameba”,然后单击“PUBLISH”。开发板将收到 MQTT Explorer 发布的原始消息。请注意,由于该主机是免费的公用服务器,因此开发板可能会收到预期外的消息。
MQTT_Auth 范例
打开 MQTT 范例 “File”->“Examples”->“AmebaMQTTClient”->“MQTT_Auth”
请修改一些WiFi相关的参数以及MQTT相关的一些资讯:
- “mqttServer”指MQTT-Broker,amebaiot主页“cloud.amebaiot.com”提供免费的MQTT认证主机。请参阅 https://www.amebaiot.com/en/cloud-getting-started/ 用于帐户设置。
- “clientId”是 MQTT-Broker 识别连接设备的标识符。在本例中,它是注册的设备名称。请参阅https://www.amebaiot.com/en/cloud-service/ .
- “clientUser”是身份验证用户名。在本范例中,它是 Realtek IoT/Wi-Fi MCU Solutions 网站的登录用户名。注意,如果使用“clientUser”邮箱,将无法接收消息。
- “clientPass”是认证密码。在本范例中,它是 Realtek IoT/Wi-Fi MCU Solutions 网站的登录密码。
- 其他参数与之前相同。
接下来,编译代码并将其上传到Ameba。按重置按钮,然后打开serial monitor。 Ameba 连接到 MQTT 服务器后,向“outTopic”发送消息“hello world”。要查看消息,需要设置另一个 MQTT 客户端。
启动 MQTT Explore,并设置身份验证连接。
单击左上角的“Connections”开始新的连接。 “Name”可以自定义。将“Host”设置为“cloud.amebaiot.com”。 “Username”和“Password”与“clientUser”和“clientPass”相同。
单击底部的“ADVANCED”进行主题设置。使用与开发板上“publishTopic”相同的“outTopic”。单击“ADD”,然后单击“BACK”。
单击“CONNECT”。 “hello world”消息则显示在左侧。在右侧的“Publish”下,使用与开发板上“sucribeTopic”相同的“inTopic”。选择“raw”并输入“Text hello Ameba”,然后单击“PUBLISH”。开发板将收到 MQTT Explorer 发布的原始消息。请注意,“hello world”有时不会显示,因为开发板在 MQTT Explorer 之前连接到 MQTT Broker。
MQTT_Publish_In_Callback 范例
打开 MQTT 范例 “File”->“Examples”->“AmebaMQTTClient”->“MQTT_Publish_In_Callback”
请修改一些WiFi相关的参数以及MQTT相关的一些资讯:
• 所有参数与 MQTT_Auth 范例相同。
接下来,编译代码并将其上传到Ameba。按重置按钮,然后打开serial monitor。 Ameba 连接到 MQTT 服务器后,向“outTopic”发送消息“hello world”。要查看消息,需要设置另一个 MQTT 客户端。
启动 MQTT Explore,并设置身份验证连接。所有设置与 MQTT_Auth 范例相同。
单击底部的“ADVANCED”进行主题设置。使用与开发板上“publishTopic”相同的“outTopic”。单击“ADD”,然后单击“BACK”。
单击“CONNECT”。 “hello world”消息则显示在左侧。在右侧的“Publish”下,使用与开发板上“sucribeTopic”相同的“inTopic”。选择“raw”并输入“Text hello Ameba”,然后单击“PUBLISH”。开发板将收到 MQTT Explorer 发布的原始消息。请注意,“hello world”有时不会显示,因为开发板在 MQTT Explorer 之前连接到 MQTT Broker。