ESP32入门Arduino开发(七)–MQTT publishing

  • Post author:
  • Post category:其他



注:


对于ESP32开源技术感兴趣的可以加群,我们一起探索交流学习,群号:782473783。群名:ESP32开源技术交流群。


本文的目的是解释如何使用


ESP32





Arduino IDE


库将消息发布到


MQTT


主题。



介绍


本文的目的是解释如何使用


ESP32





Arduino IDE


库将消息发布到


MQTT


主题。


我们将假设代理将托管在



CloudMQTT






,可以上面创建一个


MQTT


的主机。由于


CloudMQTT


有一个



免费的



计划,我们可以创建一个帐户并进行测试。设置一个帐户非常简单。您可以



在这里查看



如何执行以及如何创建代理实例。


完成程序后,检查实例信息页面,应该类似于图


1


所示的页面。我们将在


ESP32


代码上使用的重要凭证是

服务器




用户



密码



端口










1



– CloudMQTT


实例信息


对于


ESP32


方面,我们将使用名为



PubSubClient






MQTT


库。这是


ESP8266


连接到


MQTT


代理的相同库。虽然在撰写本文时没有提到


ESP32


的支持,但



在这里



可以看到


lib


工作正常。


像往常一样,安装库的最简单的方法是通过


Arduino IDE


库管理器,如图


2


所示。










2






通过


Arduino IDE


库管理器安装


PubSub


库。




代码


我们连接到


MQTT


代理并发布消息到主题所需的代码将与


ESP8266


的帖子非常相似。这些都是好消息,因为代码可以重复用于


ESP32


,从而使移植应用程序变得更加轻松。


像往常一样,我们需要在我们的代码中包含一些库。我们需要



WiFi



库,以便能够将


ESP32


连接到


WiFi


网络,以及



PubSubClient



库,这将允许我们连接到


MQTT


代理。有关如何将


ESP32


连接到


WiFi


网络的更详细说明,前面文章已经介绍了。


为了有一个易于修改和易读的代码,我们将声明在全局变量中连接到


WiFi


网络和


MQTT


代理所需的凭证和信息。对于连接到


MQTT


代理,我们将需要服务器地址,端口,用户名和密码,可以在实例信息页面中获得,如介绍部分的图


1


所示。

#include<WiFi.h>
#include<PubSubClient.h>

const char* ssid ="yourNetworkName";
const char*password = "yourNetworkPassword";
const char*mqttServer = "m11.cloudmqtt.com";
const int mqttPort =12948;
const char*mqttUser = "yourMQTTuser";
const char* mqttPassword ="yourMQTTpassword";


之后,我们将声明一个



WiFiClient



类的对象,它允许建立到一个定义的


IP


和端口的连接。不过,我们不会明确地使用这个对象,因为它将被


MQTT


库所使用。


我们还将声明一个类



PubSubClient



的对象,




并作为构造函数的输入传递给之前定义的


WiFiClient




WiFiClientespClient;


PubSubClient client(espClient);


像往常一样,在设置功能,我们打开一个串口连接,因为这是输出我们的程序的结果最简单的方法。我们还将连接到


WiFi


网络,以便我们可以访问


MQTT


代理并将消息发布到主题。

Serial.begin(115200);
WiFi.begin(ssid,password);

while (WiFi.status()!= WL_CONNECTED) {
    delay(500);
    Serial.println("Connectingto WiFi..");
}
Serial.println("Connected to the WiFinetwork");


接下来,我们需要指定之前在全局变量中声明的


MQTT


服务器的地址和端口。为此,我们调用


PubSubClient


对象上的



setServer



方法,该对象接收地址和端口作为参数。


之后,我们将连接到


MQTT


服务器。为了进行实际的连接,我们调用



connect



方法,将作为输入参数的客户端唯一标识符,认证用户名和密码作为参数传递。我们将使用标识符


“ESP32Client”




此方法调用将在连接成功时返回


true


,否则返回


false



client.setServer(mqttServer,mqttPort);
while (!client.connected()){
    Serial.println("Connectingto MQTT...");
    if (client.connect("ESP32Client",mqttUser, mqttPassword )) {
      Serial.println("connected"); 
    }else {
      Serial.print("failedwith state ");
      Serial.print(client.state());
      delay(2000);
    }
}


请注意,在前面的代码中,我们使用了两个辅助方法。该





连接



方法,如果连接建立返回


true


否则为


false


。该方法将返回一个代码,为什么连接失败的信息。



在这里



检查可能的返回值。


最后,我们将发布一个消息给一个话题。为此,我们调用



publish



方法,将输入参数作为主题名称和要发布的消息。我们将在


“esp / test”


主题上发布


“ESP32





Hello”


消息。


client.publish("esp/test","Hello from ESP32");


检查完整的源代码,其中已包含主循环功能。在那里,我们将调用


PubSubClient






循环



方法。这种方法需要定期调用,以允许接收消息和维护与代理的连接。当然,在我们这个案例中,既然我们只想发表一个信息给这个话题,我们什么都不会做,我们只是把它作为一个例子。

#include<WiFi.h>
#include<PubSubClient.h>

const char* ssid ="yourNetworkName";
const char*password =  "yourNetworkPassword";
const char*mqttServer = "m11.cloudmqtt.com";
const int mqttPort =12948;
const char*mqttUser = "yourMQTTuser";
const char*mqttPassword = "yourMQTTpassword";

WiFiClientespClient;
PubSubClientclient(espClient);

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid,password);
  while (WiFi.status()!= WL_CONNECTED) {
    delay(500);
    Serial.println("Connectingto WiFi..");
  }
  Serial.println("Connectedto the WiFi network");
  client.setServer(mqttServer,mqttPort);
  while (!client.connected()){
    Serial.println("Connectingto MQTT...");
    if (client.connect("ESP32Client",mqttUser, mqttPassword )) {
      Serial.println("connected");
    }else {
      Serial.print("failedwith state ");
      Serial.print(client.state());
      delay(2000);
    }
  }
  client.publish("esp/test","Hello from ESP32");
}

void loop() {
  client.loop();
}



测试代码


为了测试代码,我们将使用名为



MQTTLens



的应用程序,它将允许我们订阅


MQTT


主题并接收发布的消息。因此,打开应用程序并订阅


“esp / test”


主题,这是我们在


ESP32


代码中指定的主题。


之后,只需上传并在


ESP32


上运行代码。在


Arduino IDE


串口监视器上,你应该得到类似于图


3


的结果。










3






连接到


ESP32


上的


MQTT


代理。





MQTTLens


方面,您应该收到在该主题上发布的消息,如图


4


所示。










4









MQTTLens


上接收消息。






相关内容


§



MQTT





§



MQTTLens


下载页面


§



CloudMQTT


技术细节


§



PubSubClient


库:



v2.6.0



版权声明:本文为solar_Lan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。