#define BLYNK_TEMPLATE_ID "TMPL6IPJt1j8W"
#define BLYNK_TEMPLATE_NAME "fyp baru"
#define BLYNK_AUTH_TOKEN "kNN6qCu5VWKk35pSvh0VAQ8maYm1Wo0q"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int ledPinGreen = 12;
const int ledPinRed = 13;
const int dhtPin = 15;
const int ldrPin = 34;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
// Define DHT type
#define DHTTYPE DHT22
// Initialize DHT sensor
DHT dht(dhtPin, DHTTYPE);
// Initialize RTC
RTC_DS3231 rtc;
// Initialize OLED display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Wi-Fi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void setup() {
Serial.begin(115200);
// Set LED pins as output
pinMode(ledPinGreen, OUTPUT);
pinMode(ledPinRed, OUTPUT);
digitalWrite(ledPinGreen, LOW);
digitalWrite(ledPinRed, LOW);
// Initialize DHT sensor
dht.begin();
// Initialize RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Set RTC to current time if it lost power
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Initialize OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
// Connect to Wi-Fi and Blynk
WiFi.begin(ssid, pass);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
Blynk.run();
// Read temperature and humidity from DHT sensor
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Check if any reads failed and exit early if so
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Get current date and time from RTC
DateTime now = rtc.now();
// Read LDR value
int ldrValue = analogRead(ldrPin);
// Print data to Serial Monitor
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" *C\t");
Serial.print("Date/Time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print("\tLDR: ");
Serial.println(ldrValue);
// Display data on OLED screen
display.clearDisplay();
display.setCursor(0, 0);
display.print("Temp: ");
display.print(temperature);
display.println(" *C");
display.print("Humidity: ");
display.print(humidity);
display.println(" %");
display.print("Date: ");
display.print(now.year(), DEC);
display.print('/');
display.print(now.month(), DEC);
display.print('/');
display.print(now.day(), DEC);
display.println();
display.print("Time: ");
display.print(now.hour(), DEC);
display.print(':');
display.print(now.minute(), DEC);
display.print(':');
display.print(now.second(), DEC);
display.println();
display.print("LDR: ");
display.print(ldrValue);
display.display();
// Control LEDs based on temperature and LDR values
if (ldrValue > 2048) {
if (temperature >= 27 && temperature <= 32) {
digitalWrite(ledPinGreen, HIGH);
digitalWrite(ledPinRed, LOW);
} else if (temperature > 32) {
digitalWrite(ledPinRed, HIGH);
digitalWrite(ledPinGreen, LOW);
} else {
digitalWrite(ledPinGreen, LOW);
digitalWrite(ledPinRed, LOW);
}
} else {
digitalWrite(ledPinRed, HIGH);
digitalWrite(ledPinGreen, LOW);
}
// Send data to Blynk
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, humidity);
Blynk.virtualWrite(V2, ldrValue);
Blynk.virtualWrite(V3, digitalRead(ledPinGreen));
Blynk.virtualWrite(V4, digitalRead(ledPinRed));
}