PubSubClient.h代码示例
时间: 2023-12-21 13:05:10 浏览: 67
以下是一个使用 PubSubClient.h 库连接 MQTT 服务器并发布/订阅主题的代码示例:
```c++
#include <WiFi.h>
#include <PubSubClient.h>
// WiFi 参数
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// MQTT 服务器参数
const char* mqtt_server = "your_MQTT_server";
const int mqtt_port = 1883;
const char* mqtt_username = "your_MQTT_username";
const char* mqtt_password = "your_MQTT_password";
// WiFi 客户端和 MQTT 客户端
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
// 回调函数,当收到订阅的主题消息时执行
void callback(char* topic, byte* payload, unsigned int length) {
// 将消息转换为字符串
String message;
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
// 处理消息
Serial.println("Received message: " + message);
}
void setup() {
// 连接 WiFi
Serial.begin(9600);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// 连接 MQTT 服务器
mqttClient.setServer(mqtt_server, mqtt_port);
while (!mqttClient.connected()) {
if (mqttClient.connect("ESP32Client", mqtt_username, mqtt_password)) {
Serial.println("Connected to MQTT server");
} else {
Serial.print("Failed to connect to MQTT server, rc=");
Serial.print(mqttClient.state());
Serial.println(" retrying in 5 seconds");
delay(5000);
}
}
// 订阅主题
mqttClient.setCallback(callback);
mqttClient.subscribe("test/topic");
}
void loop() {
// 发布消息
String message = "Hello from ESP32";
mqttClient.publish("test/topic", message.c_str());
// 检查是否有新的 MQTT 消息
mqttClient.loop();
// 等待一段时间
delay(1000);
}
```
以上代码中,我们使用 Wi-Fi 客户端连接 Wi-Fi 网络,并使用 MQTT 客户端连接 MQTT 服务器。我们使用 `mqttClient.setCallback()` 方法指定一个回调函数,在收到订阅主题的消息时执行。我们使用 `mqttClient.subscribe()` 方法订阅一个主题。在 `loop()` 函数中,我们使用 `mqttClient.publish()` 方法发布一条消息,并使用 `mqttClient.loop()` 方法检查是否有新的 MQTT 消息。
阅读全文