#include <WiFi.h>
#include <DHT.h>
#include <PubSubClient.h>
const int pinLED = 5;
const int pinDHT = 19;
const char id[] = "HoTenSV's ESP32";
const char baseTopic[] = "HoTenSV/";
const char tempTopic[] = "HoTenSV/temperature";
const char ledTopic[] = "HoTenSV/LED";
WiFiClient network;
PubSubClient client(network);
DHT dht(pinDHT, DHT22);
float temp;
void wifi_connect() {
WiFi.begin("Wokwi-GUEST", "", 6);
while(WiFi.status() != WL_CONNECTED) delay(1000);
}
void mqtt_connect() {
if (!client.connected()) {
while (!client.connect(id)) delay(3000);
client.publish(baseTopic, id);////
client.subscribe(ledTopic);
Serial.println("Connected to broker.");
}
}
void setup() {
Serial.begin(115200);
pinMode(pinLED, OUTPUT);
dht.begin();
wifi_connect(); // Kết nối WiFi
client.setServer("test.mosquitto.org", 1883); // mqtt.fluux.io, broker.emqx.io
client.setCallback(xuly);
}
void xuly(char* topic, byte* payload, unsigned int length) { // Nhận về data từ topic
if (strcmp(topic, ledTopic) == 0) {
if (strncmp((char*) payload, "mo", length) == 0) {
digitalWrite(pinLED, HIGH);
} else if (strncmp((char*) payload, "tat", length) == 0) {
digitalWrite(pinLED, LOW);
}
}
}
void loop() {
mqtt_connect();
temp = dht.readTemperature(); // Đọc nhiệt độ
if (!isnan(temp)) {
client.publish(tempTopic, String(temp, 1).c_str()); // Gửi nhiệt độ lên topic
Serial.println("Sent temperature to broker.");
}
client.loop();
delay(1000);
}