举一个例子,关于esp32 mqtt订阅,代码要有详细说明
时间: 2024-03-05 20:51:49 浏览: 94
好的,下面是一个ESP32使用MQTT协议进行订阅的示例代码,具体说明见代码注释:
```c
#include <WiFi.h>
#include <PubSubClient.h> // 添加MQTT库
// WiFi连接信息
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// MQTT服务器信息
const char* mqtt_server = "your_MQTT_SERVER";
const int mqtt_port = 1883; // 默认端口号为1883
// MQTT客户端信息
const char* mqtt_client_id = "esp32_client"; // 客户端ID,可以自由定义
const char* mqtt_username = "your_MQTT_USERNAME"; // MQTT用户名
const char* mqtt_password = "your_MQTT_PASSWORD"; // MQTT密码
// MQTT订阅主题信息
const char* mqtt_topic = "your_MQTT_TOPIC"; // 订阅的主题,可以自由定义
// 声明WiFi和MQTT客户端对象
WiFiClient wifi_client;
PubSubClient mqtt_client(wifi_client);
// WiFi连接函数
void connect_wifi() {
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
// MQTT连接函数
void connect_mqtt() {
while (!mqtt_client.connected()) {
Serial.print("Connecting to MQTT server...");
if (mqtt_client.connect(mqtt_client_id, mqtt_username, mqtt_password)) {
Serial.println("connected!");
mqtt_client.subscribe(mqtt_topic); // 订阅主题
} else {
Serial.print("failed, rc=");
Serial.print(mqtt_client.state());
Serial.println(" retrying in 5 seconds");
delay(5000);
}
}
}
// MQTT回调函数,当接收到订阅的主题消息时会被调用
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("]: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void setup() {
Serial.begin(115200);
connect_wifi(); // 连接WiFi
mqtt_client.setServer(mqtt_server, mqtt_port); // 设置MQTT服务器信息
mqtt_client.setCallback(mqtt_callback); // 设置MQTT回调函数
}
void loop() {
if (!mqtt_client.connected()) {
connect_mqtt(); // 如果MQTT客户端没有连接,则进行连接
}
mqtt_client.loop(); // 处理MQTT消息
}
```
以上代码中,我们首先定义了WiFi连接信息、MQTT服务器信息、MQTT客户端信息和订阅主题信息等变量。然后声明了WiFi和MQTT客户端对象,分别用于连接WiFi和MQTT服务器。在`setup()`函数中,我们执行了WiFi连接操作,并且设置了MQTT服务器信息和回调函数。在`loop()`函数中,我们检查MQTT客户端是否连接,如果没有连接则进行连接,然后使用`mqtt_client.loop()`函数处理MQTT消息。
在`connect_mqtt()`函数中,我们首先判断MQTT客户端是否已经连接,如果没有连接则进行连接。在连接过程中,我们使用`mqtt_client.connect()`函数连接MQTT服务器,并且进行订阅操作。在`mqtt_callback()`函数中,我们定义了当接收到订阅的主题消息时的处理方式,这里将消息打印到串口上。
需要注意的是,以上代码仅供参考,具体实现方式可能因不同的应用场景而有所不同。例如,订阅主题的具体格式和内容需要根据实际需求进行定义。
阅读全文