#include <DHT.h>
#include <WiFi.h>
#include "PubSubClient.h"
DHT dht(4, DHT22);
float temperature;
float humidity;
float td[] = {0.0, 0.0, 0.0};
float da[] = {0.0, 0.0, 0.0};
int d = 0;
const char* MQTTServer = "broker.hivemq.com";
const char* MQTT_Topic_Temperature = "kh/nhietdo";
const char* MQTT_Topic_Humidity = "kh/doam";
const char* MQTT_Topic_TB = "kh/tbnhietdo";
const char* MQTT_ID = "633e195a-df79-400b-b05a-96c6b285f164";
int Port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void WIFIConnect() {
Serial.println("Connecting to SSID: Wokwi-GUEST");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected, IP address: ");
Serial.println(WiFi.localIP());
}
void MQTT_Reconnect() {
while (!client.connected()) {
if (client.connect(MQTT_ID)) {
Serial.println("MQTT connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup() {
Serial.begin(9600);
dht.begin();
WIFIConnect();
client.setServer(MQTTServer, Port);
}
void loop() {
if (!client.connected()) {
MQTT_Reconnect();
}
temperature = dht.readTemperature();
humidity = dht.readHumidity();
Serial.println(temperature);
Serial.println(humidity);
// Lưu vào mảng
int pt = d % 3;
td[pt] = temperature;
da[pt] = humidity;
d++;
// Tính trung bình
float avgTemp = 0;
float avgHum = 0;
for (int i = 0; i < 3; i++) {
avgTemp += td[i];
avgHum += da[i];
}
avgTemp /= 3;
avgHum /= 3;
Serial.print("TB nhiệt độ: ");
Serial.println(avgTemp);
// Gửi nhiệt độ và độ ẩm lên MQTT Broker
String tempStr = String(temperature);
String humStr = String(humidity);
String TBavgTemp = String(avgTemp);
client.publish(MQTT_Topic_Temperature, tempStr.c_str());
client.publish(MQTT_Topic_Humidity, humStr.c_str());
client.publish(MQTT_Topic_TB, TBavgTemp.c_str());
delay(1000); // Gửi dữ liệu mỗi 1 giây
client.loop();
}