#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
//
// WIFI
//
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//
// MQTT
//
const char* mqtt_server = "broker.mqttdashboard.com";
WiFiClient espClient;
PubSubClient client(espClient);
//
// DHT22
//
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
unsigned long lastMsg = 0;
//
// WIFI CONNECT
//
void setup_wifi() {
Serial.println();
Serial.print("Connecting WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi Connected");
}
//
// MQTT RECONNECT
//
void reconnect() {
while (!client.connected()) {
Serial.print("Connecting MQTT...");
if (client.connect("wokwi-esp32-client")) {
Serial.println("Connected");
} else {
Serial.print("Failed MQTT: ");
Serial.println(client.state());
delay(2000);
}
}
}
//
// SETUP
//
void setup() {
Serial.begin(115200);
//
// DHT
//
dht.begin();
//
// WIFI
//
setup_wifi();
//
// MQTT
//
client.setServer(mqtt_server, 1883);
}
//
// LOOP
//
void loop() {
//
// MQTT CHECK
//
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
//
// EVERY 5 SECONDS
//
if (now - lastMsg > 5000) {
lastMsg = now;
//
// READ DHT
//
float temp = dht.readTemperature();
float hum = dht.readHumidity();
//
// CHECK SENSOR
//
if (isnan(temp) || isnan(hum)) {
Serial.println("DHT Failed!");
return;
}
//
// PRINT SERIAL
//
Serial.print("Temp: ");
Serial.println(temp);
Serial.print("Humidity: ");
Serial.println(hum);
//
// MQTT PUBLISH
//
client.publish(
"home/wokwi/temperature",
String(temp).c_str(),
true
);
client.publish(
"home/wokwi/humidity",
String(hum).c_str(),
true
);
Serial.println("Published");
}
}