连接MQTT服务器
连接MQTT服务器
当我们的Esp8266开发板连接到网络后,我们就需要测试验证以下Esp8266连接到MQTT服务器上,让Esp8266作为一个发布者,间隔1s向服务器发送一条信息。
1.导入库函数
需要连接到MQTT服务器,我们需要使用PubSubClient
库函数,因此首先添加到工程中
2.编写代码
MQTT服务器的话可以自行搭建也可以使用注册账号连接到公共的MQTT服务器,我这里使用自行搭建的EMQX作为服务器。
#include <Arduino.h>
#include <PubSubClient.h>
#include <WiFiManager.h>
/************************************/
// 函数声明
void wifiInit();
void connectMqttServer();
void publishMqttMessage();
/************************************/
// wifi连接信息
WiFiManager wiFiManager;
char *ssid = "2002";
char *password = "15828546007";
// mqtt服务器
const char *mqttServer = "110.41.13.221";
// wifi客户端
WiFiClient wificlient;
// mqtt客户端
PubSubClient mqttclient(wificlient);
/************************************/
void setup()
{
// 启动串口
Serial.begin(9600);
// wifi初始化
wifiInit();
// 设置mqtt服务器地址和端口号
mqttclient.setServer(mqttServer, 1883);
// 连接Mqtt服务器
connectMqttServer();
}
void loop()
{
if (mqttclient.connected())
{
// 发布消息
publishMqttMessage();
// 保持心跳
mqttclient.loop();
}
else
{
// 则尝试连接服务器
connectMqttServer();
}
}
// wifi初始化
void wifiInit()
{
// 重置设置
// wiFiManager.resetSettings();
// 自动配网
// wiFiManager.autoConnect("esp8266-wifi");
WiFi.begin(ssid,password);
Serial.println("wifi连接中...");
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("小主不要着急,我正在加紧连接wifi中...");
}
Serial.print("报告小主,wifi连接成功,IP:");
Serial.println(WiFi.localIP());
}
// 连接mqttServer
void connectMqttServer()
{
// 客户端id
String clientId = "esp8266-" + WiFi.macAddress();
// 连接mqtt服务器
if (mqttclient.connect(clientId.c_str()))
{
Serial.println("报告小主,已连接到MQTT服务器");
}
else
{
Serial.println("报告小主,连接MQTT服务器失败");
delay(1000);
}
}
// 发布消息
void publishMqttMessage()
{
// 发布主题
String topicStr = "esp8266/temperature";
char publishTopic[topicStr.length() + 1];
strcpy(publishTopic, topicStr.c_str());
// 发布消息
String messageStr = "hello world";
char publishMsg[messageStr.length() + 1];
strcpy(publishMsg, messageStr.c_str());
// ESP8266向主题发布信息
if (mqttclient.publish(publishTopic, publishMsg))
{
delay(1000);
Serial.println("Esp8266发布消息成功");
}
else
{
Serial.println("Esp8266发布消息失败");
}
}
代码编写好后,下载到开发板中,查看串口打印日志。Esp8266开发板作为客户端,间隔1s向服务器发送一条消息
3.消费者MQTTX
使用MQTTX客户端工作作为我们的消费者,ESP8266作为发布者发布消息,MQTTX作为消费者,订阅主题后来消费该消息
4.登陆EMQX服务器
登陆服务器查看,我们的Esp8266连接到服务器上查看相关信息