#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <Firebase_ESP_Client.h>
#include "addons/TokenHelper.h"
#include "addons/RTDBHelper.h"
#include "DHT.h"
#include <Adafruit_Sensor.h>
// Insert your network credentials
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Insert Firebase project API Key
#define API_KEY "AIzaSyCQBJQ_fgrqgnvRTBaPN2SHtTZz1jvYUrc"
// Insert RTDB URL
#define DATABASE_URL "https://problem7-ccdba-default-rtdb.firebaseio.com/"
// Define Firebase Data object
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
// DHT22 setup
#define DHTPIN 4 // GPIO pin where the DHT22 is connected
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
unsigned long sendDataPrevMillis = 0;
float temperature = 0.0;
float humidity = 0.0;
bool firebaseReady = false;
void readData();
void updateData();
void deleteData();
void setup() {
Serial.begin(115200);
// Start DHT sensor
dht.begin();
// Connect to Wi-Fi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
// Assign the API key (required)
config.api_key = API_KEY;
// Assign the RTDB URL (required)
config.database_url = DATABASE_URL;
// Assign the user authentication credentials
auth.user.email = "[email protected]";
auth.user.password = "123456789";
// Initialize Firebase
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
// Check if Firebase is initialized successfully
if (auth.token.uid.length() > 0) {
Serial.println("Signed in successfully");
firebaseReady = true;
} else {
Serial.println("Failed to sign in");
}
// Set token status callback
config.token_status_callback = tokenStatusCallback; // see addons/TokenHelper.h
Serial.println("Enter command (r=read, u=update, d=delete): ");
}
void loop() {
// Check if Firebase is ready and connected
if (Firebase.ready() && firebaseReady) {
// Check if data is available in the Serial buffer
if (Serial.available() > 0) {
char command = Serial.read();
Serial.print("Command received: ");
Serial.println(command); // Print the received command for debugging
// Execute corresponding function based on the command
switch (command) {
case 'r':
readData();
break;
case 'u':
updateData();
break;
case 'd':
deleteData();
break;
default:
Serial.println("Unknown command. Use 'r' to read, 'u' to update, or 'd' to delete.");
break;
}
}
} else {
Serial.println("Firebase is not ready or not connected.");
}
}
// Function to read data from Firebase
void readData() {
Serial.println("Reading data from Firebase...");
if (Firebase.RTDB.getFloat(&fbdo, "/sensor/temperature")) {
float temp = fbdo.floatData();
Serial.print("Temperature: ");
Serial.println(temp);
} else {
Serial.print("Failed to read temperature: ");
Serial.println(fbdo.errorReason());
}
if (Firebase.RTDB.getFloat(&fbdo, "/sensor/humidity")) {
float hum = fbdo.floatData();
Serial.print("Humidity: ");
Serial.println(hum);
} else {
Serial.print("Failed to read humidity: ");
Serial.println(fbdo.errorReason());
}
}
// Function to update data in Firebase
void updateData() {
Serial.println("Updating data in Firebase...");
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
if (Firebase.RTDB.setFloat(&fbdo, "/sensor/temperature", temperature)) {
Serial.println("Temperature data updated successfully");
} else {
Serial.print("Failed to update temperature: ");
Serial.println(fbdo.errorReason());
}
if (Firebase.RTDB.setFloat(&fbdo, "/sensor/humidity", humidity)) {
Serial.println("Humidity data updated successfully");
} else {
Serial.print("Failed to update humidity: ");
Serial.println(fbdo.errorReason());
}
}
// Function to delete data in Firebase
void deleteData() {
Serial.println("Deleting data from Firebase...");
if (Firebase.RTDB.deleteNode(&fbdo, "/sensor/temperature")) {
Serial.println("Temperature data deleted successfully");
} else {
Serial.print("Failed to delete temperature data: ");
Serial.println(fbdo.errorReason());
}
if (Firebase.RTDB.deleteNode(&fbdo, "/sensor/humidity")) {
Serial.println("Humidity data deleted successfully");
} else {
Serial.print("Failed to delete humidity data: ");
Serial.println(fbdo.errorReason());
}
}