#include <WiFi.h>
#include <DHT.h>
#include <FirebaseESP32.h>
#include <PubSubClient.h>
// Replace with your Wi-Fi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Your Firebase project credentials
#define FIREBASE_HOST "https://ibmgroup5-default-rtdb.firebaseio.com/ "
#define FIREBASE_AUTH_FILE "ibmgroup5-firebase-adminsdk-d24u0-6b4b2edee0.json"
const int DHTPin = 4; // Pin to which the DHT sensor is connected
DHT dht(DHTPin, DHT22);
// MQTT Broker
const char* mqttServer = "ed342ccf55c1484eb534c8c92861048b.s2.eu.hivemq.cloud"; // Replace with your MQTT broker address
const int mqttPort = 8883;
const char* mqttUser = "aiyengar";
const char* mqttPassword = "Mh12hn4226!!!";
const char* mqttTopic = "ESP32";
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Firebase setup (same as previous code)
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH_FILE);
Firebase.reconnectWiFi(true);
Firebase.setFloatDigits(2); // Set the number of decimal places for floating-point values
// MQTT setup
mqttClient.setServer(mqttServer, mqttPort);
mqttClient.setCallback(mqttCallback);
// Connect to MQTT broker
if (mqttClient.connect("ESP32Client", mqttUser, mqttPassword)) {
Serial.println("Connected to MQTT broker");
}
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (!isnan(humidity) && !isnan(temperature)) {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Firebase (same as previous code)
Firebase.setFloat(firebaseData, "/environment/temperature", temperature);
Firebase.setFloat(firebaseData, "/environment/humidity", humidity);
if (Firebase.failed()) {
Serial.println("Firebase failed");
Serial.println(firebaseData.errorReason());
} else {
Serial.println("Data sent to Firebase");
}
// MQTT publish
String tempPayload = String(temperature);
String humidityPayload = String(humidity);
mqttClient.publish((String(mqttTopic) + "/temperature").c_str(), tempPayload.c_str());
mqttClient.publish((String(mqttTopic) + "/humidity").c_str(), humidityPayload.c_str());
} else {
Serial.println("Failed to read from DHT sensor");
}
mqttClient.loop();
delay(60000); // Send data every 60 seconds
}
void mqttCallback(char* topic, byte* payload, unsigned int length) {
// Handle MQTT subscription messages if needed
}