代码说明 首先,我们在代码中包含用于ESP8266的“ ESP8266WiFi.h”和用于MQTT的“ PubSubClient.h”。
您可以在Arduino库中找到预构建的ESP8266库,但需要从GitHub存储库中下载PubSubClient库。 - #include <ESP8266WiFi.h>
- #include <PubSubClient.h>
复制代码然后,定义网络凭据,例如您的Wi-Fi用户名和密码。分别替换“ admin”和“ 12345678”。 - const char* ssid = "admin";
- const char* password = "12345678";
复制代码
接下来,我们需要配置MQTT服务器。我们在该项目中使用了Eclipse MQTT服务器,这就是为什么服务器地址指定为“ mqtt.eclipse.org”的原因。但是,如果您打算使用任何其他服务器,例如Mosquitto、Adafruit,则可以将其替换为您的特定服务器地址和端口号。 - const char* mqtt_server = "mqtt.eclipse.org";
- const int mqtt_port = 1883;
复制代码接下来,为类WiFiClient和PubSubClient创建实例,这些实例将在整个程序中使用。 - WiFiClient espClient;
- PubSubClient client(espClient);
复制代码
在setup()函数中,我们首先调用WiFi.begin(),调用此函数会将ESP连接到您的首选HotSpot。 - WiFi.begin(ssid, password);
复制代码接下来,我们使用WiFi.status()方法检查网络连接是否成功。成功连接之后,将在串口监视器上打印一条消息显示连接的网络的SSID。 - while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.println("Connecting to WiFi..");
- }
- Serial.print("Connected to WiFi :");
- Serial.println(WiFi.SSID());
复制代码现在,我们需要创建一个代理。为此,我们使用了setServer函数。此函数采用两个我们先前已预定义的参数。现在,如果要从服务器接收消息,则需要创建一个回调函数。为此,我们使用setCallback(callback)函数。 - client.setServer(mqtt_server, mqtt_port);
- client.setCallback(MQTTcallback);
复制代码现在,我们使用connect(clientID)函数来连接到ESP8266 client。这里的clientID是客户端的名称,并且必须是唯一的。如果已连接,则可以在串口监视器内显示成功消息。 - if (client.connect("ESP8266"))
- {
- Serial.println("connected");
- }
- else
- {
- Serial.print("failed with state ")
- Serial.println(client.state());
- delay(2000);
- }
复制代码
接下来,我们调用client.subscribe(),它是内置的MQTT函数,用于订阅特定主题。对于此项目,我们使用“ esp / test”作为订户名称。 - client.subscribe("esp/test");
复制代码现在,调用MQTTcallback函数以检查是否有任何更新的信息。如果有新数据可用,此函数将处理接收到的数据并在串口监视器中显示一条消息,其中包含原始消息和接收消息的主题名称。 接下来,我们将消息转换为字符串,以便可以对其进行比较和检查是否有任何触发动作。在此项目中,使用MQTT命令打开/关闭LED,如下代码所示。 - for (int i = 0; i < length; i++)
- {
- message = message + (char)payload[i];
- }
- Serial.print(message);
- if (message == "on")
- {
- digitalWrite(LED, HIGH);
- }
复制代码
最后,发布有关该主题的信息。使用client.publish()函数。在本文中,将检查按钮状态,如果按下按钮,则会将消息发布到主题“ esp / test1”,如下所示。 - if(digitalRead(D1)==0))
- {
- client.publish("esp/test1", "Hello from ESP8266");
- }
- else;
- client.loop();
复制代码
使用Arduino使用ESP8266测试MQTT
我们将使用我们先前设置的Android应用程序d进行测试。
打开MQTT客户端应用程序,并确保您的手机具有有效的Internet连接。另外,NodeMCU连接到的热点应具有活动的Internet连接。一切都连接到互联网后,我们将从ESP模块发送“ Hello from ESP8266”字符串,该字符串将反映在Android应用程序内部,并且会收到通知。接下来,我们将从Android应用程序发送一个字符串,这将打开连接到ESP8266 Node MCU板的LED。
第1步 :(订阅主题): 单击我们先前配置的App上的Saved MQTT选项。它将弹出一个界面,提示您“订阅主题”。我们之前已将主题配置为“ esp / test1”。因此,在Android应用中,我们将编写“ esp / test1”。单击“订阅”,这样做将为您显示如下界面,内容将类似于特定主题的“未收到消息”。
现在,单击已连接到nodeMCU的“已连接”按钮。现在,按照我们的代码,消息“ Hello from ESP8266”将发布到主题,屏幕上将显示一条通知,其中包含收到的消息,如下所示。
第2步:发布到主题: 现在要发布在主题中,单击应用程序的向上箭头按钮,它将打开一个屏幕,如下所示。
现在,在“主题”字段中,写入“ esp / test”,在消息字段中,写入“ on”或“ off”以分别打开和关闭LED。例如,如果将“ on”发布到主题,则LED将打开,如果将“ off”发布到主题,则LED将关闭。
希望您喜欢这篇文章,如果您对本文有任何疑问,请在下面发表回复。 |