#include <Arduino.h>
#include <DHTesp.h>
#include <WiFi.h>
#include <PubSubClient.h>
DHTesp dhtSensor;
const int DHT_PIN = 15;
const char * MQTTServer = "broker.emqx.io";
const char * MQTT_Topic = "doC";
// Tạo ID ngẫu nhiên tại: https://www.guidgen.com/
const char * MQTT_ID = "";
int Port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
// Kết nối WiFi vào mạng "Wokwi-GUEST" trên Wokwi
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Kết nối!");
// Thiết lập kết nối MQTT và cài đặt callback
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
// Thiết lập cảm biến DHT22
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void callback(char* topic, byte* payload, unsigned int length) {
// Xử lý dữ liệu nhận được từ MQTT
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
// Chuyển dữ liệu nhận được thành nhiệt độ và độ ẩm
float temperature = message.substring(0, message.indexOf(',')).toFloat();
float humidity = message.substring(message.indexOf(',') + 1).toFloat();
// In thông số nhận được
Serial.print("Dữ liệu nhận từ MQTT - Nhiệt độ: ");
Serial.print(temperature);
Serial.print("°C, Độ ẩm: ");
Serial.print(humidity);
Serial.println("%");
// Điều khiển cảm biến DHT22
float currentTemperature = dhtSensor.getTemperature();
float currentHumidity = dhtSensor.getHumidity();
Serial.print("Nhiệt độ hiện tại: ");
Serial.println(currentTemperature);
Serial.print("Độ ẩm hiện tại: ");
Serial.println(currentHumidity);
}
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP32Client", mqtt_user, mqtt_password)) {
Serial.println("Đã kết nối MQTT");
client.subscribe(mqtt_topic);
} else {
Serial.print("Lỗi kết nối MQTT, thử lại trong 5 giây...");
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}