#include <WiFi.h>
#include "time.h"
#include <SPI.h>
#include <SD.h>
#include <DHT.h>
#define SD_CS 5
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
File dataFile;
// WiFi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// NTP settings (India time)
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 19800;
const int daylightOffset_sec = 0;
// Store previous values
float lastTemp = -1000;
float lastHum = -1000;
void setup() {
Serial.begin(115200);
// Connect WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected");
// Setup time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
// Init DHT
dht.begin();
// Init SD Card
if (!SD.begin(SD_CS)) {
Serial.println("SD Card initialization failed!");
return;
}
Serial.println("SD Card initialized");
// Create file and write header
dataFile = SD.open("/sensor.csv", FILE_WRITE);
if (dataFile) {
dataFile.println("Time,Temperature,Humidity");
dataFile.close();
}
}
void loop() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (isnan(temp) || isnan(hum)) {
Serial.println("DHT read failed!");
return;
}
// Check threshold condition
if (abs(temp - lastTemp) > 0.5 || abs(hum - lastHum) > 0.5) {
// Get time
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to get time");
return;
}
char timeString[30];
strftime(timeString, sizeof(timeString), "%Y-%m-%d %H:%M:%S", &timeinfo);
// Write to SD card
dataFile = SD.open("/sensor.csv", FILE_APPEND);
if (dataFile) {
dataFile.print(timeString);
dataFile.print(",");
dataFile.print(temp);
dataFile.print(",");
dataFile.println(hum);
dataFile.close();
}
Serial.println("\nā
New Data Logged!");
// š„ READ FULL FILE AND PRINT
dataFile = SD.open("/sensor.csv", FILE_READ);
if (dataFile) {
Serial.println("----- FULL LOG FILE -----");
while (dataFile.available()) {
Serial.write(dataFile.read());
}
dataFile.close();
Serial.println("\n-------------------------");
}
// Update last values
lastTemp = temp;
lastHum = hum;
} else {
Serial.println("No significant change in Sensor Data");
}
delay(2000);
}