Smart light system based on time which turn off and on on your light and appliances at your given time. This system is based on RTC module and made by using ESP32
Component required
- PCB board
- Jumper wire
- ESP32 microcontroller
- RTC Module
- OLED
- LED
- USB type B cable
Set up environment for ESP32 >> Click to this link https://elconics.com/getting-started-withesp32/
Install some libraries
Click on following links —
- RTC — https://github.com/adafruit/RTClib
- Adafruit GFX –https://github.com/adafruit/Adafruit-GFX-Library
- Adafruit SSD1306 –https://github.com/adafruit/Adafruit_SSD1306
Install these Libraries by click on zip download

Include in Library manager — sketch>>include library >> add zip library

Select the downloaded file and click on open >> you see this notification in bottom of your IDE

Follow this same step and install all libraries given above
Connect OLED

Connect RTC module

Connect LED

Code create a new file and upload this code to your Arduino IDE.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int led=26;
void setup()
{
Serial.begin(9600);
pinMode(led,OUTPUT);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
// Display static text
display.println("Elconic!");
display.display();
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
//rtc.adjust(DateTime(__DATE__, __TIME__));
display.clearDisplay();
}
void loop()
{ delay(1000);
display.clearDisplay();
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
//display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(daysOfTheWeek[now.dayOfTheWeek()]);
display.setCursor(0,20);
// Display static text
display.println(now.hour(), DEC);
display.setCursor(25, 20);
display.println(":");
display.setCursor(35, 20);
display.println(now.minute(), DEC);
display.setCursor(65, 20);
display.println(":");
display.setCursor(85, 20);
display.println(now.second(), DEC);
display.display();
display.setCursor(0, 40);
// Display static text
display.println(now.day(), DEC);
display.setCursor(14, 40);
display.println("/");
display.setCursor(30, 40);
display.println(now.month(), DEC);
display.setCursor(60, 40);
display.println("/");
display.setCursor(80, 40);
display.println(now.year(), DEC);
// delay(1000);
display.display();
if ((now.hour()>=22 && now.minute()==00 )||( now.hour()<=6 && now.minute()==00))
{
digitalWrite(led,LOW);
}
else
{
digitalWrite(led,HIGH);
}
}