#include <WiFi.h>
#include <PubSubClient.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define DHTPIN 15 // DHT22 pin
#define DHTTYPE DHT22 // DHT22 sensor type
#define MQTT_SERVER "test.mosquitto.org"
#define MQTT_PORT 1883
#define MQTT_USERNAME ""
#define MQTT_PASSWORD ""
#define TEMP_TOPIC "monitoring/temp27"
#define HUM_TOPIC "monitoring/hum27"
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
// Connect to Wi-Fi network
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Connect to MQTT broker
mqttClient.setServer(MQTT_SERVER, MQTT_PORT);
mqttClient.setCallback(mqttCallback);
while (!mqttClient.connected()) {
Serial.println("Connecting to MQTT broker...");
if (mqttClient.connect("ESP32Client", MQTT_USERNAME, MQTT_PASSWORD)) {
Serial.println("Connected to MQTT broker");
} else {
Serial.print("Failed with state ");
Serial.print(mqttClient.state());
delay(2000);
}
}
// Initialize DHT sensor
dht.begin();
}
void loop() {
// Read temperature and humidity from DHT sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read temperature and humidity from DHT sensor");
return;
}
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Publish temperature and humidity to MQTT broker
mqttClient.publish(TEMP_TOPIC, String(temperature).c_str());
mqttClient.publish(HUM_TOPIC, String(humidity).c_str());
delay(10000);
}
void mqttCallback(char* topic, byte* payload, unsigned int length) {
// Handle incoming MQTT messages (if any)
}