#include <Adafruit_Sensor.h>
#include <DHT_U.h>
#include <Wire.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <LiquidCrystal_I2C.h>
const String unique_code = "00001";
// Define the pins for sensors
#define DHTPIN 12
#define DHTTYPE DHT22
#define SOIL_SENSOR_PIN 34
// Replace with your network credentials and Firebase details
const char* ssid = "Wokwi-GUEST"; // Setting your AP SSID
const char* password = ""; // Setting your AP PSK
const char* firebaseHost = ""; // Firebase Realtime Database URL
const char* authToken = ""; // Firebase Authentication Token
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println("Initializing...");
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Connected to WiFi");
dht.begin();
}
void loop() {
// Read sensor data
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int soilMoisture = analogRead(SOIL_SENSOR_PIN);
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Convert soil moisture to percentage
int soilMoisturePercent = map(soilMoisture, 0, 4095, 0, 100);
// Display sensor data on the Serial Monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Soil Moisture: ");
Serial.print(soilMoisturePercent);
Serial.println(" %");
// Prepare JSON payload
String jsonPayload = "{\"temperature\": " + String(temperature) +
", \"humidity\": " + String(humidity) +
", \"soilMoisture\": " + String(soilMoisturePercent) + "}";
// Send data to Firebase
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String("https://") + firebaseHost + "/sensorData/" + unique_code + ".json?auth=" + authToken;
http.begin(url);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.PUT(jsonPayload);
if (httpResponseCode > 0) {
String response = http.getString(); // Get and print the response payload
Serial.println("Data sent successfully");
Serial.println("Response: " + response);
} else {
Serial.print("Error sending data. HTTP Response Code: ");
Serial.println(httpResponseCode);
String response = http.getString();
Serial.println("Response: " + response);
}
http.end();
} else {
Serial.println("WiFi not connected");
}
delay(6000); // Send data every 60 seconds
}