#include <WiFi.h>
#include <PubSubClient.h>
#include <DHTesp.h>
// -------------------- CONFIG --------------------
#define DHT_PIN 15
#define DHT_TYPE DHTesp::DHT22
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883; // ✅ Correct port
const char* mqtt_topic = "tempdata"; // topic
// -------------------- GLOBALS --------------------
DHTesp dht;
WiFiClient espClient;
PubSubClient client(espClient);
// -------------------- FUNCTION DECLARATIONS --------------------
void connectWiFi();
void connectMQTT();
void publishSensorData();
// -------------------- SETUP --------------------
void setup() {
Serial.begin(115200);
dht.setup(DHT_PIN, DHT_TYPE);
delay(2000);
connectWiFi();
client.setServer(mqtt_server, mqtt_port);
}
// -------------------- LOOP --------------------
void loop() {
if (!client.connected()) {
connectMQTT();
}
client.loop();
publishSensorData();
delay(2000);
}
// -------------------- CONNECT TO WIFI --------------------
void connectWiFi() {
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
// -------------------- CONNECT TO MQTT --------------------
void connectMQTT() {
while (!client.connected()) {
String clientId = "ESP32_DHT22_" + WiFi.macAddress();
clientId.replace(":", "");
Serial.print("Connecting to MQTT with Client ID: ");
Serial.println(clientId);
if (client.connect(clientId.c_str())) {
Serial.println("MQTT connected!");
} else {
Serial.print("MQTT connection failed, rc=");
Serial.println(client.state());
delay(2000);
}
}
}
// -------------------- READ SENSOR AND PUBLISH --------------------
void publishSensorData() {
TempAndHumidity data = dht.getTempAndHumidity();
if (!isnan(data.temperature) && !isnan(data.humidity)) {
String payload = String("{\"temperature\":") + data.temperature +
",\"humidity\":" + data.humidity + "}";
client.publish(mqtt_topic, payload.c_str(), true);
Serial.println("Published to lights: " + payload);
} else {
Serial.println("Failed to read from DHT22 sensor!");
}
}