#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// ===== OLED Settings =====
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// ===== DHT Sensor =====
#define DHTPIN 2
#define DHTTYPE DHT11 // Agar DHT22 use kar rahay ho to DHT22 likho
DHT dht(DHTPIN, DHTTYPE);
// ===== SD Card =====
#define SD_CS 10 // SD Card CS Pin
File dataFile;
void setup() {
Serial.begin(9600);
// ===== OLED Start =====
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED not found");
while(1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
// ===== DHT Start =====
dht.begin();
// ===== SD Card Start =====
if (!SD.begin(SD_CS)) {
display.clearDisplay();
display.setCursor(0,0);
display.println("SD Card Failed");
display.display();
Serial.println("SD Card Failed");
while (1);
}
// Create Header
dataFile = SD.open("DATA.txt", FILE_WRITE);
if (dataFile) {
dataFile.println("Temperature , Humidity");
dataFile.close();
}
display.clearDisplay();
display.setCursor(0,0);
display.println("System Ready");
display.display();
delay(2000);
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Check Sensor
if (isnan(humidity) || isnan(temperature)) {
display.clearDisplay();
display.setCursor(0,0);
display.println("Sensor Error");
display.display();
Serial.println("Sensor Error");
delay(2000);
return;
}
// ===== OLED Display =====
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0,0);
display.print("Temp:");
display.print(temperature);
display.println("C");
display.setCursor(0,35);
display.print("Hum:");
display.print(humidity);
display.println("%");
display.display();
// ===== Save to SD Card =====
dataFile = SD.open("DATA.txt", FILE_WRITE);
if (dataFile) {
dataFile.print("Temperature: ");
dataFile.print(temperature);
dataFile.print(" C , ");
dataFile.print("Humidity: ");
dataFile.print(humidity);
dataFile.println(" %");
dataFile.close();
Serial.println("Data Saved");
}
else {
Serial.println("File Error");
}
delay(5000); // 5 seconds
}