/*Project Sem 3
ENVIROMENTAL MONITORING SYSTEM WITH BLYNK INTEGRATION
Sharifah Hana Humaira 52224122452
IZZAH BINTI MOHD NIZAM 52224122098*/
//connection to Blynk
#define BLYNK_TEMPLATE_ID "TMPL6GtflE36p"
#define BLYNK_TEMPLATE_NAME "Project Sem 3"
#define BLYNK_AUTH_TOKEN "KTVxYs8e2L1rE9-OsLKEsQB5L213Y0w-"
#include "DHTesp.h"
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
const int DHT_PIN = 15;
const int LDR_PIN = 34;
DHTesp dhtSensor;
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
BlynkTimer timer;
#define BLYNK_PRINT Serial
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void myTimerEvent()
{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(data.temperature, 2) + "C");
delay(2000); // Display temperature for 2 seconds
lcd.clear();
lcd.print("Humidity: " + String(data.humidity, 1) + "%");
delay(2000); // Display humidity for 2 seconds
lcd.clear();
lcd.print("Time: " + String(now.hour()) + ":" + String(now.minute()) + ":" + String(now.second()));
delay(2000); // Display time for 2 seconds
lcd.clear();
//send Data to Blynk
Blynk.virtualWrite(V0, data.temperature);
Blynk.virtualWrite(V1, data.humidity);
int ldrValue = analogRead(LDR_PIN);
bool isDay = ldrValue < 1200;
Blynk.virtualWrite(V2, isDay ? "Day" : "Night");
//Print Serial Monitor
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("Time: " + String(now.hour()) + ":" + String(now.minute()) + ":" + String(now.second()));
Serial.println("LDR Value: " + String(ldrValue));
Serial.println(String("Day/Night: ") + (isDay ? "Day" : "Night"));
Serial.println("---");
}
void setup()
{
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
//Check RTC
if (!rtc.begin())
{
Serial.println("Couldn't find RTC");
while (1)
;
}
if (rtc.lostPower())
{
Serial.println("RTC lost power, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
//Print to LCD
lcd.print("Temp: --.-C Humidity: --%");
lcd.setCursor(0, 1);
lcd.print("Time: --:--:--");
timer.setInterval(1000L, myTimerEvent);
}
void loop()
{
Blynk.run();
timer.run();
}