#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <DHT.h>
#include <PubSubClient.h>
#define DHTPIN 19
#define DHTTYPE DHT22
const char id[] = "MCU-240503";
const char topic[] = "CCN047";
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
WiFiClient network;
PubSubClient client(network);
bool doneRead = false;
float temp;
void wifi_connect() {
WiFi.begin("Wokwi-GUEST", "", 6);
while(WiFi.status() != WL_CONNECTED) delay(1000);
lcd.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
dht.begin();
lcd.init(); lcd.backlight();
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) {
if (strncmp((char*) payload, "show", length) == 0) {
doneRead = true;
Serial.println("Received");
}
}
void loop() {
while (!client.connected()) {
if (client.connect(id)) {
client.subscribe(topic);
client.publish(topic, id);
} else delay(5000);
}
if (doneRead) {
temp = dht.readTemperature();
if (isnan(temp)) {
lcd.print("Cannot read sensors!");
return;
} else {
lcd.clear();
lcd.print("Temperature="); lcd.print(temp, 1);
client.publish(topic, String(temp, 1).c_str());
}
doneRead = false;
}
client.loop();
delay(3000);
}