#include <DHT.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include "PubSubClient.h"
DHT dht(4, DHT11);
float temperature;
float humidity;
const char *MQTTServer = "broker.hivemq.com";
const char *MQTT_Topic = "hknhan/nhietdo";
const char *MQTT_Output_Topic = "hknhan/ledStatus";
const char *MQTT_ID = "emnhandepzai";
int Port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
const int ledPin = 12;
void WIFIConnect() {
Serial.println("Connecting to SSID: nhan");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected");
Serial.print(", IP address: ");
Serial.println(WiFi.localIP());
}
void MQTT_Reconnect() {
while (!client.connected()) {
if (client.connect(MQTT_ID)) {
Serial.print("MQTT Topic: ");
Serial.print(MQTT_Topic);
Serial.println(" connected");
client.subscribe(MQTT_Topic);
client.subscribe(MQTT_Output_Topic);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
// Kết nối đến mạng WiFi
WIFIConnect();
// Gửi yêu cầu HTTP GET để lấy trạng thái đèn
HTTPClient http;
String url = "http://66yhqrma3f.sharedwithexpose.com/aaaa/data.php?fetchLedStatus=true";
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
if (payload.equals("1")) {
digitalWrite(ledPin, HIGH);
Serial.println("LED status: " + payload);
} else {
Serial.println("Failed to get LED status, HTTP error code: " + String(httpCode));
}
} else {
Serial.println("Failed to connect to server");
}
}
http.end();
// Kết nối MQTT
client.setServer(MQTTServer, Port);
MQTT_Reconnect();
}
void loop() {
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
if (!client.connected()) {
MQTT_Reconnect();
}
client.loop();
String payload = "{\"temperature\": " + String(temperature) + ", \"humidity\": " + String(humidity) + "}";
client.publish(MQTT_Topic, payload.c_str());
delay(10000);
}