#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!");
<!DOCTYPE html>
<html>
<head>
<title>ESP32 DHT22 Dashboard</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"></script>
<script>
// Thiết lập kết nối MQTT
var client = new Paho.MQTT.Client("mqtt-broker-url", port, "web-client-" + new Date().getTime());
client.onConnectionLost = function (responseObject) {
console.log("Connection lost: " + responseObject.errorMessage);
};
client.connect({
onSuccess: function () {
console.log("Connected to MQTT broker");
client.subscribe("dht22/temperature");
client.subscribe("dht22/humidity");
},
onFailure: function (message) {
console.log("Connection failed: " + message.errorMessage);
}
});
// Cập nhật giá trị nhiệt độ và độ ẩm
client.onMessageArrived = function (message) {
if (message.destinationName == "dht22/temperature") {
document.getElementById("temperature").innerHTML = message.payloadString + " °C";
} else if (message.destinationName == "dht22/humidity") {
document.getElementById("humidity").innerHTML = message.payloadString + " %";
}
};
</script>
</head>
<body>
<h1>ESP32 DHT22 Dashboard</h1>
<div>Nhiệt độ: <span id="temperature">--</span></div>
<div>Độ ẩm: <span id="humidity">--</span></div>
</body>
</html>
// 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();
}