#include <DHT.h>
#include <ESP32Servo.h> // Use ESP32Servo instead of Servo library
#include <SPI.h>
#include <SD.h>
// Blynk credentials
#define BLYNK_TEMPLATE_ID "TMPL2f5YLyu1U"
#define BLYNK_TEMPLATE_NAME "Smart watering system"
#define BLYNK_AUTH_TOKEN "pMXXgwg8K89AB9n3mWizEn7Slh2yKbjV"
#define DHTPIN 4 // DHT22 data pin
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define LED_PIN 12 // LED connected to GPIO 23
#define SERVO_PIN 13 // Servo control pin
#define SD_CS 5 // SD card chip select cs pin
// Global Variables
// Global Variables
Servo servo; // ESP32Servo object
DHT dht(DHTPIN, DHTTYPE); // DHT object for temperature and humidity
File dataFile; // File object for SD card operations
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
while (!Serial) {
; // Wait for Serial Monitor to connect
}
// Initialize DHT Sensor
dht.begin();
Serial.println("DHT22 Sensor Initialized");
// Initialize Servo
servo.attach(SERVO_PIN); // Attach servo to GPIO 14
servo.write(0); // Set initial position to 0 degrees
Serial.println("Servo Initialized");
// Initialize LED
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
Serial.println("LED Initialized");
// Initialize SD Card
if (!SD.begin(SD_CS)) {
Serial.println("SD card initialization failed!");
return;
}
Serial.println("SD card initialized successfully.");
Blynk.begin(auth, "Your_SSID", "Your_PASSWORD"); // Replace with your WiFi credentials
}
void loop() {
// Read Temperature and Humidity
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Check if readings are valid
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Print readings to Serial Monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Log data to SD card
File dataFile = SD.open("data.txt", FILE_WRITE);
if (dataFile) {
dataFile.print("Temperature: ");
dataFile.print(temperature);
dataFile.print(" °C, Humidity: ");
dataFile.print(humidity);
dataFile.println(" %");
dataFile.close();
Serial.println("Data logged to SD card.");
} else {
Serial.println("Failed to open file on SD card.");
}
// Control Servo and LED based on temperature
if (humidity < 60 ) {
servo.write(90); // Move servo to 90 degrees
digitalWrite(LED_PIN, HIGH); // Turn on LED
} else {
servo.write(0); // Move servo back to 0 degrees
digitalWrite(LED_PIN, LOW); // Turn off LED
}
// Send data to Blynk
Blynk.virtualWrite(V1, temperature); // Send temperature data to Blynk app
Blynk.virtualWrite(V2, humidity); // Send humidity data to Blynk app
// Wait before taking the next reading
delay(2000);
}